2012-06-22 4 views
0

вот моя проблема: я делаю игру в бильярд в андроиде, и я хочу, чтобы камера вращалась свободно вокруг центра стола. Дело в том, что когда я останавливаю свое движение, похоже, что глюлокат сбрасывается, потому что я вижу только то же самое снова и снова. Если кто-нибудь знает способ, как решить эту проблему или другой способ сделать то, что я watn делать я бы очень признателенglulookat «сбрасывает» после движения (с android)

Это мой рендер класс:

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; 
} 

ответ

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); 
+0

Тем не менее делает точно такую ​​же вещь, спасибо в любом случае, я думаю, что проблема в том, что каким-то образом мои параметры gluLookAt самовосстановиться поэтому всегда возвращается в исходное положение (0,0,0) , Спасибо, в любом случае – ThargtG

 Смежные вопросы

  • Нет связанных вопросов^_^