2

我正在 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 变换属性一样实现纹理的透视变换?

4

1 回答 1

2

问题很可能出现在glFrustumf或之一中glOrthof。这 2 个调用中的最后一个参数将采用 z-far 并且它应该足够大以绘制图元。如果正方形的边长为 1.0 且中心位于 (.0, .0, .5) 中,则 z-far 应为 (> 1.0) 以查看围绕 X 或 Y 轴旋转 90 度的正方形。尽管请注意,这些也可能取决于其他矩阵运算(翻译对象或使用类似的工具lookAt)。使这个参数足够大应该可以解决您的问题。

要实现透视变换,请glFrustumf使用glOrthof.

于 2013-12-11T07:14:54.103 回答