我刚刚说过在 android 中学习 Opengl ES 2.0,但我遇到了一个我不知道如何解决的问题。我想创建一个大平面场,我创建了它,添加了纹理,但我的问题来了它没有绘制所有它,它只在 Z 轴上显示大约 10 个单位。X 我很好。所以我想创建一个大正方形,但它显示一个矩形。这就像有人拿了一把剪刀,把它从某个 Z 坐标上剪下来。
我什至不知道我应该把代码的哪一部分放在这里,着色器?平面坐标?相机设置?
谢谢你的病人。
我刚刚说过在 android 中学习 Opengl ES 2.0,但我遇到了一个我不知道如何解决的问题。我想创建一个大平面场,我创建了它,添加了纹理,但我的问题来了它没有绘制所有它,它只在 Z 轴上显示大约 10 个单位。X 我很好。所以我想创建一个大正方形,但它显示一个矩形。这就像有人拿了一把剪刀,把它从某个 Z 坐标上剪下来。
我什至不知道我应该把代码的哪一部分放在这里,着色器?平面坐标?相机设置?
谢谢你的病人。
听起来您的飞机被截锥体或观看量限制了。这通常由 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;
}