2017-03-20 5 views
0

최근 seedbased 하이트 맵 생성기를 완성하고 생성 된 지형에 텍스처를 추가하려고합니다. 우선 드로잉을 위해 GL_TRIANGLES를 사용했던 내 TerrainRenderer에 텍스처 렌더링을 구현했습니다.glTexCoord2f()를 사용하여 삼각형 스트립 텍스처링하기?

이 내 시험 텍스처와 아주 잘 작동 :

This works very well with my test texture.

여기에 내 옛날 렌더링 코드입니다 :

for(int z = 0; z < terrain.terrainSizeZ-1; z++) { 
GL11.glBegin(GL11.GL_TRIANGLES); 
    for(int x = 0; x < terrain.terrainSizeX-1; x++) { 
     GL11.glTexCoord2f(1, 0); 
     GL11.glVertex3f(x*size, terrain.terrain[x][z], z*size); 
     GL11.glTexCoord2f(1, 1); 
     GL11.glVertex3f(x*size, terrain.terrain[x][z+1], (z+1)*size); 
     GL11.glTexCoord2f(0, 0); 
     GL11.glVertex3f((x+1)*size, terrain.terrain[x+1][z], (z)*size); 
     GL11.glTexCoord2f(0, 0); 
     GL11.glVertex3f((x+1)*(size), terrain.terrain[x+1][z], z*size); 
     GL11.glTexCoord2f(1, 1); 
     GL11.glVertex3f(x*size, terrain.terrain[x][z+1], (z+1)*size); 
     GL11.glTexCoord2f(0, 1); 
     GL11.glVertex3f((x+1)*size, terrain.terrain[x+1][z+1], (z+1)*size); 
    } 
    GL11.glEnd(); 
} 

가 그럼 난 내 렌더러를 재 작성하고 큰 FPS 향상을 위해 GL_TRIANGLE_STRIP을 사용했다. 원시 지형이 완벽하게 렌더링됩니다.

그래서 텍스처를 추가하려고했지만 삼각형 선에 대한 텍스처 좌표를 계산하는 방법을 알 수 없습니다. 내가하는 일은 중요하지 않습니다. 항상 하나 이상의 텍스처가 올바르게 회전하지 않습니다.

private static void render() { 
    [...] 
    for(int z = 0; z < terrain.terrainSizeZ-1; z++) { 
     GL11.glBegin(GL11.GL_TRIANGLE_STRIP); 

     for(int x = 0; x < terrain.terrainSizeX-1; x++) { 
      nextTextureCoord(); 
      GL11.glVertex3f(x*size, terrain.terrain[x][z], z*size); 
      nextTextureCoord(); 
      GL11.glVertex3f(x*size, terrain.terrain[x][z+1], (z+1)*size); 
     } 

     clearTextureCoord(); 
     GL11.glEnd(); 
    } 
    [...] 
} 

private static int texCoord = 0; 
private static void nextTextureCoord() { 
    if(texCoord == 0) 
     GL11.glTexCoord2f(1, 0); 
    else if(texCoord == 1) 
     GL11.glTexCoord2f(1, 1); 
    else if(texCoord == 2) 
     GL11.glTexCoord2f(0, 0); 
    else if(texCoord == 3) 
     GL11.glTexCoord2f(0, 1); 

    if(texCoord < 3) 
     texCoord++; 
    else 
     texCoord = 0; 
} 

private static void clearTextureCoord() { 
    texCoord = 0; 
} 

답변

0

그냥 타일링 기능을 사용 : 여기

Here you see what i mean

내 새로운 렌더링 코드 : 여기

당신이 무슨 뜻인지 볼 (그래서, 원활한 질감은 아주 좋은 작동하지 않을 수 있습니다) 텍스처 좌표의 값 :

// ... 
for(int x = 0; x < terrain.terrainSizeX-1; x++) { 
    GL11.glTexCoord2f(x, z); 
    GL11.glVertex3f(x*size, terrain.terrain[x][z], z*size); 
    GL11.glTexCoord2f(x, z + 1); 
    GL11.glVertex3f(x*size, terrain.terrain[x][z+1], (z+1)*size); 
} 
// ... 

기본값 sa mpler 구성에서 텍스처 좌표가 1 랩을 넘으면 텍스처가 바둑판 식으로 배열됩니다.

Btw, 프로젝트가 너무 크지 않은 경우 glTextCoord2f(), glVertex3f() 등과 같은 사용되지 않는 기능을 포기하고 최신 OpenGL로 전환하는 것이 좋습니다.

+0

정말 고마워요. – nik2038