我有setLookAtM函数的问题。我的目标是在这样的多维数据集中创建一个多维数据集(是的,它是paint:P):



所以基本上所有东西都可以工作... Almoust ...我有一个较小的立方体,却有一个较大的立方体。
但是,有一个问题。我用-1到1的坐标创建了更大的一个,现在我想对其进行升级。在比例尺为1.0f的情况下,我有类似的内容(内部立方体在旋转):



那就不错了,但是现在...当我尝试缩放更大的立方体(以便看起来像油漆图中的图像)时,图像变成黑色或白色(我想是因为“相机”看着白色的立方体,但仍然我不知道为什么我的内部立方体消失了://我不明白我在做什么错,这是我的代码:

public void onDrawFrame(GL10 unused) {
    float[] scratch = new float[16];
    GLES20.glClear(GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);
    GLES20.glEnable(GLES20.GL_DEPTH_TEST);
    Matrix.setLookAtM(mViewMatrix, 0, 0, 0, -5.0f, 0f, 0f, -1.0f, 0f, 1.0f, 0.0f);

    Matrix.multiplyMM(mMVPMatrix, 0, mProjectionMatrix, 0, mViewMatrix, 0);

    mRoom.mScale = 1.0f;
    Matrix.setIdentityM(mScaleMatrix, 0);
    Matrix.scaleM(mScaleMatrix, 0, mRoom.mScale, mRoom.mScale, mRoom.mScale);

    float[] scaleTempMatrix = new float[16];
    Matrix.multiplyMM(scaleTempMatrix, 0, mMVPMatrix, 0, mScaleMatrix, 0);

    mRoom.draw(scaleTempMatrix);


以我为例:

mRoom.mScale = 3.0f;




Matrix.setLookAtM(mViewMatrix, 0, 0, 0, -2.0f, 0f, 0f, 0.0f, 1.0f, 1.0f, 0.0f);


我的相机应该在(0,0,-2)处并在(0,0,-1)处,并且应该在白色立方体内(因为比例为3.0,所以坐标应该从-3到3正确吗?)我得到的只是一个白色的屏幕,里面没有旋转较小的立方体:/

最佳答案

如果此代码中的比例为3倍,则可见坐标范围实际上将为[-1 / 3,1 / 3]。

您正在向后考虑问题,如果考虑比例操作的应用顺序可能会有所帮助。现在,您要缩放对象空间坐标,然后应用视图矩阵,然后进行投影。看起来可能不是这样,但是这就是GL中矩阵乘法的工作方式。 GL在进行矩阵乘法且矩阵乘法不可交换时会有效地翻转操作数。

我相信这是您真正想要的:

public void onDrawFrame(GL10 unused) {
    float[] scratch = new float[16];
    GLES20.glClear(GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);
    GLES20.glEnable(GLES20.GL_DEPTH_TEST);
    Matrix.setLookAtM(mViewMatrix, 0, 0, 0, -5.0f, 0f, 0f, -1.0f, 0f, 1.0f, 0.0f);

    mRoom.mScale = 3.0f;
    Matrix.setIdentityM(mScaleMatrix, 0);
    Matrix.scaleM(mScaleMatrix, 0, mRoom.mScale, mRoom.mScale, mRoom.mScale);

    Matrix.multiplyMM(mMVPMatrix, 0, mScaleMatrix, 0, mProjectionMatrix, 0);
    Matrix.multiplyMM(mMVPMatrix, 0, mMVPMatrix,   0, mViewMatrix,       0);

    mRoom.draw(mMVPMatrix);

关于android - OpenGL ES 2.0 setLookAtM,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23725946/

10-08 21:53