GU на PSP
Вложений: 1
Вот, посмотрел доку.
Код:
GU_TRIANGLE_STRIP - Filled triangles-strip (3 vertices for the first primitive, 1 for every following) Да, вот ещё что интересное увидел: Код:
void sceGuFrontFace ( int order ) Ладно, это сейчас не так важно. Чайник со СТРИПОМ(cube.zip - для 1.50, кидать в psp/game): |
Все эти команды аналогичны командам из обычного opengl, любая отрисовка подразумевает что у тебя есть видимые полигоны и невидимые (т.е. те что отрисовываются за видимыми глубже по z буферу) соотвественно enabled (GU_CULL_FACE) включает возможность проверки на отрисовку полигонов, а sceGuFrontFace собственно включает саму проверку на отображение полигонов переднего плана. GU_TRIANGLE_STRIP - соотвественно тоже полностью аналогичен командам opengl. В том примере что ты мне показывал, попробуй заменить GU_TRIANGLE_STRIP (каждый следующий полигон строится по двум предыдущем точкам и одной новой) на GU_TRIANGLES (каждый следующий полигон строится по трем новым точкам)
|
Ну немного опоздал ты. Хотя всё равно спс. Вроде въехал.
Двусторонние полигоны я уже просёк как строить, сейчас думаю с чем дальше разбираться... добавлено через 16 минут Ага, вот ещё. Код:
struct Vertex __attribute__((aligned(16))) vertices[4] = Вопрос другой, как я буду, не отрываясь от предыдущего полигона, отрисовывать примитив, например Куб? Или это как в той детской загадке получается: нарисуйти домик, неотрывая ручку от бумаги и не повторяя нарисованных линий? |
Простой полигон состоит всего-лишь из трёх вершин.
В твоём примере это треугольник: {1, 1, 0xff7f0000,-1,-1,0}, {1, 1, 0xff7f0000,1,1,0}, {1, 1, 0xff7f0000,0,0,1}, Чтобы завершить этот полигон и представить его ввиде квадратной плоскости нам нужно добавить обратный треугольник. Тоесть сомкнуть вершины так, что бы из двух полигонов получилась плоскость в виде квадрата. Последовательность замыкания треугольников значения не имеет. |
TRIANGLE_STRIP нужен для быстрой отрисовки больших обьемов полигонов, например любой ландшафт можно представить в виде одного стрипа, это сильно экономит видео память так как за место 3 вершин грузиш всего одну. Для мало полигональных моделей это не особо эффективно посему, используется чаще всего просто TRIANGLES. Хотя практически любую модельку можно представить в виде стрипа или набора стрипов (в моделерах есть такая галка).
|
Муш, прото что квадрат состоит из двух треугольников - это понятно.
Спрашивал я немонго другое. Четвёртая точка, в моём случае, делает обратную сторону полигона, если я правильно понял. Если я добавлю ещё одну точку, то следующий полигон от каких вершин будет строиться? От последних двух? А если мне надо нарисовать полигон не от этих вершин? Вот тут и получается что я привязан к последнему нарисованному треугольнику. И если я это не буду учитывать, то на экране будет каша. И что значит последовательность замыкания? Она всего одна, от последних 2х точек. Поправьте, если где не прав. добавлено через 1 минуту Бони, понятно. Я посмотрю в максе, может есть такая возможность... |
Цитата:
добавлено через 2 минуты Возможно в GU можно использовать триангуляцию монотонных полигонов. Это как раз то очем ты говорил "домик не отрывая ручки". Но об этом в GU я не знаю. |
Вложений: 1
Гы, значит кубик нарисовался, всё Ок. НО!
Почемуто некоторые треугольники помаргивают... т.е. Такое ощущение что сквозь них что-то пытается пробиться... Хм... Посмотрите, если кому не в лом... |
капитан сорсы с мэйк файлом положи и я гляну...
|
какое то мерцание
|
Вложений: 1
Да собственно это сделано на основе примера из ПСПСДК, только вот в примере всё Ок, а как только я меняю геометрию - всё чёрти как.
|
Уффффф.
Фсё... разобрался, кубик рисуется всё без стрипа и без внутренностей - выглядит отлично и не мерцает. Дело-то было в одной строчке: sceGuFrontFace(GU_CCW); С этим уже можно жить... |
Цитата:
Очень рад за тебя! Поздравляю. Существенный прорыв! |
Муш не смейся, я ведь только учусь :)
Мысли вслух: Мне захотелось сделат что-то типа 3д движка. Ну чтобы, например, можнон было ходить вокруг этого кубика, смотреть на него с разных сторон. Но возникли вопросы, над которыми мне стоит основательно задуматься. Вот так кубик вращается вокруг своей оси: Код:
ScePspFVector3 pos = { 0, 0, -2.5f + movez*0.1}; Поскольку я этого никогда не делал, то возникла у меня идея начать смещение кубика по оси х в зависимости от расстояния от него. Вот как-то так: Код:
ScePspFVector3 pos = { sin(valy* 0.79f * (GU_PI/180.0f))*(-0.25f+movez*0.1), 0, -2.5f + movez*0.1}; Вобщем, пока в раздумьях я. К тому же, я наконец-то воткнул в свой компьютер второй гигабайт оперативки и ,О ЧУДО!. Готика 3 стала просто летать - поэтому сейчас часть свободного времени трачу на эту игру. Когда она меня утомит, займусь 3д более плотно. |
|
...
ScePspFMatrix4 projection; ScePspFMatrix4 view; Проекция по желанию gumLoadIdentity(&projection); gumPerspective(&projection,75.0f,16.0f/9.0f,0.5f,1000.0f); Вот тут самое интересное: { ScePspFVector3 pos = {0,0,-5.0f}; gumLoadIdentity(&view); gumTranslate(&view,&pos); } Вот тут еще интереснее =) sceGuSetMatrix(GU_PROJECTION,&projection); sceGuSetMatrix(GU_VIEW,&view); Надеюсь ты понял о чем я? |
Вложений: 1
Повторю тут вопрос, который уже задавал, но на который никто не ответил.
Есть PSP Slim с 3.90 M33. Есть вот эта вот программа: Код:
#include <pspkernel.h> Настройки IDE вот такие (см. рисунок): |
Ёшкин кот! Оказывается, вся проблема была исключительно в линкере. Поменял порядок задания библиотек в ключах- сделал так:
Код:
-lpspgum Раньше у меня -lpspgum и -lpspgu шли последними. Интересный прикол... |
прикол знатный однако. не встречал подобного... по идее то без раницы должнобыть...
|
А никто не знает, что в GU представляют собой матрицы GU_VIEW и GU_MODEL? В OpenGL это одна матрица преобразований локальной системы координат и зовётся она GL_MODELVIEW. А как это тут её умудрились разбить на две? Хм...
|
Текущее время: 15:38. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод: zCarot
PSPx Forum - Сообщество фанатов игровых консолей.