2015-01-19 5 views
-1

여기 코딩 문제가 있습니다. 2 개 이상의 블록을 렌더링 할 때 새 블록이있는 위치에 이전 블록이 추가되므로 해당 블록 사이에 다른 거리가 있습니다. FPCameraController를 사용 했으므로 GL11.glloadIdentify()를 추가 할 수 없습니다. 내 블록이 사라지기 때문입니다.LWJGL GLTranslation previos 번역

렌더링 클래스 :

동안 { GL11.glClear (GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT | GL11.GL_STENCIL_BUFFER_BIT) (Display.isCloseRequested!) 이러한 변수와

  GL11.glCullFace(GL11.GL_BACK); 
      GL11.glEnable(GL11.GL_CULL_FACE); 
      GL11.glEnable(GL11.GL_DEPTH_TEST); 
      GL11.glDisable(GL11.GL_BLEND); 

      GL11.glPopMatrix(); //From 2D 
      GL11.glMatrixMode(GL11.GL_PROJECTION); 
      GL11.glLoadIdentity(); 
      GLU.gluPerspective(45f, (float) Display.getWidth()/Display.getHeight(), 0.1f, 1000); 
      GL11.glViewport(0, 0, Display.getWidth(), Display.getHeight()); 
      GL11.glMatrixMode(GL11.GL_MODELVIEW); 



      //distance in mouse movement from the last getDX() call. 
      dx = Mouse.getDX(); 
      //distance in mouse movement from the last getDY() call. 
      dy = Mouse.getDY(); 

      //controll camera yaw from x movement fromt the mouse 
      camera.yaw(dx * mouseSensitivity); 
      //controll camera pitch from y movement fromt the mouse 
      camera.pitch(dy * mouseSensitivity); 

      //when passing in the distance to move 
      //we times the movementSpeed with dt this is a time scale 
      //so if its a slow frame u move more then a fast frame 
      //so on a slow computer you move just as fast as on a fast computer 
      if (Keyboard.isKeyDown(Keyboard.KEY_W))//move forward 
      { 
       camera.walkForward(movementSpeed*dt); 
      } 
      if (Keyboard.isKeyDown(Keyboard.KEY_S))//move backwards 
      { 
       camera.walkBackwards(movementSpeed*dt); 
      } 
      if (Keyboard.isKeyDown(Keyboard.KEY_A))//strafe left 
      { 
       camera.strafeLeft(movementSpeed*dt); 
      } 
      if (Keyboard.isKeyDown(Keyboard.KEY_D))//strafe right 
      { 
       camera.strafeRight(movementSpeed*dt); 
      } 

      CubeRenderer.renderTexturedCube(TextureManager.cube_unknown.getTexture(), 0,0,0); 
      CubeRenderer.renderTexturedCube(TextureManager.cube_unknown.getTexture(), 0,1,0); 
      CubeRenderer.renderTexturedCube(TextureManager.cube_unknown.getTexture(), 0,2,0); 
      CubeRenderer.renderTexturedCube(TextureManager.cube_unknown.getTexture(), 1,2,0); 
      CubeRenderer.renderTexturedCube(TextureManager.cube_unknown.getTexture(), -1,2,0); 
      GL11.glLoadIdentity(); 
      camera.lookThrough(); 




      Display.sync(60); 
      Display.update(); 
    } 
    Display.destroy(); 

렌더링 클래스 : 텍스처 텍스; float x, y, z;

GL11.glTranslatef (x, y, z);
GL11.glRotatef (0,0.0f, 0.0f, 0.0f);
GL11.glColor3f (0.5f, 0.5f, 1.0f);
tex.bind(); GL11.gl 폴리곤 모드 (GL11.GL_FRONT, GL11.GL_FILL);

 GL11.glBegin(GL11.GL_QUADS); 
    GL11.glTexCoord2f(0, 0); GL11.glVertex3f(-1, -1, 1); 
    GL11.glTexCoord2f(0, 1); GL11.glVertex3f(1, -1, 1); 
    GL11.glTexCoord2f(1, 1); GL11.glVertex3f(1, 1, 1); 
    GL11.glTexCoord2f(1, 0); GL11.glVertex3f(-1, 1, 1); 
    GL11.glEnd(); 
    //left 
    GL11.glBegin(GL11.GL_QUADS); 
    GL11.glTexCoord2f(0, 0); GL11.glVertex3f(-1, -1, -1); 
    GL11.glTexCoord2f(0, 1); GL11.glVertex3f(-1, -1, 1); 
    GL11.glTexCoord2f(1, 1); GL11.glVertex3f(-1, 1, 1); 
    GL11.glTexCoord2f(1, 0); GL11.glVertex3f(-1, 1, -1); 
    GL11.glEnd(); 
    //right 
    GL11.glBegin(GL11.GL_QUADS); 
    GL11.glTexCoord2f(0, 0); GL11.glVertex3f(1, -1, -1); 
    GL11.glTexCoord2f(0, 1); GL11.glVertex3f(1, 1, -1); 
    GL11.glTexCoord2f(1, 1); GL11.glVertex3f(1, 1, 1); 
    GL11.glTexCoord2f(1, 0); GL11.glVertex3f(1, -1, 1); 
    GL11.glEnd(); 
    //front 
    GL11.glBegin(GL11.GL_QUADS); 
    GL11.glTexCoord2f(0, 0); GL11.glVertex3f(-1, -1, -1); 
    GL11.glTexCoord2f(0, 1); GL11.glVertex3f(1, -1, -1); 
    GL11.glTexCoord2f(1, 1); GL11.glVertex3f(1, -1, 1); 
    GL11.glTexCoord2f(1, 0); GL11.glVertex3f(-1, -1, 1); 
    GL11.glEnd(); 
    //back 
    GL11.glBegin(GL11.GL_QUADS); 
    GL11.glTexCoord2f(0, 0); GL11.glVertex3f(1, 1, -1); 
    GL11.glTexCoord2f(0, 1); GL11.glVertex3f(-1, 1, -1); 
    GL11.glTexCoord2f(1, 1); GL11.glVertex3f(-1, 1, 1); 
    GL11.glTexCoord2f(1, 0); GL11.glVertex3f(1, 1, 1); 
    GL11.glEnd(); 
    //bottom 
    GL11.glBegin(GL11.GL_QUADS); 
    GL11.glTexCoord2f(0, 0); GL11.glVertex3f(1, -1, -1); 
    GL11.glTexCoord2f(0, 1); GL11.glVertex3f(-1, -1, -1); 
    GL11.glTexCoord2f(1, 1); GL11.glVertex3f(-1, 1, -1); 
    GL11.glTexCoord2f(1, 0); GL11.glVertex3f(1, 1, -1); 
    GL11.glEnd(); 

답변

0

사용 GL11.glPushMatrix 그것을 복원하기 위해 기존의 매트릭스와 GL11.glPopMatrix을 저장합니다. renderTexturedCube (또는 원하는 곳) :

GL11.glPushMatrix(); // saves the current matrix 

GL11.glTranslatef(x, y, z); 
GL11.glRotatef(0, 0.0f, 0.0f, 0.0f); // not sure why you have this; it does nothing 

// rest of cube rendering code goes here 

GL11.glPopMatrix(); // restore the matrix that was saved at the start of the method 
+0

고맙습니다! 그것은 완벽하게 작동합니다 – LucaV

+0

그 경우, 대답의 왼쪽에있는 체크를 클릭하여 동의 한 것으로 표시하십시오. – immibis