Я использую значения по умолчанию OpenGL, такие как glDepthRangef (0.0,1.0) ;, gldepthfunc (GL_LESS); и glClearDepthf (1.f); потому что мои проекционные матрицы меняют правую координату на левую координату. Я имею в виду, что моя ближняя плоскость и дальномерные z-значения должны быть [-1, 1] в НДЦ.Буфер глубины с двумя разными проекционными матрицами
Проблема заключается в том, когда я рисую два объекта на одной FBO в том числе же БВУ, например, как этот код ниже,
glEnable(GL_DEPTH_TEST);
glClearDepthf(1.f);
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
drawObj1(); // this uses 1) the orthogonal projection below
drawObj2(); // this uses 2) the perspective projection below
glDisable(GL_DEPTH_TEST);
всегда, object1 выше Object2.
Однако, когда они используют ту же проекцию бы это ни было, оно работает отлично.
В какой части, по-вашему, мне следует пройти?
--Updated--
Coverting глаз координат в НДЦ экран координат, что на самом деле происходит?
Мое понимание состоит в том, что после обоих выступов его форма НДЦ такая же, как изображения ниже, его значение z после умножения 2) перспективная матрица не нуждается в искажении. Однако, согласно хорошему ответу дербаса, если z-значение в координате вида умножается на перспективную матрицу, значение z будет гиперболически искажено в НДЦ.
Если это так, если одна точка вершины, например, [-240.0, 0.0, -100.0] в координате глаза (зрения) с [w: 480.0, h: 320.0], и я обрезал ее с помощью [ 0,01, -100], было бы [-1,0, -1] или [something> = - 1,0, -1] в NDC? И его значение z остается таким же, как -1, не так ли? когда его z-значение искажено?
спасибо. Я думаю, ты прав, но меня все еще путают. Не могли бы вы ответить на мой вопрос, который я только что обновил? – Sung
@SungWoo: Я обновил свой ответ. – derhass
Спасибо за ваше время. – Sung