我如何使用 GLSL 生成一个纹理,其中包含帧中每个片段的所有眼空间法线,采用 RGB 数据(法线映射)?
我需要以某种方式渲染纹理,就像场景的屏幕截图一样,除了存储法线而不是每个片段后面的点的颜色数据。它会生成一个看起来有点像法线贴图的纹理(例如这个) 。我做了很多研究(收效甚微),但我的直觉告诉我,最简单的方法是使用 GLSL 着色器。
那么有没有可能的方法来实现这个,GLSL 还是其他方式?
I need to somehow render a texture, like a screenshot of the scene, except instead of the colour data of the point behind each fragment, the normal is stored. It would generate a texture that looks somewhat like a normal map (such as this). I've done quite a bit of research (to little avail) but my instincts tell me that the easiest method for this would be a GLSL shader.
So would there be any possible way to implement this, GLSL or otherwise?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
将法线向量渲染到单独的渲染目标是延迟光照的常用技术。您可以在此处找到一个很好的介绍(它使用 DirectX 和 HLSL,但概念是非常清晰,可以轻松移植到 OpenGL/GLSL)。
Rendering the normal vectors to a separate render target is common technique for deferred lighting. You can found a good introduction here (it's using DirectX and HLSL, but the concepts are quite clear and can be easily ported to OpenGL/GLSL).
写出法线信息的实际 GLSL 着色器非常简单(比处理光照信息简单得多)
我使用 KickJS Shader Editor 在 GLSL 中创建了一个“法线着色器”:
http://www.kickjs.org/example/shader_editor/shader_editor.html#ahFzfmtpY2tzdGFydGVuZ2luZXJjCxIWb3JnLmtpY2t qcy5zaGFyZWQuVXNlciIbbW9ydGVuQG5vYmVsLWpvZXJnZW5zZW4uY29tDAsSGG9yZy5raWNranMuc2hhcmVkLlNoYWRlciIORGVmYXVsdCBzaGFkZXIM
移植到您想要使用的任何版本的 GLSL 应该很简单。
The actual GLSL shader that write out normal information is very simple (much simpler than dealing with light information)
I have created a 'normal shader' in GLSL using KickJS Shader Editor:
http://www.kickjs.org/example/shader_editor/shader_editor.html#ahFzfmtpY2tzdGFydGVuZ2luZXJjCxIWb3JnLmtpY2tqcy5zaGFyZWQuVXNlciIbbW9ydGVuQG5vYmVsLWpvZXJnZW5zZW4uY29tDAsSGG9yZy5raWNranMuc2hhcmVkLlNoYWRlciIORGVmYXVsdCBzaGFkZXIM
It should be simple to port to whatever version of GLSL you want to use.