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 개의 꼭지점이 분명히 있지만, 그들은 정말로 이상한 방법으로 결합되었습니다.
저는 지금 쯤은 혼란 스러워요. 그리고 제가 제대로하고 있는지 확신 할 수 없습니다. 아마도 누군가 나를 올바른 방향으로 이끌 수 있을까요?
감사합니다. 더 복잡한 3D 도형에도 사용할 수 있습니까? 아니면 더 좋은 방법으로 렌더링 할 수 있습니까? – jacobappleton
그것은 모든 것이 어떻게 렌더링되는지 더 많거나 적습니다. 'GL_TRIANGLE_STRIP'을 사용할 수는 있지만, 설정 작업이 필요합니다. 인덱스 목록을 올바르게 작성해야합니다. –