首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GLSL忽略深度测试

GLSL忽略深度测试
EN

Stack Overflow用户
提问于 2014-07-30 23:37:40
回答 1查看 957关注 0票数 0

我正在用C++/OpenGL编写一个小图形引擎,并设法加载一个模型并将其渲染到屏幕上。但是,网格的某些部分似乎是反转的,就像法线朝向错误的方向一样:

我为截图使用的着色器看起来像这样(只有片段着色器,顶点着色器应该是可以的):

代码语言:javascript
复制
uniform float t;
uniform sampler2D tex;

varying vec2 v_texCoords;
varying vec3 v_normal;

void main()
{
   float zbuffer = gl_FragCoord.w * 10;
   gl_FragColor = vec4(zbuffer, zbuffer, zbuffer, 1.0);
}

所以,基本上,我将物体渲染到相机的距离,以直观地显示出问题所在。我使用了不同的模型,不同文件格式的程序网格和预先生成的网格,结果总是这样。

不知道这是否重要,但我使用的VAO有一个顶点缓冲区和3个属性(位置,法线,uv)。

我已经启用了GL_DEPTH_TEST,我的初始化例程如下所示:

代码语言:javascript
复制
/* Enable smooth shading */
glShadeModel( GL_SMOOTH);

/* Set the background black */
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

/* Depth buffer setup */
glClearDepth(1.0f);

/* Enables Depth Testing */
glEnable(GL_CULL_FACE);
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);

/* The Type Of Depth Test To Do */
glDepthFunc( GL_LEQUAL );

/* Really Nice Perspective Calculations */
glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

我是不是做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2014-07-31 02:45:27

通过更改来尝试一下

代码语言:javascript
复制
float zbuffer = gl_FragCoord.w * 10;

代码语言:javascript
复制
float zbuffer = (gl_FragCoord.z + 1)*0.5;

Z深度值是在NDC空间中gl_FragCoord的Z分量中指定的,它在-1,1中。然后我们需要将其重新映射到0,1间隔。这就是为什么我们这里需要+1和*0.5。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25041034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档