2013-10-15 3 views
0

OpenGL에서 큐브를 만들고 있습니다. 일반적으로 다음과 같은 인스턴트 코드를 사용했습니다.OpenGL : 법선과 텍스처 좌표를 큐브에 설정하는 방법

glNormal3f(0.0,1.0,0.0); 
glTexCoord2f(0.0f,0.0f); 
glVertex3f(0.5f, 0.5f,-0.5f); 
... 

약간 비현실적입니다. 지금은 큐브를 처리 할 수 ​​vertices[]indices[]glDrawElements을 사용하고 있습니다 :

static float vertices[] = 
     { 
    -0.5000, -0.5000, 0.5000, 
    0.5000, -0.5000, 0.5000, 
    -0.5000, 0.5000, 0.5000, 
    -0.5000, 0.5000, 0.5000, 
    0.5000, -0.5000, 0.5000, 
    0.5000, 0.5000, 0.5000, 

    -0.5000, -0.5000, -0.5000, 
    -0.5000, 0.5000, -0.5000, 
    0.5000, -0.5000, -0.5000, 
    0.5000, -0.5000, -0.5000, 
    -0.5000, 0.5000, -0.5000, 
    0.5000, 0.5000, -0.5000, 

    0.5000, -0.5000, -0.5000, 
    0.5000, 0.5000, -0.5000, 
    0.5000, -0.5000, 0.5000, 
    0.5000, -0.5000, 0.5000, 
    0.5000, 0.5000, -0.5000, 
    0.5000, 0.5000, 0.5000, 

    -0.5000, -0.5000, -0.5000, 
    -0.5000, -0.5000, 0.5000, 
    -0.5000, 0.5000, -0.5000, 
    -0.5000, 0.5000, -0.5000, 
    -0.5000, -0.5000, 0.5000, 
    -0.5000, 0.5000, 0.5000, 

    -0.5000, -0.5000, -0.5000, 
    0.5000, -0.5000, -0.5000, 
    -0.5000, -0.5000, 0.5000, 
    -0.5000, -0.5000, 0.5000, 
    0.5000, -0.5000, -0.5000, 
    0.5000, -0.5000, 0.5000, 

    -0.5000, 0.5000, -0.5000, 
    -0.5000, 0.5000, 0.5000, 
    0.5000, 0.5000, -0.5000, 
    0.5000, 0.5000, -0.5000, 
    -0.5000, 0.5000, 0.5000, 
    0.5000, 0.5000, 0.5000, 

}; 

static byte indices[] = 
{ 
0, 1, 2, 
3, 4, 5, 

18, 19, 20, 
21, 22, 23, 

12, 13, 14, 
15, 16, 17, 

6, 7, 8, 
9, 10, 11, 

30, 31, 32, 
33, 34, 35, 

24, 25, 26, 
27, 28, 29 
}; 

문제는 나는 장면이 올바른 것, 그래서 제대로 법선 및 텍스처 좌표를 설정하는 방법을 모르는 것입니다. 주어진 데이터로 어떻게 계산합니까?

static float normals[] = 
{ 
    -1.0000, -1.0000, 1.0000, 
    1.0000, -1.0000, 1.0000, 
    -1.0000, 1.0000, 1.0000, 
    -1.0000, 1.0000, 1.0000, 
    1.0000, -1.0000, 1.0000, 
    1.0000, 1.0000, 1.0000, 
}; 

static float texcoords[] = 
{ 
    1.0000, 0.0000, 0.0000, 
    1.0000, 1.0000, 0.0000, 
    0.0000, 1.0000, 0.0000, 
    0.0000, 0.0000, 0.0000 
}; 

하지만이에서 얻을 수 있었다 모든 깨진 조명과 텍스처 못생긴 지저분한 장면이었다

glNormalPointer(GL_FLOAT, 0, normals); 
glTexCoordPointer(2, GL_FLOAT, 0, texcoords); 

이 데이터 : 내가 함께 그렇게 노력했다.

답변

1

수, 텍스트 코드 및 법선 수는 이어야합니다. indices 배열의 색인은 3 중항 (pos, texcoord, normal)을 가리 킵니다. 따라서 일부 문자 코드 또는 법선을 복제해야합니다. (이 인덱스를 사용하지 않습니다하지만)

https://en.wikibooks.org/wiki/OpenGL_Programming/Modern_OpenGL_Tutorial_05

당신은 : http://www.opengl-tutorial.org/beginners-tutorials/tutorial-4-a-colored-cube/

+0

이 감사에 기반 할 수 있습니다. 모든 정점에 텍스트 코드와 법선을 추가했을 때 제대로 작동했습니다. 또한 나는'texcoords []에 너무 많은 데이터를 가지고 있는데,'glTexCoordPointer (2, GL_FLOAT, 0, texcoords);에서 "2 좌표"때문에 3 행이 아닌 2 행이어야한다. – NightKn8