Opengl es 按照Nvidia GPU Gems第1章设置GLSL海水着色器

Opengl es 按照Nvidia GPU Gems第1章设置GLSL海水着色器,opengl-es,glsl,shader,normals,bump-mapping,Opengl Es,Glsl,Shader,Normals,Bump Mapping,我正在关注有关使用着色器进行水模拟的内容。我正试图按照这一章使用OpenGLES2.0(iOS)中的glsl创建海水着色器 我能够创建几何波,如本章所述,但当涉及到创建纹理法线贴图时,我遇到了麻烦。本章对纹理渲染目标的实际渲染内容有点不清楚。我应该渲染法线贴图还是高度贴图?在文本中,它建议将法线作为rgb颜色渲染到目标,但第1.3节“编写”下的图像(b)和(d)似乎再次表明应将灰度高度贴图渲染到纹理目标。本章还讨论了使用查找纹理作为纹理的u坐标,但我不清楚这如何与纹理渲染相适应。有两种不同的纹理

我正在关注有关使用着色器进行水模拟的内容。我正试图按照这一章使用OpenGLES2.0(iOS)中的glsl创建海水着色器


我能够创建几何波,如本章所述,但当涉及到创建纹理法线贴图时,我遇到了麻烦。本章对纹理渲染目标的实际渲染内容有点不清楚。我应该渲染法线贴图还是高度贴图?在文本中,它建议将法线作为rgb颜色渲染到目标,但第1.3节“编写”下的图像(b)和(d)似乎再次表明应将灰度高度贴图渲染到纹理目标。本章还讨论了使用查找纹理作为纹理的u坐标,但我不清楚这如何与纹理渲染相适应。有两种不同的纹理要渲染吗?如果有人能帮助澄清这些组件是如何装配在一起的,我将非常感谢

为什么要渲染到纹理?您可以轻松地在几何体着色器中动态计算这些值。因为它们会改变每一帧,所以每次都需要重复这些计算,所以我看不出渲染到纹理会得到什么


不过,您确实需要计算两个值:高度位移(使用公式3)和每个顶点的法线(使用公式6b)。

教程建议,要在模拟中获得更高分辨率的波,可以将法线值渲染到纹理目标。“我们还将该技术扩展到像素着色器领域,使用周期波函数之和创建动态平铺凹凸贴图,以捕捉水面的更精细细节。”-1.1目标和范围。我有几何波和法线工作(在顶点着色器中“动态”创建),这是我在创建法线贴图时遇到的问题。纸张创建法线贴图的原因是因为它太旧了。您可以只计算逐顶点法线并将其传递给片段着色器。这就是我在实现此功能时所做的,它工作正常:)