【发布时间】:2012-07-28 23:47:55
【问题描述】:
我正在创建一个 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
提前致谢!
【问题讨论】:
标签: html5-canvas webgl linear-algebra culling 3d-rendering