2014-10-19 4 views
0

I 정점 배열을 사용하여 사각형을 그립니다 시도하는 다음 코드가 :의 OpenGL 텍스처는 왜곡 된 좌표

목적은 멀리 코너 패턴을 사용하여 삼각형 스트립을 통해 간단한 사각형을 그릴 것입니다
glEnableClientState(GL_NORMAL_ARRAY); 
glNormalPointer(GL_FLOAT, 0, &mNorms[ 0 ]); 
glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
glTexCoordPointer(2, GL_FLOAT, 0, &mTexCrds[ 0 ]); 
glEnableClientState(GL_VERTEX_ARRAY); 
glVertexPointer(3, GL_FLOAT, 0, &mVtxs[ 0 ]); 
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 

왼쪽, 오른쪽 근처, 오른쪽 근처, 오른쪽 근처. 변수 값은 다음과 같습니다.

 
     /* far left    near left   far right    near right */ 
mNorms { 0.0, 1.0, 0.0,   0.0, 1.0, 0.0,  0.0, 1.0, 0.0,  0.0, 1.0, 0.0 } 
mTexCrds { 0.0, 1.0,    0.0, 0.0,   1.0, 1.0,    1.0, 0.0 } 
mVtxs { -25.0, 0.0, -100.0, -25.0, 0.0, -50.0, 25.0, 0.0, -100.0, 25.0, 0.0, -50.0 } 

내 텍스처는 모든 가장자리 주위에 얇은 파란색 테두리가있는 검은 타일입니다. 사각형이 위의 지침을 사용하여 그려진 때, 완전히 파란색 : 분명히

bad.jpg http://www.graemecentralstation.com/img/bad.jpg

, 위의 질감 주어진 내 2D 텍스처가 완전히 볼 수 있도록 기대하고 조정합니다.

제가

glBegin(GL_TRIANGLE_STRIP); 
{ 
    for(int i = 0; i < 4; ++i) 
    { 
     glNormal3fv(&mNorms[ i * 3 ]); 
     glTexCoord2fv(&mTexCrds[ i * 2 ]); 
     glVertex3fv(&mVtxs[ i * 3 ]); 
    } 
} 
glEnd(); 

는 ... 다음 직사각형 I 예상대로 가시적 전체 텍스처 맵 이미지로 그려진 ... 이런 동일한 어레이 데이터를 이용하여 수동으로 호출과 glDrawArrays()를 대체하는 경우 :

good.jpg http://www.graemecentralstation.com/img/good.jpg

glDrawArrays()가 내 질감을 너무 심하게 왜곡 왜 어떤 생각?

+1

만약 당신이'glVertexPointer'를 셋업하는데 어려움을 겪고 있다면, 꼭 정점 버퍼 객체를 사용할 수 있습니다. 그것은 아마도 더 잘 수행 할 것입니다. –

답변

-1

당신은 아마 그래서 다음 텍스처 좌표가 올바른지 여부를 확인할 수 있습니다, 당신은 텍스처를 사용하여 디버깅하는 조각 쉐이더 색상으로 좌표를 시도 할 수 있습니다
glActiveTextureARB(GL_TEXTURE0_ARB); glBindTexture(GL_TEXTURE_2D,texID);

단지

0

glEnableClientState(GL_TEXTURE_COORD_ARRAY); 전에 추가해야합니다. gl_FragColor = vec4(vec2(texCoord),0,1);