我正在创建一个 HTML5 画布 3D 渲染器,我想说没有 SO 的帮助我已经走了很远,但我遇到了各种各样的阻碍。我正在尝试借助一些法线计算在立方体上实现背面剔除。此外,我已将其标记为 WebGL,因为这是一个足够普遍的问题,它既适用于我的用例,也适用于 3D 加速的用例。
无论如何,当我旋转立方体时,我发现隐藏了错误的面孔。例子:
我使用的一般程序是:
创建一个变换矩阵,用来变换立方体的顶点
对于每个面,以及每个面上的每个点,我将它们转换为 vec3,然后将它们乘以在步骤 1 中生成的矩阵。
然后我使用 Newell 的方法获得面部的表面法线,然后从该法线和一些组成的 vec3 中获得点积,例如 [-1, 1, 1],因为我想不出一个好的值放在这里。我见过一些人为此使用相机的位置,但是......
跳过使用相机矩阵的通常步骤,我从结果向量中提取 x 和 y 值以发送到我的线和面渲染器,但前提是它们的点积大于 0。我意识到我是相当随意的拉,真的。
我想知道两件事;如果我在步骤 3 中的程序是正确的(很可能不是),并且我在脸上绘制的点的顺序不正确(很可能)。如果后者是真的,我不太确定如何可视化问题。我见过人们说法线无关紧要,它是画线的方向,但是……我很难理解这一点,或者这是否是我问题的根源。
可能没关系,但我使用的矩阵库是gl-matrix:
https://github.com/toji/gl-matrix
此外,我正在使用的开源代码库中的特定文件在这里:
http://code.google.com/p/nanoblok/source/browse/nb11/app/render.js
提前致谢!