0

我刚刚说过在 android 中学习 Opengl ES 2.0,但我遇到了一个我不知道如何解决的问题。我想创建一个大平面场,我创建了它,添加了纹理,但我的问题来了它没有绘制所有它,它只在 Z 轴上显示大约 10 个单位。X 我很好。所以我想创建一个大正方形,但它显示一个矩形。这就像有人拿了一把剪刀,把它从某个 Z 坐标上剪下来。

我什至不知道我应该把代码的哪一部分放在这里,着色器?平面坐标?相机设置?

谢谢你的病人。

4

1 回答 1

1

听起来您的飞机被截锥体或观看量限制了。这通常由 glOrtho() 或 glPerspective() 设置。尝试增加这些函数的近平面参数和远平面参数之间的距离。

如果您依赖于 Android 提供的默认平截头体,您可能必须构建自己的平截头体,对于 glOrtho(),它看起来像这样:

typedef struct
{
    float f0;
    float f1;
    float f2;
    float f3;
    float f4;
    float f5;
    float f6;
    float f7;
    float f8;
    float f9;
    float f10;
    float f11;
    float f12;
    float f13;
    float f14;
    float f15;
} Mat4;

void Ortho(Mat4 * pMat4, float left, float top, float right, float bottom, float nearPlane, float farPlane)
{
    float rcplmr = 1.0f / (left - right);
    float rcpbmt = 1.0f / (bottom - top);
    float rcpnmf = 1.0f / (nearPlane - farPlane);

    pMat4->f0 = -2.0f * rcplmr;
    pMat4->f1 = 0.0f;
    pMat4->f2 = 0.0f;
    pMat4->f3 = 0.0f;
    pMat4->f4 = 0.0f;
    pMat4->f5 = -2.0f * rcpbmt;
    pMat4->f6 = 0.0f;
    pMat4->f7 = 0.0f;
    pMat4->f8 = 0.0f;
    pMat4->f9 = 0.0f;
    pMat4->f10 = -2.0f * rcpnmf;
    pMat4->f11 = 0.0f;
    pMat4->f12 = (right + left) * rcplmr;
    pMat4->f13 = (top + bottom) * rcpbmt;
    pMat4->f14 = (nearPlane + farPlane) * rcpnmf;
    pMat4->f15 = 1.0f;
}
于 2013-07-24T15:27:25.553 回答