c++ - Opengl 中的视差法线贴图问题,GLSL

标签 c++ opengl glsl

我遇到了一个关于视差法线贴图的严重问题,我不知道是什么问题。

(OpenGL 2.0、C++、WinXP)

我的结果:alt text

alt text

(绿色是法线,蓝色是切线,红色是双法线(双切线))

法线贴图工作正常,所以我假设切线 vector 很好。 奇怪的是,在立方体的某些墙壁上,视差映射是正确完成的,而在其他墙壁上则不是。 我确定我的 GLSL 代码没问题,因为我是从 http://www.dhpoware.com/demos/index.html 复制的 您可以在其中找到有效的视差法线贴图演示 - 它也适用于我的计算机。

我还尝试了 2 种方法来计算切线 vector ,所以这应该不是问题。 我尝试从 DisplayList 切换到 VBO,反之,它给出了相同的结果,因此切线可能已正确传输(我什至尝试将其作为 gl_Color 传输)。

高度贴图加载正确,我尝试将其设置为漫反射贴图,看起来没问题。

glGetError() 给我没有错误,着色器编译日志也是如此。

当然,我检查了九千多次纹理坐标。

迷之...我都不知道代码分析的是哪一部分,大家有什么建议吗?

最佳答案

疯狂猜测

我敢打赌要么是切线基( vector )问题,要么是 View vector 在错误的坐标空间中被转换/考虑。

没有更多的信息,我很难说更多...

问题的一些源代码或动画会有所帮助。

关于c++ - Opengl 中的视差法线贴图问题,GLSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4728555/

相关文章:

c++ - constexpr string_view 比较

python - 如何使用 PyOpenGL 渲染文本?

opengl - 如何在 OpenGL 中提供自定义插值技术来填充三角形

java - 不受支持的 GLSL 着色器

opengl - 如何处理 OpenGL 索引缓冲区数组中的多个纹理以与数据着色器一起使用?

java - 保存截图 cocos2d-x android

c++ - 如何用位运算代替取模和除法运算?

c++ - 不会覆盖提供的结构的本地时间替代方案

c++ - GLUT 中使用的全局类不好吗?如果是这样,如何避免这种情况?

c++ - 如何在OpenGL中将纹理设置为背景?