Opengl 计算立方体上的法线:顶点还是着色器?
我有一个关于OpenGL中法线的理论问题。我在任何地方都找不到一个清楚的解释(我在这方面的知识不到位) 我想在立方体上放置纹理,每个面一个,最明显的方法是使用法线 但在顶点中包含法线会导致不共享这些顶点:Opengl 计算立方体上的法线:顶点还是着色器?,opengl,shader,ogre,Opengl,Shader,Ogre,我有一个关于OpenGL中法线的理论问题。我在任何地方都找不到一个清楚的解释(我在这方面的知识不到位) 我想在立方体上放置纹理,每个面一个,最明显的方法是使用法线 但在顶点中包含法线会导致不共享这些顶点: 在具有共享顶点的立方体上,我们将有8个顶点 在具有非共享顶点的立方体上,我们将有8*3=32个顶点 我在某个地方读过,着色器可以用来确定法线和应用纹理,但我对着色器一无所知,我想知道做这项工作的最佳方法是什么(在立方体的面上应用纹理) 除此之外,我希望这些顶点不共享应用于它们的纹理坐标(例
- 在具有共享顶点的立方体上,我们将有8个顶点
- 在具有非共享顶点的立方体上,我们将有8*3=32个顶点
总之,将非共享纹理和非共享UV坐标应用于vertice的最佳方法是什么:使用非共享顶点(更多的顶点),还是使用着色器(我想GPU需要更多的工作) 我认为这取决于您的用例。考虑以下事项:
- 必须渲染多少个顶点?如果只有少数,节省网格存储空间不是很重要
- 顶点从CPU传输到GPU的频率是多少?如果每帧都需要,保存顶点可能会加快渲染时间
- 你们大多数人的边缘都不光滑吗?如果大多数边看起来都是平滑的,则只能在少数需要的情况下断开网格
对于我所有的爱好项目,我都使用非共享顶点,因为它通常更容易处理。只有在程序中显示为瓶颈时,我才会关心性能。最常用的方法是使用不同属性重复顶点,但也可以在geom着色器中计算法线(增加gpu的工作量)并使用绘制的每个面的原始索引来分配正确的纹理。如果只有单独的纹理组合作为输入,则可以在fbo中构建包裹纹理组合。关于顶点的数量,这已经是一个很好的数量(300000~),并且将此数乘以3对我来说似乎是个坏主意。关于顶点转移的频率,我真的不知道,因为我正在使用Ogre3D,但我将尝试收集有关此主题的一些信息:)非常感谢您的回复。