Форум: "Игры";
Текущий архив: 2006.12.31;
Скачать: [xml.tar.bz2];
ВнизZ-Order Найти похожие ветки
← →
KreeS © (2006-02-26 01:10) [0]Я чет совсем запутался...
Кто-нить в курсе какие параметры вида надо установить в OGL чтобы:
а) было абсолютное 2д без перспективы
б) при этом учитывалась глубина
т.е. чтоб я мог у каждого спрайта задать свой Z-Order и, подставляя его в качестве z-координаты при рисовании, контролировал что поверх чего рисуется
← →
XProger © (2006-02-26 01:37) [1]
glViewport(0, 0, Width, Height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
glOrtho2D(0, Width, Height, 0, -1, 10);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity;
glEnable(GL_DEPTH_TEST);
Глубина принимает значения -1..10
← →
grisme © (2006-02-26 05:44) [2]
> Кто-нить в курсе какие параметры вида надо установить в
> OGL
Вопрос некорректен.:) Не надо ничего указывать. просто рисуй все "по слоям", т.е. если спрайт выводится в "вверхнем слое", всем полигомам в этом слое присваиваешь координату z=0, если дальше- соответственно z>0 :)
← →
KreeS © (2006-02-26 10:20) [3]
> glOrtho2D(0, Width, Height, 0, -1, 10);
наверно имеется ввиду glOrtho?
1. Поэкспериментировал с этим, выяснил, что при таком раскладе 1 - будет ближе всех к камере, а -10 дальше. Почему не наоборот?
2. Столкнулся с проблемой, когда текстуры с альфа маской перекрывали друг друга прозрачными областями, а некоторые иногда съезжали куда-то в сторону и вообще не мог понять что происходит. Поставил glDepthFunc(GL_ALWAYS); стало нормально. Что вообще значит GL_ALWAYS? :)
← →
KreeS © (2006-02-26 11:13) [4]C glDepthFunc(GL_ALWAYS) ИМХО глубина вообще учитываться перестала, поставил glDepthFunc(GL_LEQUAL) стало почти то что надо, но беда 2 иногда случается почему-то.
← →
KreeS © (2006-02-26 11:37) [5]вот скриншот бага:
http://www.krees85.narod.ru/temp/shot_01.jpg
тень от нижнего дерева перекрывается прозрачной облатью тени верхнего дерева
← →
ancara © (2006-02-26 11:38) [6]
> 1. Поэкспериментировал с этим, выяснил, что при таком раскладе
> 1 - будет ближе всех к камере, а -10 дальше. Почему не наоборот?
Ну так все правильно, ибо по-умолчанию, т.е. послеglMatrixMode(GL_MODELVIEW);
glLoadIdentity;
камера смотрит в отрицательном направлении оси Z.
> беда 2 иногда случается
яне совсем понял в чем беда? Дальние полупрозрачные полигоны перекрывают ближние чтоли? Значит надо по глубине сортировать, дальние рисовать первыми, затем ближние...
А glDepthFunc(GL_ALWAYS) значит что тест глубины будет всегда завершаться положительно, даже если между рисуемым объектом и камерой есть другие, уже отрендеренные полигоны. GL_LEQUAL - соответственно означает, что тест пройдут те точки, у которых Z меньше, либо равно того, что записано в depth-buffer"е.
← →
KreeS © (2006-02-26 13:13) [7]
> Дальние полупрозрачные полигоны перекрывают ближние чтоли?
Именно это я и хотел сказать. Но нельзя ли решить эту проблему без сортировки, чтобы это выглядело примерно так:
for i := 0 to N do
объект[i].нарисовать(x, y, z);
и чтобы он понимал, что может стоять за уже нарисованным объектом.
А то ведь я это и делаю только ради того чтобы не сортировать, а если сортировать, то и z-координата уже никакая не нужна.
← →
KreeS © (2006-02-26 14:12) [8]Ладно, упарился, поже что нельзя. Отсортирую... пошло оно nax }8(
← →
XProger © (2006-02-26 17:08) [9]Если тебе нужна не прозрачность а "дырки" в текстуре
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, 0.5);
В противном случае - сортируй, но при этом отпадает необходимость в использовании Z-Buffer"а
← →
KreeS © (2006-02-26 21:05) [10]XProger
О да, свершилось!
Это оно. Спасибо!
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2006.12.31;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.039 c