0

我正在使用 OpenGL ES 2.0 编写我自己的 Android 图形引擎“为了好玩”。

在管理具有多个对象网格的整个场景之后,我正在尝试实现阴影体积。

逻辑是(简化的):首先,我从二进制文件创建一个对象(带有顶点、面、边和所有数据)。之后,我创建一个顶点缓冲区并绘制元素。

到目前为止,我在模型矩阵(glRotate 等)上使用了带有 OpenGL 函数的变换(缩放、平移、旋转)。

但是为了使用Shadow Volume,我必须在每次变换物体或灯光时计算出哪些面在灯光和轮廓前面。所以我在我的顶点数组上使用了一个循环。

我的问题是:在哪里进行转换?我是否必须在每次更改时转换顶点数组并将其重新加载到顶点缓冲区中?

据此,这是一件坏事:Android opengl modify vertex array after draw call

那么,最佳实践是什么?

对不起我的英语不好,提前谢谢你;)

4

1 回答 1

1

阴影体积我只记得粗略,但如果我没记错那么你首先确定光前的脸,这些脸的边界是跨越体积的轮廓,对吧?

所以你想对每个顶点法线 n 和光向量 l 做这样的事情:

前面 = (l 点 M * n) < 0.0 ? 真假

其中 M 是顶点变换矩阵的逆转置。

不是将每个法线与 n 相乘,您不能为光矢量计算适当的变换……即矩阵 Ml:

(Ml * l 点 n) = (l 点 M * n)

那将是我的想法。

于 2012-07-10T07:11:12.297 回答