블로그 (Blog)/개발로그 (Devlogs)
GL_TRIANGLE_STRIP으로 TETRA 그리기
ihmin
2024. 8. 27. 02:00
만약.. 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로 삼각형이 그려집니다.