2013-02-26 2 views
0

Я очень смущен в использовании методов GLU.gLookAt (eyeX, eyeY, eyeZ, Xpos, Ypos, Zpos, upX, upY, upZ). Все, что я хочу, это увеличить 3D-куб. Когда я увеличиваю/уменьшаю значение eyeZ, камера перемещается вперед/назад к кубу. Его все хорошо до определенного предела eyeZ, но когда я увеличиваю значение eyeZ за пределами этого предела, он начинает возвращать эффект, то есть вместо масштабирования он начинает масштабироваться.Движение камеры в OpenGL ES android

Возможно, я не очень хорошо разбираюсь в openGL, чтобы понять метод выше, но может ли кто-нибудь сказать мне, что является основной причиной этого. я упомянул эту ссылку http://jerome.jouvie.free.fr/opengl-tutorials/Tutorial8.php

Если вы хотите, я могу разместить свой код здесь ..

public void onDrawFrame(GL10 gl) 
{ 

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


    //gl.glTranslatef(xPos, yPos, -zoomFactor); 
    GLU.gluLookAt(gl, eyeX, eyeZ, eyeZ, 0f, 0f, 0f , 0f, 1f, 0f); 

    gl.glRotatef(mAngleX, 0, 1, 0); 
    gl.glRotatef(mAngleY, -1, 0, 0); 

    // Draw the model 
    cube.draw(gl); 
} 

это метод, в котором я использую метод gLookAt ..

+0

сделайте свой код и точку, в которой он начинает уменьшаться. –

+0

Ну, если вы переместите камеру вдоль линии, в какой-то момент вы будете ближе всего к своей цели. –

+0

общественного недействительными onDrawFrame (GL10 ГЛ) { \t \t gl.glClear (GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); \t gl.glMatrixMode (GL10.GL_MODELVIEW); \t gl.glLoadIdentity(); \t \t //gl.glTranslatef (xPos, yPos, -zoomFactor); \t GLU.gluLookAt (gl, eyeX, eyeZ, eyeZ, 0f, 0f, 0f \t, 0f, 1f, 0f); \t gl.glRotatef (mAngleX, 0, 1, 0); \t gl.glRotatef (mAngYY, -1, 0, 0); \t // Нарисуем модель \t cube.draw (gl); } –

ответ

1

GLU.gluLookAt(gl, eyeX, eyeZ, eyeZ, 0f, 0f, 0f , 0f, 1f, 0f); является функция, которая помещает вашу камеру в определенное место, в этом случае ее (0,0,0) (я думаю, не могу вспомнить, в каком направлении вокруг параметров, но im, предполагая, что последние 3 являются вашим вектором вверх). Поэтому, если вы перемещаете камеру по направлению к тому, на что вы смотрите, в конце концов она пройдет через нее, а с другой стороны, и поскольку вы используете GLU.gluLookAt, она повернется лицом к объекту позади него, создавая впечатление, что вы увеличиваете масштаб когда вы продолжаете двигаться в одном направлении.

+0

да .. Вы правы .. Так что я могу сделать, чтобы избежать этого. Я хочу убедиться, что камера не должна поворачиваться лицом к объекту из своего за –

+0

вам придется прекратить использование глюлооката. вам нужно будет поворачивать камеру с помощью glrotate, чтобы смотреть на нее в нужном вам направлении, а затем использовать gltranslate, чтобы переместить ее в нужное положение (или сначала перевести, а затем повернуть, как правило, порядок событий назад) – Fonix

+1

или вы можете использовать глюлотак , и переместите свой взгляд на точку на сумму, которую вы продвигаете вперед, т.е. 'GLU.gluLookAt (gl, eyeX, eyeZ, eyeZ, 0f, 0f, (startEyeZ - currentEyeZ), 0f, 1f, 0f);' не уверены, правильно, но что-то в этом роде (также вы уверены, что вы должны иметь 2 'eyeZ' в параметрах этой функции?) – Fonix

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