小编3dm*_*els的帖子

如何在openGL中获得同类的屏幕空间坐标

我正在学习opengl,我得到了一些带有一些物体的小3D场景.在GLSL顶点着色器中,我在matixes上乘以顶点,如下所示:

vertexPos= viewMatrix * worldMatrix * modelMatrix * gl_Vertex;
gl_Position = vertexPos;
Run Code Online (Sandbox Code Playgroud)

vertexPos是一个vec4变量变量,我将它传递给片段着色器.以下是场景呈现正常的方式: 正常渲染

但后来我做了一个调试渲染.我在片段着色器中写道:

gl_FragColor = vec4(vertexPos.x, vertexPos.x, vertexPos.x, 1.0); 
Run Code Online (Sandbox Code Playgroud)

vertexPos乘以所有矩阵,包括透视矩阵,我假设我会得到一个从屏幕中心到右边缘的平滑渐变,因为它们被映射为-1到1平方.但看起来它们在屏幕空间中,但不应用透视变形.这是我看到的:(不要看红线和光源,他们使用不同的着色器)

调试渲染

如果我将它除去大约15,它将如下所示:

gl_FragColor = vec4(vertexPos.x, vertexPos.x, vertexPos.x, 1.0)/15.0;
Run Code Online (Sandbox Code Playgroud)

分为15

有人可以解释一下,为什么坐标不均匀,场景仍能正确渲染透视变形?PS如果我尝试将gl_Position放在片段着色器而不是vertexPos中,它就不起作用.

c++ opengl qt glsl qopenglfunctions

3
推荐指数
1
解决办法
209
查看次数

标签 统计

c++ ×1

glsl ×1

opengl ×1

qopenglfunctions ×1

qt ×1