我正在OpenGL ES 1.1中绘制带有4个顶点的纹理。
它可以绕z旋转:
glRotatef(20, 0, 0, 1);
但是,当我尝试像CALayer一样围绕x或y旋转时,纹理将完全消失。围绕x旋转的示例:
glRotatef(20, 1, 0, 0);
我还尝试了很小的值,并在动画循环中增加了它们。
// called in render loop
static double angle = 0;
angle += 0.005;
glRotatef(angle, 1, 0, 0);
在某些角度,我只能看到纹理的边缘。好像OpenGL ES会切掉任何深入的东西。
问题可能与投影模式有关吗?您将如何像使用CALayer transform属性那样实现纹理的透视变换?
最佳答案
该问题最有可能是glFrustumf
或glOrthof
之一。这2个调用中的最后一个参数将占用z-far,并且应该足够大以用于绘制图元。如果正方形的边长为1.0且中心为(.0,.0,.5),则z-far应该为(> 1.0),以查看正方形绕X或Y轴旋转90度。不过请注意,这些也可能取决于其他矩阵运算(翻译对象或使用诸如lookAt
之类的工具)。
将此参数设置得足够大可以解决您的问题。
要实现透视图转换,请使用glFrustumf
而不是glOrthof
。