본문으로 바로가기

만약.. GL_TRIANGLE로 TETRA를 그리면.. 각 면당 3개의 인덱스가 필요하고 4면이니 총 12개의 인덱스가 필요함.. 하지만.. GL_TRIANGLE_STRIP으로 그리게 되면.. 총 6개의 인덱스로 그릴 수 있어 성능면에서 이득임.

 const GLfloat tetrahedron[4][3] = {
    {  1.0,  1.0,  1.0  },   /* index 0 */
    { -1.0, -1.0,  1.0  },   /* index 1 */
    { -1.0,  1.0, -1.0  },   /* index 2 */
    {  1.0, -1.0, -1.0  } }; /* index 3 */

    /* Color information for each vertex */
    const GLfloat colors[4][3] = {
    {  1.0,  0.0,  0.0  },   /* red */
    {  0.0,  1.0,  0.0  },   /* green */
    {  0.0,  0.0,  1.0  },   /* blue */
    {  1.0,  1.0,  1.0  } }; /* white */

    const GLubyte tetraindicies[6] = { 0, 1, 2, 3, 0, 1 };

 

구현은 아래를 참고할것.

https://www.khronos.org/opengl/wiki/Tutorial4:_Using_Indices_and_Geometry_Shaders_(C_/SDL)

Tutorial4_ Using Indices and Geometry Shaders (C _SDL) - OpenGL Wiki.pdf
0.20MB

 

아래는 참고용.

GL_TRIANGLES 는 한 삼각형을 그릴 때마다 3개의 정점이 필요합니다. 따라서 2개의 삼각형을 그리면 6개의 정점이 필요합니다.

GL_TRIANGLE_STRIP은 첫 삼각형을 그릴 때는 3개의 정점이 필요하지만 다음 삼각형을 그릴 때에는 한 개의 정점만 필요합니다. 이전 삼각형의 마지막 정점 두 개를 재 사용하기 때문입니다. 예를 들어 v1, v2, v3 로 삼각형을 그린 후 새로운 정점 v4를 추가하면 v2, v3, v4 로 삼각형이 그려집니다.

GL_TRIANGLE_FAN은 GL_TRIANGLE_STRIP과 비슷하지만 이전 삼각형의 두 점을 재 사용하는 것이 아니라 항상 첫 삼각형의 시작 정점 한 개와 이전 삼각형의 마지막 정점을 재사용합니다. 예를 들어 v1, v2, v3 로 삼각형을 그린 후 새로운 정점 v4를 추가하면 v1, v3, v4로 삼각형이 그려집니다. 여기에 다시 v5를 추가하면 v1, v4, v5로 삼각형이 그려집니다.