我开始画我的四边形,但是当我开始玩顶点时,我注意到 X 坐标被翻转了。这是一张图片来说明我的意思:
这是我的顶点 - 索引和纹理坐标,我真的不必显示。
static final int COORDS_PER_VERTEX = 3;
static float positionCoords[] = {
-0.5f, 0.5f, 0.0f, // top left
-0.5f, -0.5f, 0.0f, // bottom left
0.5f, -0.5f, 0.0f, // bottom right
0.5f, 0.5f, 0.0f }; // top right
static final int COORDS_PER_TEXTURE = 2;
static float textureCoords[] = {
0.0f, 0.0f,
0.0f, 1.0f,
1.0f, 1.0f,
1.0f, 0.0f, };
private final short indices[] = { 0, 1, 2 };
这就是我更改投影和 View 矩阵的地方。
public void onSurfaceChanged(GL10 naGl, int width, int height)
{
Log.d(TAG, "GL Surface Changed - Setting Up View");
GLES20.glViewport(0, 0, width, height);
float ratio = (float) width / height;
Matrix.frustumM(ProjectionMatrix, 0, -ratio, ratio, -1, 1, 3, 7);
Matrix.setLookAtM(ViewMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
}
为什么它会被“向后”绘制。我还认为我的相机可能在物体后面,所以如果我在物体后面,那么在 3 维空间中留下的空间将是正的。
最佳答案
您确实是从背面看对象。
您的 lookAt 函数将眼睛置于 (0,0,-3),而 lookAt 点位于 (0, 0, 0)。默认情况下,负 z 轴指向屏幕,但您是从相反方向(朝向正 z 轴)看它。
您应该将眼睛放在 (0,0,3) 上,并朝 (0,0,0) 看,以获得您期望的 View 。
您可能会发现红皮书的 this chapter 内容丰富。
关于java - OpenGL ES 2.0 X 轴翻转了?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11818969/