【发布时间】:2014-06-07 09:31:13
【问题描述】:
我目前正在实现反射(使用渲染到纹理方法),到目前为止它可以工作,唯一的问题是反射版本中的所有对象都是由内向外渲染的。
我想避免更改内部 OpenGL 顶点缠绕顺序,以确保不会过多干扰其他渲染操作。
相反,我想转换我的反射矩阵来进行反转。 (这应该只是另一种反映?)
这是我的反射矩阵(转换相机的视图矩阵):
glm::mat4 matReflection(
1.f -2.f *n.x *n.x,-2.f *n.x *n.y,-2.f *n.x *n.z,-2.f *n.x *d,
-2.f *n.x *n.y,1.f -2.f *n.y *n.y,-2.f *n.y *n.z,-2.f *n.y *d,
-2.f *n.x *n.z,-2.f *n.y *n.z,1.f -2.f *n.z *n.z,-2.f *n.z *d,
0.f,0.f,0.f,1.f
);
n = 反射平面的法线; d = 平面距离
甚至可以通过矩阵变换来反转顶点顺序吗?如果有,具体是怎样的?
【问题讨论】:
-
您是否对三角形的反转缠绕顺序有问题,例如因为您启用了背面剔除,或者在着色器中使用了
gl_FrontFacing?如果不更改缠绕顺序的状态,这将很难解决。还是与法线的方向有关?这可以通过对法线应用适当的转换来解决。