Java openglandroid中的旋转三角形

Java openglandroid中的旋转三角形,java,android,opengl-es,Java,Android,Opengl Es,我根据developer.android.com上的入门示例开发了一个简单的应用程序。它工作正常,但我改变了旋转逻辑,现在它没有显示三角形。我不确定我是否理解矩阵的东西,所以我想如果有人可以检查我的代码。 这是SurfaceView方法,我认为可能有问题: @Override public boolean onTouchEvent(MotionEvent e){ float x = e.getX(); float y = e.getY(); switch(e.getAc

我根据developer.android.com上的入门示例开发了一个简单的应用程序。它工作正常,但我改变了旋转逻辑,现在它没有显示三角形。我不确定我是否理解矩阵的东西,所以我想如果有人可以检查我的代码。 这是SurfaceView方法,我认为可能有问题:

@Override
public boolean onTouchEvent(MotionEvent e){
    float x = e.getX();
    float y = e.getY();

    switch(e.getAction()){
    case MotionEvent.ACTION_MOVE:
        float rotateX = 0.0f;
        float rotateY = 0.0f;
        float rotateZ = 0.0f;

        //na coluna da esquerda, rotação no eixo Z
        if(x < getWidth() / 3){
            rotateZ = (y - previousY);
        }
        //na coluna do meio, rotação no eixo X
        if(getWidth()/3 < x && x < 2*getWidth()/3){
            rotateX = (y - previousY);
        }
        //na coluna da direita, rotação no eixo Z invertido
        if(x > getWidth() / 3){
            rotateZ = - (y - previousY);
        }

        //na linha superior, rotação no eixo Z
        if(y < getHeight() / 3){
            rotateZ = (x - previousX);
        }
        //na linha do meio, rotação no eixo Y
        if(getHeight()/3 < y && y < 2*getHeight()/3){
            rotateY = (x - previousY);
        }
        //na linha inferior, rotação no eixo Z invertido
        if(y > 2*getHeight() / 3){
            rotateZ = - (x - previousX);
        }

        mRenderer.setAngulo(mRenderer.getAnguloX() + (rotateX) * TOUCH_SCALE_FACTOR,
                            mRenderer.getAnguloY() + (rotateY) * TOUCH_SCALE_FACTOR,
                            mRenderer.getAnguloZ() + (rotateZ) * TOUCH_SCALE_FACTOR);
        requestRender();

    }
    previousX = x;
    previousY = y;
    return true;
}

Triangula类必须是正确的,因为自从上次应用程序运行以来,我没有更改它。

好吧,我彻底分析了你的代码,似乎没有任何问题

但是,我想问题在于:

当你打电话的时候

Matrix.setLookAtM(mViewMatrix, 0, 0, 0, -5f, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
Matrix.setRotateM(zRotationMatrix, 0, anguloZ, 0, 0, 1);
Matrix.setRotateM(xRotationMatrix, 0, anguloX, 1, 0, 0);
Matrix.setRotateM(yRotationMatrix, 0, anguloY, 0, 1, 0);
您正在将相机设置为Z=-5,并朝向原点,即朝向+ve Z方向

我猜最初三角形的顶点必须在XY平面上,因此三角形是可见的

那么当你打电话的时候

Matrix.setLookAtM(mViewMatrix, 0, 0, 0, -5f, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
Matrix.setRotateM(zRotationMatrix, 0, anguloZ, 0, 0, 1);
Matrix.setRotateM(xRotationMatrix, 0, anguloX, 1, 0, 0);
Matrix.setRotateM(yRotationMatrix, 0, anguloY, 0, 1, 0);
它围绕Z轴旋转三角形,这很好

但是你打电话来

Matrix.setLookAtM(mViewMatrix, 0, 0, 0, -5f, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
Matrix.setRotateM(zRotationMatrix, 0, anguloZ, 0, 0, 1);
Matrix.setRotateM(xRotationMatrix, 0, anguloX, 1, 0, 0);
Matrix.setRotateM(yRotationMatrix, 0, anguloY, 0, 1, 0);
这里你将围绕X轴和Y轴旋转三角形,因为三角形没有厚度, 它变得看不见了

可能的修复方法:

1移除绕X轴和Y轴的旋转,并检查其是否工作

                  OR
                  OR
2把一个立方体代替三角形,看看它是否有效

                  OR
                  OR
如果两者都不起作用,给我完整的代码。我会调试并运行它


祝您好运

对于这样的问题,您通常可以通过返回正常工作的代码,然后更改小部分来解决它们。当它停止工作时,你只需要检查一个小的改变。实际上我有可以工作的代码,但是我不能只添加新代码的一部分。我想我一次编辑的太多了