将透视投影矩阵添加到我的顶点着色器时,纹理四边形不可见。
shader.vert
#version 400
in vec3 position;
in vec2 textureCoordinate;
out vec3 colour;
out vec2 passTextureCoordinate;
uniform mat4 transformationMatrix;
uniform mat4 projectionMatrix;
void main() {
gl_Position = projectionMatrix * transformationMatrix * vec4(position, 1.0);
passTextureCoordinate = textureCoordinate;
colour = vec3(position.x+.5f, 0.0, position.y+.5f);
}
当我设置投影矩阵来识别其渲染效果时。另外,当我将其设置为正交投影时,它也会呈现。
创建透视投影矩阵:
private static final float FOV = 70f;
private static final float NEAR_PLANE = 1.0f;
private static final float FAR_PLANE = 1000.0f;
private void createProjectionMatrix(){
IntBuffer w = BufferUtils.createIntBuffer(4);
IntBuffer h = BufferUtils.createIntBuffer(4);
GLFW.glfwGetWindowSize(WindowManager.getWindow(), w, h);
float width = w.get(0);
float height = h.get(0);
float aspectRatio = width / height;
float yScale = (float) ((1f / Math.tan(Math.toRadians(FOV / 2f))) * aspectRatio);
float xScale = y_scale / aspectRatio;
float frustumLength = FAR_PLANE - NEAR_PLANE;
projectionMatrix = new Matrix4f();
projectionMatrix.m00 = xScale;
projectionMatrix.m11 = yScale;
projectionMatrix.m22 = -((FAR_PLANE + NEAR_PLANE) / frustumLength);
projectionMatrix.m23 = -1;
projectionMatrix.m32 = -((2 * NEAR_PLANE * FAR_PLANE) / frustumLength);
projectionMatrix.m33 = 0;
}
结果矩阵:
0.8925925 0.0 0.0 0.0
0.0 1.428148 0.0 0.0
0.0 0.0 -1.002002 -2.002002
0.0 0.0 -1.0 0.0
这是正交投影矩阵的代码。
正交投影矩阵:
private void createOrthographicMatrix() {
projectionMatrix = Matrix4f.orthographic(-10f, 10f, -10f * 9f / 16f, 10f * 9f / 16f, -1f, 1f);
}
结果矩阵:
0.1 0.0 0.0 0.0
0.0 0.177778 0.0 0.0
0.0 0.0 -1.0 0.0
0.0 0.0 0.0 1.0
我怀疑我在设置中遗漏了一些东西。但一直没能弄清楚。
最佳答案
您尚未指定要绘制的三角形的确切位置。但是,如果三角形确实与您正在使用的正交矩阵一起出现,则该三角形很可能不会与您的透视矩阵一起出现。
在正交情况下,您将近平面设置为 z_eye=1
,将远平面设置为 z_eye=-1
,因此 z_eye 之外的所有内容
范围 [-1,1] 将永远不可见。在透视设置中,将近平面设置为 z_eye=-1
,将远平面设置为 z_eye=-1000
。 (请注意,观看方向是眼睛空间中的 -z
,并且您为近平面和远平面指定的值是到该观看方向的距离,因此实际的 z
值被否定。这也意味着在正交情况下,您实际上将近平面设置在“相机”后面)。
这意味着基元仅在落入 z
中的 [-1000,-1]
范围内时才可见。
因此,如果基元正好放置在相机前面一个单位 (z_eye=-1
),则它对于两个 矩阵都可见,并且只有在没有任何数值不稳定。
关于java - 在LWJGL 3中渲染透视投影矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36995739/