0

画像は常に大量のテキストよりも多くを話します。これが私がやろうとしていることです: 拡張現実シーン

円の中心にあるのがユーザーの電話位置(原点)です。アプリはカスタム カメラ ビューを表示し、OpenGL シーンも表示します (見ている場所によって異なります)。OpenGL シーンは単純な立方体のみで構成されており、ユーザーが正しい方向を見ていると、立方体がレンダリングされます。

私は OpenGL を初めて使用し、カメラの前に立方体を表示することに成功しましたが、静的です。360° ビューを移動できません。

センサーからデバイスの向きを取得します:

    int type = event.sensor.getType();
    float[] data;
    if (type == Sensor.TYPE_ACCELEROMETER) {
        mGData = data;
    } else if (type == Sensor.TYPE_MAGNETIC_FIELD) {
        mMData = data;
    } else {
        // we should not be here.
        return;
    }
    for (int i=0 ; i<3 ; i++)
        data[i] = event.values[i];

    SensorManager.getRotationMatrix(mR, mI, mGData, mMData);
    SensorManager.getOrientation(mR, mOrientation);

私の知る限り、3 つの同時直交回転角度は mOrientation に格納されます。しかし、その後は?メソッドのようなものを作りたかったGLU.lookAt(0, 0, 0, X, Y, Z, ?, ?, ?)onDrawFrameですが、うまくいきませんでした。あの男ができないと言ったようなものを作りたいです(ここの最後の段落を参照してください:https://stackoverflow.com/a/9114246/1304830)。

で使用したコードは次のonDrawFramとおりです。

    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
    gl.glMatrixMode(GL10.GL_MODELVIEW);

    // Look in a direction (with the sensors)
    gl.glLoadIdentity();
    GLU.gluLookAt(gl, 0.0f, 0.0f, 0.0f, ?, ?, ?, ?, ?, ?); // Where I need help

    gl.glPushMatrix();  

    // Place the cube in the scene
    gl.glTranslatef(0, 0, -5);
    mCube.draw(gl);

ご協力いただきありがとうございます

4

1 に答える 1

0

これはその人がやろうとしていたことを実行しますが、彼のアイデアの問題は、アップベクトルが常にy軸を上向きにしていることです。したがって、電話を回転させても、カメラは一緒に回転しません。

float pi = (float) Math.PI;
float rad2deg = 180/pi;

// Get the pitch, yaw and roll from the sensor. 

float yaw = orientation[0] * rad2deg;
float pitch = orientation[1] * rad2deg;
float roll = orientation[2] * rad2deg;

// Convert pitch, yaw and roll to a vector

float x = (float)(Math.cos( yaw ) * Math.cos( pitch ));
float y = (float)(Math.sin( yaw ) * Math.cos( pitch ));
float z = (float)(Math.sin( pitch ));

GLU.gluLookAt( gl, 0.0f, 0.0f, 0.0f, x, y, z, 0.0f, 1.0f, 0.0f );  

何らかの理由でロールをロックしたい場合を除いて、3つのglRotatesを使用することはIMOのより良いオプションです。

注:スマートフォンの画面に対してAndroidが呼び出す方向がわからないため、ヨー、ピッチ、ロールの設定が間違っている可能性があります。

于 2013-01-10T00:51:25.377 に答える