opengl - 在OpenGL中使用三角形法线来获取顶点法线

标签 opengl opengl-es

我有一个顶点列表及其在三角形中的排列以及每个三角形的归一化法向量。

理想情况下,我希望尽可能少地工作,以某种方式将(三角形,法线)对转换为(顶点,顶点法线)对,以便我可以将其粘贴到我的 VAO 中。 OpenGL有没有办法直接处理面法线?或者我是否必须跟踪给定顶点所涉及的每个面(当我计算索引缓冲区时或多或少已经发生了这种情况),然后手动计算顶点处的平均法线?

此外,有没有办法完全跳过每个顶点法线计算,而直接向片段着色器通知面法线?

编辑:我使用的东西应该可以移植到 ES 设备,因此固定功能的东西无法使用

最佳答案

我不一定能谈论最新的完整 OpenGL 规范,但在 ES 中你肯定必须自己完成这项工作。

虽然法线在旧的固定管道下是模态的,就像其他所有东西一样,但它附加到每个顶点。如果您选择平面着色模型,则 GL 将使用整个面上第一个顶点处的颜色,而不是对其进行插值。无法在 ES 下重现该行为。

属性是按顶点计算的,制服最多是按批处理计算的。在 ES 中,无法指定每个三角形的属性,并且渲染管道中没有任何阶段可以让您在将几何图形单独分配到每个顶点时获得几何图形的概览。每个顶点单独处理,变化是插值,然后每个片段单独处理。

关于opengl - 在OpenGL中使用三角形法线来获取顶点法线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18498145/

相关文章:

python - 在 Kivy 中创建自定义图像类,将 mag_filter 设置为 "nearest"

c - 如何从全屏 OpenGL 窗口获取关键事件?

c++ - 初学者的 opengl 多纹理

android - Android 4.3 纵向模式下的全屏相机预览

iphone - 如何在 Core Graphics 中生成 RGBA 图像?

android - 如何在 NDK 项目中的 GL 之上绘制 android UI 元素

c++ - 了解 glm::lookAt()

opengl - 英特尔是否有单独的 GPU 指令集

iphone - iOS:关于在屏幕上渲染纹理的纹理坐标的困惑

ios - iPad 3 上的 CPU 绑定(bind)渲染