我正在使用OpenGL ES 2.0编写“for fun”我自己的Android图形引擎。
在管理具有多个对象网格的整个场景之后,我正在尝试实现Shadow Volumes。
逻辑是(简化的):首先,我从二进制文件创建一个对象(具有顶点,面,边和所有数据)。之后,我创建了一个顶点缓冲区并绘制元素。
到目前为止,我在模型矩阵(glRotate等)上使用了OpenGL函数的变换(缩放,平移,旋转)。
但是对于使用暗影卷,我必须每次变换一个物体或光线时,计算哪些面部位于光线和轮廓前面。所以我在顶点数组上使用了一个循环。
我的问题是:在哪里进行转换?我是否必须在每次更改时转换顶点数组并在顶点缓冲区中重新加载它?
据此,这是一件坏事:Android opengl modify vertex array after draw call
那么,最佳做法是什么?
抱歉我的英语很差,并提前感谢你;)
答案 0 :(得分:1)
我只是粗略地记得阴影卷,但如果我没记错,那么你首先要确定光线前的面部,这些面部的边界是横跨音量的轮廓,对吗?
所以你想为每个顶点法线n和光线矢量l:
做类似的事情前=(l点M * n)< 0.0? true:false
其中M是顶点变换矩阵的逆转置。
不是将每个法线与n相乘,而是不能为光矢量计算正确的变换...即矩阵Ml:
(M1 * l点n)=(l点M * n)
那将是我的想法。