0

ここに私の問題があります:私はアンドロイドでビリヤードゲームを作っていて、テーブルの中心を中心にカメラを自由に回転させたいと思っています。問題は、動きを止めると、同じものしか何度も見ないため、glulookat がリセットされたように見えることです。誰かがこれを解決する方法、または私がやりたいことを行う別の方法を知っていれば、本当に感謝しています

これは私のレンダラークラスです:

public void onDrawFrame(GL10 gl) {


    // Redraw background color
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

    // Set GL_MODELVIEW transformation mode
    gl.glMatrixMode(GL10.GL_MODELVIEW);

    gl.glLoadIdentity();   // reset the matrix to its default state



    // Screen position to angle conversion
    theta = (float) ((360.0/screenHeight)*mMoveY*3.0);    //3.0 rotations possible
    phi = (float) ((360.0/screenWidth)*mMoveX*3.0);

    // Spherical to Cartesian conversion.  
    // Degrees to radians conversion factor 0.0174532
    eyeX = (float) (r * Math.sin(theta/**0.0174532*/) * Math.sin(phi/**0.0174532*/));
    eyeY = (float) (r * Math.cos(theta/**0.0174532*/));
    eyeZ = (float) (r * Math.sin(theta/**0.0174532*/) * Math.cos(phi/**0.0174532*/));

    // Reduce theta slightly to obtain another point on the same longitude line on the sphere.

    eyeXtemp = (float) (r * Math.sin(theta/**0.0174532*/-dt) * Math.sin(phi/**0.0174532*/));
    eyeYtemp = (float) (r * Math.cos(theta/**0.0174532*/-dt));
    eyeZtemp = (float) (r * Math.sin(theta/**0.0174532*/-dt) * Math.cos(phi/**0.0174532*/));

    // Connect these two points to obtain the camera's up vector.
    upX=eyeXtemp-eyeX;
    upY=eyeYtemp-eyeY;
    upZ=eyeZtemp-eyeZ;

    // Set the view point
    GLU.gluLookAt(gl,       eyeX, eyeY, eyeZ,       0,0,0,      upX, upY, upZ);

アクティビティ クラスの onTouch メソッドは次のとおりです。

 public boolean onTouchEvent(MotionEvent e) {

    float x = e.getX();
    float y = e.getY();

    switch (e.getAction()) {
    case MotionEvent.ACTION_MOVE:

        float dx = x - mPreviousX;
        float dy = y - mPreviousY;

        // reverse direction of rotation above the mid-line
        /*if (y > getHeight() / 2) {
            dx = dx * -1 ;
        }

        // reverse direction of rotation to left of the mid-line
        if (x < getWidth() / 2) {
            dy = dy * -1 ;
        }*/

        mRenderer.mMoveX = dx * TOUCH_SCALE_FACTOR/100;
        mRenderer.mMoveY = dy * TOUCH_SCALE_FACTOR/100;

        requestRender();
    }

    mPreviousX = x;
    mPreviousY = y;
    return true;
} 
4

1 に答える 1

0

計算を行うときは、 と を使用していmMoveXますmMoveY。代わりに、それらを他のより永続的な x/y 変数に追加する必要があるようです。

何かのようなもの:

mCamX += mMoveX;
mCamY += mMoveY;
theta = (float) ((360.0/screenHeight)*mCamY*3.0);    //3.0 rotations possible
phi = (float) ((360.0/screenWidth)*mCamX*3.0);
于 2012-06-22T04:12:55.737 に答える