【问题标题】:How to rotate around x and y in OpenGL ES 1.1?如何在 OpenGL ES 1.1 中围绕 x 和 y 旋转?
【发布时间】:2013-12-10 18:14:42
【问题描述】:

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

【问题讨论】:

    标签: ios opengl-es opengl-es-1.1


    【解决方案1】:

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

    要实现透视变换,请使用glFrustumf 而不是glOrthof

    【讨论】:

    • z 远有效。增加 z-far 是否会带来性能损失?
    • 不,它带有深度缓冲区精度损失。如果您正在使用它,请尝试使剪裁 Z 尽可能紧。如果您使用 24 位深度缓冲区,则 Z 坐标将缩放为 zFar = 1
    猜你喜欢
    • 1970-01-01
    • 2012-05-09
    • 2013-05-12
    • 2017-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多