2013-02-08 4 views
0

OpenGL에서 3D 오브젝트를 그리려하고 있는데이 방법에 가장 좋은 방법은 무엇일까요? 2D의 측면 프로파일을 그려서 3D로 만들기 위해 그것을 풀어 낼 수도 있다고 생각했지만 가능한가? 그런 식으로하는 것이 더 쉬울 것이라고 생각합니다. 그런 다음 3D로 곧장 들어갈 수는 있지만, 그럴 수 없다면 이드는 단지 내 시간을 낭비 할 것입니다.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(); 

필자 불과하지만 그런 행운 지금까지 시도하고 일하러 가야 임의의 숫자를 시도하고있다!

답변

1

먼저, 반사는 원하는 방식에 따라 어려울 수 있습니다. 그런 것을 시도하기 전에 더 많은 OpenGL을 배워야 할 것입니다. 그리기 전에이 같은 버퍼를 취소해야합니다

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

: 둘째, 3D 객체 좀 더 매트릭스 물건을 필요로,이 내 3D 게임 내 init 메소드에서 예입니다

 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

당신은 2D 오브젝트를 그냥 살살라고 말하면 거의 정확합니다. 즉시 모드 (glBegin()/glEnd())를 계속 사용하고 있다면 올바른 방법입니다. 그러나 즉시 모드는 현재 사용되지 않으며 일반적으로 VBO를 사용합니다. YouTube에 가서 LWJGL을 사용하는 경우 theCodingUniverse를 검색하고 VBO 및 고급 렌더링에 대한 비디오가있는 방법을 배웠습니다.

3D의 세계에서 행운을 빌어 요.하지만 그게 쉽지는 않지만, 내 의견으로는 2D보다 훨씬 만족 스럽습니다.

또한 LWJGL에 관한 RedBook에 대한 투자를 고려하십시오.

+0

답장을 보내 주셔서 감사합니다. 알고있는 JOGL을 사용하여 LWJGL과 조금 다르지만 두 개의 3D 개체를 사용하는 샘플 코드가 있지만 코드를 복사하여 변환 숫자를 편집하면 아무 것도하지 않는 것 같습니다. . Java/JOGL openGL에 대한 튜토리얼도 거의 없다고 생각합니다! – thrash

+0

코드를 게시 할 수 있습니까? 나는 그것을 살펴볼 것이다. –

+0

감사합니다. 원래 질문을 편집했습니다. – thrash