【发布时间】:2020-02-02 01:42:00
【问题描述】:
我正在尝试使用平面着色在 LWJGL OpenGL 中渲染 3D 棱镜。例如,我有一个索引如下的多维数据集:
我在顶点缓冲区中只有 8 个顶点,我已经按照上面的方法对其进行了索引。有没有办法在立方体上实现平面法线着色,如下所示?如果可能的话,我不想重写我的顶点和索引缓冲区以包含重复的顶点。
【问题讨论】:
-
当您说“平面阴影”时,究竟是什么意思?你的意思是你想计算一个在三角形表面上恒定的面法线,还是你真的想在 VS 中计算光照?或者是其他东西。 “如果可能的话,我不想重写我的顶点和索引缓冲区以包含重复的顶点。” 为什么不呢?它会让事情变得容易得多。
-
我已经为广义的第 n 维 3D 棱镜实现了顶点和索引,所以我不想回去重写所有这些。当我说平面着色时,我只是指创建类似上图所示的立方体。我已经可以计算出每个三角形的面法线,但我不知道如何在法线数组中格式化它们。
-
所以您知道如何编写漫反射着色器,您的问题是,当您没有 IBO 时,如何将数据发送到 GPU 以使法线对应于直角三角形?
-
@Rabbid76 我担心你在这种情况下有点错误,因为对于 n 维对象,数学并没有在着色器中原生实现,如果发生任何类型的 3D 投影,你就不能再计算法线来自投影面而不会丢失信息......如果整个 ND 网格传递给着色器,它可能是可能的,但它很可能不会以 GLSL 原生方式传递,因此几何着色器也将无用。跨度>
-
@Sibh 看看这些:4D rendering techniques 和 simple ND rendering engine 以获得一些想法。然而,正如我在前面的评论中提到的,如果你想要正确的平面着色,你需要计算和传递 ND 法线而不是 3D 法线,并将照明点积调整为 ND !!!这些示例仅使用简单的 3D 法线,因此它们缺少 3D 以上的尺寸...这与您将 3D 对象投影到平面上并用单一颜色对其进行整体着色一样,因此您不会看到边缘...
标签: opengl glsl shader lwjgl n-dimensional