2012-01-28 4 views
0

OpenGL을 사용하여 WRL (VRML) 파일에 설명 된 객체를 모델링하려고합니다.glDrawElements를 사용하여 WRL (VRML) 파일에서 객체 그리기

나는 파일을 파싱하는 것에 정말로 관심이 없다. 나는 그 부분이 상당히 똑바로 될 것이라고 생각한다. 이 단계에서는 버텍스 배열과 인덱스 배열을 하드 코딩하여 WRL 입력 파일을 일반화 할 수있는 방법을 잘 이해할 수 있도록 노력하고 있습니다.

먼저 기본 상자 (직사각형 프리즘) 모델을 시도하고 있습니다.

GLfloat vertices[] = { 
    -0.200000, -0.025000, -0.050000, 
    -0.200000, -0.025000, 0.050000, 
    -0.200000, 0.025000, -0.050000, 
    -0.200000, 0.025000, 0.050000, 
     0.200000, -0.025000, -0.050000, 
     0.200000, -0.025000, 0.050000, 
     0.200000, 0.025000, -0.050000, 
     0.200000, 0.025000, 0.050000 
}; 

이 인덱스 배열 : 다음 WRL 파일 Coordinate3 {point []}IndexedFaceSet {coordIndex []}에서 직접 온

GLubyte indices[] = { 
    7, 3, 5, -1, 5, 3, 1, -1, 
    6, 2, 7, -1, 7, 2, 3, -1, 
    4, 0, 6, -1, 6, 0, 2, -1, 
    5, 1, 4, -1, 4, 1, 0, -1, 
    2, 0, 3, -1, 3, 0, 1, -1, 
    4, 6, 5, -1, 5, 6, 7, -1 
}; 

나는 현재이 정점 배열을 가지고있다.

나는 다음 호출하여 정점 배열 기능을 사용 :

glEnableClientState(GL_VERTEX_ARRAY);

및 설정 한 glVertexPointer :

glVertexPointer(3, GL_FLOAT, 0, vertices);

마침내 나는 glDrawElements이 상자를 그립니다 함수를 사용하여 :

glDrawElements(GL_POLYGON, 24, GL_UNSIGNED_BYTE, indices);

다음 정점 배열 기능을 비활성화 :

glDisableClientState(GL_VERTEX_ARRAY);

그래서이 후, 나는 상자가 그려 기대, 나는 glDrawElements(GL_POINTS, 24, GL_UNSIGNED_BYTE, indices);를 사용할 때 그것은에 epected로 8 개 정점을 보여주고 무엇을 올바른 경우 꼭지점을 선들과 합치면 예상되는 상자를 나타낼 것입니다 (중간에 점이있는 것을 제외하고는 26을 카운트 인수로 사용하면 중간 점이 사라집니다)

그러나 GL_POLYGON 또는 GL_LINE_LOOP를 사용할 때 glDrawElements의 첫 번째 인수에서 쓰레기가 발생합니다. 8 개의 꼭지점이 분명히 있지만, 그들은 정말로 이상한 방법으로 결합되었습니다.

저는 지금 쯤은 혼란 스러워요. 그리고 제가 제대로하고 있는지 확신 할 수 없습니다. 아마도 누군가 나를 올바른 방향으로 이끌 수 있을까요?

답변

0

직사각형 프리즘은 GL_POLYGON이 아닙니다. 그 단어의 단수 형태 인 다각형에 주목하십시오. 과 마찬가지로 하나의 다각형. 직각 프리즘은 하나가 아닌 많은 폴리곤으로 구성됩니다.

원하는 것은 얼마입니까? GL_TRIANGLES을 그립니다. 상자를 구성하는 각각의 삼각형을 나타내는 인덱스 목록을 만듭니다. 즉, 각 상자면이 두 개의 삼각형으로 이루어져 있으므로 합계 12 개의 삼각형이 필요합니다. 그것은 36 개의 지표를 의미합니다.

+0

감사합니다. 더 복잡한 3D 도형에도 사용할 수 있습니까? 아니면 더 좋은 방법으로 렌더링 할 수 있습니까? – jacobappleton

+0

그것은 모든 것이 어떻게 렌더링되는지 더 많거나 적습니다. 'GL_TRIANGLE_STRIP'을 사용할 수는 있지만, 설정 작업이 필요합니다. 인덱스 목록을 올바르게 작성해야합니다. –

관련 문제