我正在 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 变换属性那样实现纹理的透视变换?
最佳答案
问题很可能出在 glFrustumf
或 glOrthof
之一。这两个调用中的最后一个参数将采用 z-far,并且它应该足够大以便绘制图元。如果正方形的边长为 1.0,中心位于 (.0, .0, .5),则 z 远应为 (> 1.0),才能看到正方形绕 X 或 Y 轴旋转 90 度。但请注意,这些也可能依赖于其他矩阵运算(翻译对象或使用诸如 lookAt
之类的工具)。
使这个参数足够大应该可以解决您的问题。
要实现透视变换,请使用 glFrustumf
而不是 glOrthof
。
关于ios - 如何在 OpenGL ES 1.1 中绕 x 和 y 旋转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20502169/