я использую OpenGL
нарисовать некоторое содержимое на экране.
Вот инициализация:
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, width, height, 0, 10, -10);
glMatrixMode(GL_MODELVIEW);
Затем я рисую объекты, используя это:
void draw(...)
{
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBegin(GL_QUADS); //Begining the cube's drawing
{
glTexCoord3f(tu1, tv1, 1); glVertex3f(offset, _y, _z);
glTexCoord3f(tu2, tv1, 1); glVertex3f(offset + w, _y, _z);
glTexCoord3f(tu2, tv2, 1); glVertex3f(offset + w, _y + h, _z);
glTexCoord3f(tu1, tv2, 1); glVertex3f(offset, _y + h, _z);
}
glEnd();
glDisable(GL_BLEND);
glDisable(GL_TEXTURE_2D);
}
Но глубина не соблюдается (проверено с большим количеством _z
ценности). Это зависит от порядка звонка, ближе будет последний разыгранный.
Если я сначала нарисую розовую полосу:
Если я нарисую розовую полосу после кремовой полосы:
Когда вы видите алгоритм художника (последний нарисованный объект появляется спереди), это означает проблему с вашим буфером глубины. В вашем случае вам нужно включить глубинное тестирование и запись и в вашей инициализации (по умолчанию выключен):
glEnable(GL_DEPTH_TEST);
Вы также захотите очистить буфер глубины в начале каждого кадра (очистка цветового буфера, как правило, также хорошая идея):
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
Посмотрите, что OpenGL вики может сказать о буферизация глубины.
Пожалуйста, имейте в виду следующие пункты, которые могут вам помочь:
1. OpenGL следует правилу правой руки.
2. Если вы используете push и pops для обработки матриц, то последняя, которую вы нажимаете, является первой, которая применяется во время рендеринга.