2011-03-16 5 views
3

저는 오랫동안 3D 게임을 개발하려고 노력해 왔습니다. 나는 this 자습서를 통해 내가 실제로 게임을 만들 정도로 충분하지 않다는 것을 알았습니다.20 면체면에 텍스처를 어떻게 매핑합니까?

그는 튜토리얼에서 사용한 20 면체 (기본 그림보기 부분)에 텍스처를 추가하려고하고 있지만 두면 이상에서 텍스처를 얻을 수 없습니다. 다른면은 아무 논리적 인 이유도없이 완전히 보이지 않습니다 (질감을 추가 할 때까지 완벽하게 나타남). 여기

내 주요 질문은 다음과 같습니다

  • 어떻게 질감 결과를 모방하기 만 정점과 색상을 사용하지 않고 제대로 표시되도록합니까?

  • 다른 기능에서 설정할 수있는 변수를 기반으로 개체를 이동할 수 있습니까?

+1

내 생각은 아닙니다. 다른 누군가가 이미 유니티처럼 만든 것을 사용하십시오. 질감이있는 큐브와 같은 도형을 만드는 것은 간단합니다. 질감이있는면이나 몸체를 얻으려면 많은 정점과 쓰레기가 필요합니다. 그렇기 때문에 프로에게 남겨진 것이 가장 좋습니다. 문자를 표면을 가로 질러 걷는 것의 일부로 다루어야하는 모든 물리학에 신경 쓰지 마세요. 즉, Cocos2D와 같은 것을 사용하고 게임을 2D로 만듭니다. –

+0

@StephenFurlani 내가하는 일은 사람들이 아니라 자동차와 관련이 있습니다. 나는 코드로 많은 차를 만들었지 만, 그들 중 누구도 아직 텍스처를 가지고 있지 않습니다. – Justin

+1

나는 그들이 모두 옳다는 것을 그들에게 모두 필요로하기 때문에 나는 그들을 손으로 만들고 싶다. 대부분의 3D 모델링 프로그램에서 나는 원하는 모양을 만들기 위해 모양을 사용하는 데 문제가 있습니다. 자, 누군가가 어떻게 텍스처를 추가 할 수 있는지 말해 주시겠습니까? – Justin

답변

3

귀하의 20 면체를 낮은 폴리 구체로 생각하십시오. 나는 Lamarche의 20 면체가 0,0,0에 중심점을 가지고 있다고 가정합니다. 이 튜토리얼은 directX 용으로 작성되었지만 구형 텍스처 매핑 http://www.mvps.org/directx/articles/spheremap.htm의 일반적인 원리를 설명합니다. 나는 그것을 내 프로젝트에서 사용했고 훌륭하게 작동합니다. 다양한 변형 행렬을 적용하여 3D 객체를 이동합니다. 당신은 여기에서이

glPushMatrix(); 
glTranslatef(); 
draw icosahedron; 
glPopMatrix(); 

뭔가를해야이다 나는 년 반에 대해 쓴

GLfloat *ellipsoidTexCrds; 
Vector3D *ellipsoidNorms; 

int numVerts = *numEllipsoidVerticesHandle; 

ellipsoidTexCrds = calloc(numVerts * 2, sizeof(GLfloat)); 
ellipsoidNorms = *ellipsoidNormalsHandle; 

for(int i = 0, j = 0; i < numVerts * 2; i+=2, j++) 
{ 

    ellipsoidTexCrds[i] = asin(ellipsoidNorms[j].x)/M_PI + 0.5; 
    ellipsoidTexCrds[i+1] = asin(ellipsoidNorms[j].y)/M_PI + 0.5; 
} 

위에서 언급 한 튜토리얼을 기반으로하는 semisphere 모양에 대한 texCoords을 어떻게했는지 내 코드 전,하지만 정점 법선을 정규화 된 정점과 같다고 계산했음을 기억할 수 있습니다. 이것은 (0,0,0)을 중심으로하는 구형을 가질 때 기본적으로 정점은 구의 중심으로부터의 광선을 설명하기 때문에 가능합니다. 그것들을 표준화하면 꼭지점 법선이됩니다.

그리고 iPhone에서 3D 엔진을 사용하려는 경우 Ogre3D를 사용하면 정말 빠릅니다.

희망이 있습니다.

관련 문제