Я показываю куб в opengl. Вот мой файл для вершинного шейдераПерспективный проектор, не работающий в OpenGL
#version 330
layout(location = 0) in vec4 position;
layout(location = 1) in vec4 color;
smooth out vec4 theColor;
uniform vec3 offset;
uniform mat4 perspectiveMatrix;
void main()
{
vec4 cameraPos = position + vec4(offset.x, offset.y, offset.z, 0.0);
//gl_Position = perspectiveMatrix * cameraPos;
gl_Position.xy = cameraPos.xy;
gl_Position.z = cameraPos.z*2.0f + 3.0f;
gl_Position.w = -cameraPos.z;
float tmp = gl_Position.z/gl_Position.w;
theColor = color;
}
В результате weird.It кажется, что кроме передней грани пять граней показали, что все должно быть disappeared.The назад лицо теперь в передняя часть передней face.Here это два треугольника для передней грани:
0.25f, 0.25f, -1.0f, 1.0f,
0.25f, -0.25f, -1.0f, 1.0f,
-0.25f, 0.25f, -1.0f, 1.0f,
0.25f, -0.25f, -1.0f, 1.0f,
-0.25f, -0.25f, -1.0f, 1.0f,
-0.25f, 0.25f, -1.0f, 1.0f,
данные для задней поверхности:
0.25f, 0.25f, -3.0f, 1.0f,
-0.25f, 0.25f, -3.0f, 1.0f,
0.25f, -0.25f, -3.0f, 1.0f,
0.25f, -0.25f, -3.0f, 1.0f,
-0.25f, 0.25f, -3.0f, 1.0f,
-0.25f, -0.25f, -3.0f, 1.0f,
Я выбираю -1.0f и 3.0f для ближней и дальней плоскости соответственно, поэтому (n + f)/(f - n) = 2.0f и (2 * n * f)/(f - n) = 3.0f. Почему результат такой странный?
1) И что вы выбрали для остальных параметров? Вблизи и далеко не единственные параметры, которые имеет перспектива. 2) Если вы видите задние лица спереди: включили ли вы проверку глубины? – BDL
[link] (https://github.com/oyjw/gl-learning/blob/master/gl/%E6%BA%90.cpp) Вот проект. И я думаю, что у меня есть только параметры ближнего и дальнего действия . Я просто оставляю координаты x и y так, чтобы они делились на w в диапазоне [-1,1]. После некоторых вычислений я обнаружил, что 0.25f, 0.25f, -1.0f, 1.0f -> 0.25 0.25 1 1 и 0.25f, 0.25f, -3.0f, 1.0f, -> 0.083 0.083 -1 1 – user1265566
Я не разрешаю проверку глубины. – user1265566