2009-06-11 2 views
3

저는 삼각형과 쿼드 중 하나가 될 수있는 다각형을 가진 메쉬 데이터 구조를 가지고 있습니다. OpenGL을 사용하여 이것을 그리는 가장 빠른 방법은 무엇입니까?OpenGL : 가장 빠른 방법으로 삼각형과 쿼드의 혼합을 그립니까?

느린 방법은 구조 및 각 다각형에 대해 glBegin() .. glEnd()GL_QUADS 또는 GL_TRIANGLES으로 적절하게 반복하는 것입니다. 모든 각각의 다각형에 대해 glBegin() .. glEnd()을 수행하는 것을 피하고 싶습니다.

또 다른 옵션은 두 구조, 삼각형을 포함하는 하나와 쿼드을 포함하는 하나에 구조를 분할하고 개별적으로 그들을 이동하는 것입니다. 이것은 내가 하나의 구조로 모든 것을 지키고 싶기 때문에 피하고 싶습니다.

불행히도 쿼드를 삼각형으로 삼각형 화하는 것은 현재로서는 선택할 수 없습니다.

좋은 해결책이 있습니까?

+0

"모든 다각형"을 사용하면 모든 삼각형 \ 쿼드를 의미합니까, 아니면 삼각형과 쿼드로 구성된 모든 메쉬를 의미합니까? –

답변

3

당신은이 개 indice 테이블, 삼각형을위한 쿼드 하나 하나를 만든 다음 기록 할 수있는 모든 삼각형 다음에 쿼드 (또는 역). 인덱스 배열을 사용하여 그리려면 glVertexPointerglEnableClientState 집합으로 glDrawElements을 사용하여 작동시킵니다. 당신이 정말로 속도를 얻을하려는 경우

또한, 당신은 VBO에 정점을 모두 배치하고 indice 수 있습니다. 이렇게하면 GPU의 RAM에 모든 정점과 인덱스를 얻을 수 있습니다.

+1

결과 : OpenGL을 사용하면 glXXX 호출 수가 줄어들어 일반적으로 속도가 향상됩니다. 가능한 경우 _STRIP 드로잉 모드도 사용해야합니다. – Dolphin

3

항상 삼각형으로 변환 할 수 있습니다.

glBegin(GL_TRIANGLES); 
for each (object *a in objectList) 
    if (a->type == TRIANGLE) 
    glVertex3fv(a->vertices); 
    if (a->type == QUAD) 
    { 
    glVertex3f(a->vertices[0]); 
    glVertex3f(a->vertices[1]); 
    glVertex3f(a->vertices[2]); 

    glVertex3f(a->vertices[2]); 
    glVertex3f(a->vertices[1]); 
    glVertex3f(a->vertices[3]); 
    } 
glEnd(); 

당신은 그들에게 같은 방법으로 (시계 방향 또는 반 시계 방향)을 지향 유지에주의해야 할 것이다, 그러나 그것은 작동합니다 :

는 기본적으로 의사 코드는 다음과 같이 보일 것입니다!

+0

이 문제는 glPolygonMode (GL_LINE)로 그리는 경우 대각선이 생길 수 있다는 것입니다. 이 문제를 피하는 방법을 한 번 알고 있다고 생각합니다. – shoosh

+0

내부 가장자리를 그리지 않는 기술이 있지만 마음이 완전히 빠져 나옵니다 ... –

+3

'glBegin()'과'glEnd()'를 사용하면 this is * not * 가장 빠른 방법이 될 것입니다. –

1

는 지금까지 glPolygonMode (GL_LINE) 및 분해 GL_QUADS이가는대로, glEdgeFlagPointer()는 당신이 찾고있는 기능이 있어야한다. 주변 세그먼트의 경우 GL_TRUE, 쿼드 대각선의 경우 GL_FALSE입니다.

는 glEnableClientState (GL_EDGE_FLAG_ARRAY)하는 것을 잊지 마십시오.

관련 문제