【发布时间】:2018-06-16 08:00:42
【问题描述】:
我正在研究 opengl,并且我有一些带有一些对象的小 3d 场景。在 GLSL 顶点着色器中,我将矩阵上的顶点相乘,如下所示:
vertexPos= viewMatrix * worldMatrix * modelMatrix * gl_Vertex;
gl_Position = vertexPos;
vertexPos 是一个 vec4 可变变量,我将它传递给片段着色器。 以下是场景正常渲染的方式: normal render
但是我想进行调试渲染。我在片段着色器中写:
gl_FragColor = vec4(vertexPos.x, vertexPos.x, vertexPos.x, 1.0);
vertexPos 乘以所有矩阵,包括透视矩阵,我假设我会得到从屏幕中心到右边缘的平滑渐变,因为它们被映射为 -1 到 1 平方。但看起来它们在屏幕空间中,但没有应用透视变形。这是我看到的: (不要看红线和光源,它们使用不同的着色器)
如果我将它除以大约 15,它将看起来像这样:
gl_FragColor = vec4(vertexPos.x, vertexPos.x, vertexPos.x, 1.0)/15.0;
谁能解释一下,为什么坐标不均匀,场景仍然正确渲染,透视失真? 附言如果我尝试将 gl_Position 放在片段着色器而不是 vertexPos 中,它不起作用。
【问题讨论】:
标签: c++ qt opengl glsl qopenglfunctions