2013-08-04 2 views
1

이것은 지난 며칠 동안 나를 미치게 만들었습니다.LWJGL의 텍스처 매핑

은 내가 spritesheet 애니메이션있어, 그것은 실제로이 코드 내 96px 384px 질감에 좋은 운동한다 :

glBegin(GL_QUADS); 
     glTexCoord2f((frameCount*24.0f)/imgWidth, (row*24.0f)/imgHeight); glVertex3f(0+x, 0+y, -0.001f*(y+32)); 
     glTexCoord2f((frameCount*24.0f)/imgWidth, ((row+1)*24.0f)/imgHeight); glVertex3f(0+x, 32+y, -0.001f*(y+32)); 
     glTexCoord2f(((frameCount+1)*24.0f)/imgWidth, ((row+1)*24.0f)/imgHeight); glVertex3f(32+x, 32+y, -0.001f*(y+32)); 
     glTexCoord2f(((frameCount+1)*24.0f)/imgWidth, (row*24.0f)/imgHeight); glVertex3f(32+x, 0+y, -0.001f*(y+32)); 
    glEnd(); 

문제는 내가 32px의 32px 텍스처에로드 할 때, 그것은 이상한 보이는 것을 생각하다 ! 나는 숫자 24.0f가 텍스쳐 크기에 따라 달라야한다고 생각하지만 어떻게 될지 알 수 없다.

두 번째 질문 :이 방법이 성능에 어떤 영향을 미치나요? 더 좋은 방법이 있습니까?

+0

사실 나는 이것을 다음과 같이 해결했습니다. \t \t texture.bind(); \t \t \t \t glBegin (GL_QUADS); \t \t \t glTexCoord2f (32.0f * frameCount/imgWidth, 32.0f * row/imgHeight); glVertex3f (0 + x, 0 + y, -0.001f * (y + 32)); \t \t \t glTexCoord2f (32.0f * frameCount/imgWidth, 32.0f * (row + 1)/imgHeight); glVertex3f (0 + x, 32 + y, -0.001f * (y + 32)); \t \t \t glTexCoord2f (32.0f * (frameCount + 1)/imgWidth, 32.0f * (row + 1)/imgHeight); glVertex3f (32 + x, 32 + y, -0.001f * (y + 32)); \t \t \t glTexCoord2f (32.0f * (frameCount + 1)/imgWidth, 32.0f * row/imgHeight); glVertex3f (32 + x, 0 + y, -0.001f * (y + 32)); \t \t glEnd(); 아직도 알고 싶습니다. 효율적입니까? – Deenis

답변

0

질감은 X 축 (폭 U에게 값)에 대한 조정은 다음과 같아야 frameWidth가 텍스쳐의 각 프레임의 폭이되고 그리고 imgWidth이 폭의 합계 인과

frameCount * (frameWidth/imgWidth) 

텍스처.

질감은 Y 축 (높이 또는 V 값)에 대한 조정은 다음과 같아야 frameHeight에가 텍스쳐의 각 프레임의 높이 인 및 imgHeight가 총 높이 되 고

frameCount * (frameHeight/imgHeight) 

텍스처 (이 경우 프레임 텍스처는 전체 텍스쳐와 동일한 높이를 가졌기 때문에 아마도 동일 할 것입니다 - 또는 그것이 내가 당신의 코드를 보았을 때 가정 한 것입니다).

코드를보다 효율적으로 사용하려면 각 쿼드에 대해 여러 번 발생하는 곱셈을 미리 계산할 수 있습니다. 따라서 미리 계산할 수 있습니다 :

float widthFraction = frameWidth/imgWidth; 
float heightFraction = frameHeight/imgHeight; 

그런데 꼭 같은 점은 꼭지점 좌표 계산에 적용됩니다.

수십만 개 이상의 정점을 사용하면 계산 속도가 확실히 빨라지지만 두 가지 방법을 비교해 볼 수 있습니다.