2013-02-08 3 views
0

Я хочу нарисовать 3D-объект в openGL, но каков наилучший способ приблизиться к этому? Я думал о том, чтобы рисовать боковые профили в 2D и, возможно, затем объединять его, чтобы стать 3D, но возможно ли это? Я думаю, что было бы проще сделать это так, а затем просто перейти в 3D, но если вы не можете, то id просто растратит свое время.Java openGL - рисование 3D-объекта

Я также не могу понять, как добавить небо и, возможно, даже море с отражением, легко ли это сделать?


gl.glClear(GL.GL_COLOR_BUFFER_BIT); 
    gl.glColor3f(1.0f, 1.0f, 1.0f); 

    gl.glPushMatrix(); 
    gl.glTranslatef(-1.0f, 0.0f, 0.0f); 
    gl.glRotatef((float) shoulder, 0.0f, 0.0f, 1.0f); 
    gl.glTranslatef(1.0f, 0.0f, 0.0f); 
    // gl.glPushMatrix(); 
    gl.glScalef(2.0f, 0.4f, 1.0f); 
    glut.glutWireCube(1.0f); 
    // gl.glPopMatrix(); 

    gl.glTranslatef(1.0f, 0.0f, 0.0f); 
    gl.glRotatef((float) elbow, 0.0f, 0.0f, 1.0f); 
    gl.glTranslatef(1.0f, 0.0f, 0.0f); 
    // gl.glPushMatrix(); 
    gl.glScalef(2.0f, 0.4f, 1.0f); 
    glut.glutWireCube(1.0f); 
    // gl.glPopMatrix(); 

    gl.glTranslatef(1.0f, 1.0f, 1.0f); 
    gl.glRotatef((float) hand, 0.0f, 0.0f, 1.0f); 
    gl.glTranslatef(1.0f, 0.0f, 0.0f); 
    // gl.glPushMatrix(); 
    gl.glScalef(2.0f, 0.4f, 1.0f); 
    glut.glutWireCube(1.0f); 
    // gl.glPopMatrix(); 

Ive просто пытается случайных чисел, чтобы попытаться заставить его работать, но не такой удачи до сих пор!

ответ

1

Хорошо, сначала отражения могут быть трудными в зависимости от того, как вы хотите их выполнять. Вам обязательно нужно больше узнать OpenGL, прежде чем пытаться что-то в этом роде. Во-вторых, 3D-объекты требуют некоторой больше матричной вещи, это пример из моего метода инициализации в моем 3D игры:

private void initGl() { 
    glViewport(0, 0, Display.getWidth(), Display.getHeight()); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    GLU.gluPerspective(45.0f, Display.getWidth()/Display.getHeight(), 1.0f, 100.0f); 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 
    glClearDepth(1.0f); 
    glDepthFunc(GL_LEQUAL); 
    glEnable(GL_DEPTH_TEST); 
    glShadeModel(GL_SMOOTH); 
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); 
    glEnable(GL_FOG); 
    glFogi(GL_FOG_MODE, GL_EXP2); 
    glFogf(GL_FOG_DENSITY, density); 
    glHint(GL_FOG_DENSITY, GL_FASTEST); 
    glEnable(GL_CULL_FACE); 
    glCullFace(GL_BACK); 
} 

Вам также необходимо очистить буфер, как это перед нанесением:

 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

Вы почти правы, когда говорите, как только вытащить 2D-объект. Если бы мы по-прежнему использовали немедленный режим (glBegin()/glEnd()), ваш подход был бы правильным. Однако немедленный режим устарел, и мы обычно используем VBOs. Я бы посоветовал пойти на YouTube и искать theCodingUniverse, если вы используете LWJGL, у него есть видео на VBOs и расширенный рендеринг, как я их узнал!

Удачи в мире 3D, его нелегко вообще, но его (на мой взгляд), гораздо более удовлетворяющего, чем 2D, когда вы получаете что-то работающее.

Кроме того, рассмотрите возможность инвестирования в RedBook, все о LWJGL.

+0

Спасибо за ваш ответ im, используя JOGL, который, как я знаю, немного отличается от LWJGL, у меня есть пример кода, который использует 2 3D-объекта, но когда я копирую код для одного и редактирую цифры перевода, он, похоже, ничего не делает , Также кажется, что почти нет учебников по Java/JOGL openGL! – thrash

+0

Не могли бы вы выслать код? Я посмотрю на это. – 2013-02-08 18:48:32

+0

Спасибо большое, только что отредактировал оригинальный вопрос! – thrash

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