2012-01-19 3 views
1

이전에이 문제를 본 적이 있는지 궁금한 점이 있습니다. 기본적으로 텍스처와 함께 표시되도록 블렌더 모델을 가져올 수 있지만 텍스처를 올바르게 매핑하지는 않습니다. https://picasaweb.google.com/112176813871298741669/January192012?authuser=0&feat=directlink블렌더 + OpenGL + Cocos2d

내가적인 Cocos2D를 사용하여 질감을 그리는거야, 나는 이미지를 게시 할 수 없습니다

, 그래서 여기에 Picasa 웹 앨범을 통해 링크입니다 : 나는 내가 할 수있는 가장 간단한 모델을 만들었어요 그리고 이것은 내가 무엇을 얻을 다음과 같은 CCSprite draw 메소드 내에서 :

glBindTexture(GL_TEXTURE_2D, self.texture.name); 
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); 
glEnableClientState(GL_VERTEX_ARRAY); 
glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
glVertexPointer(3, GL_FLOAT, sizeof(vertexDataTextured), &MeshVertexData[0].vertex); 
glTexCoordPointer(2, GL_FLOAT, 0, &MeshVertexData[0].texCoord2); 

텍스처가 init 메소드에서 CCTexture2D로로드됩니다.

아무도 아이디어가 없습니까? 예쁜의 텍스처 좌표 확실하지만, 그것을 밖으로 작동하지 않을 수 있습니다, 그들은 데이터 여기를 바로 볼 봐 :

{/*v:*/{1.000000, -0.000000, -1.000000}, /*n:*/{0.000000, 0.999969, 0.000000}, /*t:*/{0.000000, 0.000000}}, 
{/*v:*/{-1.000000, -0.000000, -1.000000}, /*n:*/{0.000000, 1.000000, 0.000000}, /*t:*/{1.000000, 0.000000}}, 
{/*v:*/{-1.000000, 0.000000, 1.000000}, /*n:*/{0.000000, 1.000000, 0.000000}, /*t:*/{1.000000, 1.000000}}, 
{/*v:*/{1.000000, -0.000000, -1.000000}, /*n:*/{0.000000, 0.999969, 0.000000}, /*t:*/{0.000000, 0.000000}}, 
{/*v:*/{-1.000000, 0.000000, 1.000000}, /*n:*/{0.000000, 1.000000, 0.000000}, /*t:*/{1.000000, 1.000000}}, 
{/*v:*/{1.000000, 0.000000, 1.000000}, /*n:*/{0.000000, 1.000000, 0.000000}, /*t:*/{0.000000, 1.000000}}, 

그래서 텍스처 좌표는 다음과 같습니다

0.000000, 0.000000 
1.000000, 0.000000 
1.000000, 1.000000 
0.000000, 0.000000 
1.000000, 1.000000 
0.000000, 1.000000 

그러나 자세히보고 이미지 나는 그것이 좌표, 어쩌면 뭔가 openGL 매개 변수와 함께 확신하지 100 % 아니에요 ....

+1

올바른 구조를 이해한다면, 각 꼭지점 사이의 공간이 각 tex-coord 값과 같기 때문에'glTexCoordPointer (2, GL_FLOAT, sizeof (vertexDataTextured), & MeshVertexData [0] .texCoord2); ' – PeterT

+0

빌어 먹을 .... 쉬운 일이었습니다 :) 감사합니다. 분명히 너무 피곤했습니다. ...... – Darren

답변

1

귀하의 문제는 부정적인 것입니다. 텍스처 좌표는 0-1의 범위에 있으며 숫자가 1보다 크면 폴리곤 전체에 텍스처가 타일링되고 텍스처의 비율 만 사용된다는 의미가 1보다 작습니다.

glTexCoordPointer(2, GL_FLOAT, 0, &MeshVertexData[0].texCoord2);을 사용하면 텍스처 좌표를 검색 할 때 정점 데이터를 건너 뛰지 않으므로 텍스처 좌표에 대한 일부 정점 데이터를 사용한다는 의미입니다. 0은 데이터에서 텍스처 좌표의 다음 세트에 도달하는 데 필요한 보폭이어야합니다.

@PeterT가 답변으로 자신의 의견을 게시 한 후 해결 방법으로 표시해야한다고해도이 답변에 동의 함으로 표시되었으므로 완벽하게 편집했습니다.

+0

감사합니다. Lacey, -1은 정점의 일부이고, 텍스처 좌표는 블록의 끝에 있습니다. re/* 티:*/ – Darren