2014-06-12 8 views
0

Java에서 OpenGL을 사용하여 복셀 엔진을 구현하려고합니다. 지형을 생성하기 위해 단순한 노이즈로 화면에 보셀 덩어리를 렌더링하려 할 때 거꾸로 된 것처럼 보입니다. 나는 그것을 생성하기 위해 내 청크를 반복하고 있기 때문에 그것이라고 가정하고있다.Voxel 청크 렌더링이 거꾸로 됨

for (int x = 0; x < CHUNK_SIZE; x++) { 
     for (int z = 0; z < CHUNK_SIZE; z++) { 
      int height = (int)(sno.noise(x/16f, z/16f)*Math.random()*16); 
      if(height <= 0) 
       height = 1; 
      for (int y = 0; y < height; y++) { 
       blocks[x][y][z].setActive(true); 
       activateBlocks += 1; 
      } 
     } 
    } 
} 

public void drawChunk() { 
     GL11.glPushMatrix(); 
     GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, VBOVertexHandle); 
     GL11.glVertexPointer(3, GL11.GL_FLOAT, 0, 0L); 

     GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, VBOTextureHandle); 
     GL11.glColorPointer(3, GL11.GL_FLOAT, 0, 0L); 


     GL11.glDrawArrays(GL11.GL_QUADS, 0, ((24)*activateBlocks)); 
     GL11.glPopMatrix(); 
} 

public void putVertices(float tx, float ty, float tz) { 
    float l_length = 1.0f; 
    float l_height = 1.0f; 
    float l_width = 1.0f; 
    vertexPositionData.put(new float[]{ 
      xOffset + l_length + tx, l_height + ty, zOffset + -l_width + tz, 
      xOffset + -l_length + tx, l_height + ty, zOffset + -l_width + tz, 
      xOffset + -l_length + tx, l_height + ty, zOffset + l_width + tz, 
      xOffset + l_length + tx, l_height + ty, zOffset + l_width + tz, 

      xOffset + l_length + tx, -l_height + ty, zOffset + l_width + tz, 
      xOffset + -l_length + tx, -l_height + ty, zOffset + l_width + tz, 
      xOffset + -l_length + tx, -l_height + ty, zOffset + -l_width + tz, 
      xOffset + l_length + tx, -l_height + ty, zOffset + -l_width + tz, 

      xOffset + l_length + tx, l_height + ty, zOffset + l_width + tz, 
      xOffset + -l_length + tx, l_height + ty,zOffset + l_width + tz, 
      xOffset + -l_length + tx, -l_height + ty,zOffset + l_width + tz, 
      xOffset + l_length + tx, -l_height + ty, zOffset + l_width + tz, 

      xOffset + l_length + tx, -l_height + ty, zOffset + -l_width + tz, 
      xOffset + -l_length + tx, -l_height + ty,zOffset + -l_width + tz, 
      xOffset + -l_length + tx, l_height + ty, zOffset + -l_width + tz, 
      xOffset + l_length + tx, l_height + ty, zOffset + -l_width + tz, 

      xOffset + -l_length + tx, l_height + ty, zOffset + l_width + tz, 
      xOffset + -l_length + tx, l_height + ty, zOffset + -l_width + tz, 
      xOffset + -l_length + tx, -l_height + ty, zOffset + -l_width + tz, 
      xOffset + -l_length + tx, -l_height + ty,zOffset + l_width + tz, 

      xOffset + l_length + tx, l_height + ty,zOffset + -l_width + tz, 
      xOffset + l_length + tx, l_height + ty, zOffset + l_width + tz, 
      xOffset + l_length + tx, -l_height + ty, zOffset + l_width + tz, 
      xOffset + l_length + tx, -l_height + ty, zOffset + -l_width + tz 

    }); 
} 

public void createChunk() { 
    vertexPositionData = BufferUtils.createFloatBuffer(((24*3)*activateBlocks)); 

    Random random = new Random(); 
    for (int x = 0; x < CHUNK_SIZE; x++) { 
     for (int z = 0; z < CHUNK_SIZE; z++) { 
      for (int y = 0; y < CHUNK_SIZE; y++) { 
       if(blocks[x][y][z].getActive()) { 
        putVertices(x*2, y*2, z*2); 
       } 
      } 
     } 
    } 

    vertexPositionData.flip(); 

} 

아이디어가 있으십니까? 여기

는 게임의 모습입니다 - 그것을 확인하기 어렵다 귀하의 렌더링 코드를 보지 않고

Chunk upside down

+0

실제로 이미지를 볼 수는 없지만 위아래면 좌표를 뒤집어 봅니다. –

+0

변환 매트릭스 란 무엇입니까? –

답변

0

,하지만 시작은 Y 자바 좌표 것을 잊어 버린 좋은 돈을 내기 것 화면의 상단과 아래로 이동합니다.

+0

내 게시물에 렌더링 코드를 추가했습니다. 나는 네가 옳다고 생각한다. – sunsunsunsunsun

+0

문제는 putVertices (x * 2, y * 2, z * 2)를 변경하면 해결됩니다. Vertices (x * 2, -y * 2, z * 2)를 넣는다; – sunsunsunsunsun

+0

-1 : OpenGL 좌표는 왼쪽 하단부터입니다. 자바가 좌표로 사용하는 것은 부적절합니다. –