내가 보려고 만든 블로그

opengl 삼각형, 사각형, 정육면체 index 본문

OpenGL

opengl 삼각형, 사각형, 정육면체 index

hjh1023 2022. 8. 25. 15:58
반응형

**나중에 내가 까먹을까봐 적어둠!!!!
opengl 에서 삼각형을 그릴때 glDrawArrays를 사용하면 index를 신경쓰지않고 그리면 된다.

float triangle[]=    {
        0.0f, 0.0f, 0.0f
        0.5f, 1.0f, 0.0f
        1.0f, 0.0f, 0.0f 
    };


이렇게 데이터를 넣고 glDrawArrays 함수를 사용하면 정삼각형이 그려진다.


0,0을 기준으로 하고 이렇게 그려놓고 점을 찍으면서 버텍스에 데이터를 넣으면 편하다.


그런데 사각형을 그릴때 이렇게 그리려면 삼각형 두개가 필요하다
그냥 생각해도 점네개로 사각형을 그릴수 있는것같은데
그래서 인덱스를 써서 겹치는 부분을 써준다

 

GLuint indices[] =
{
    0, 1, 2,
    1, 3, 2
};

인덱스는 이렇게 해준다. 그리고 인덱스를 포함하려면 bind할때 삼각형 그리는 vbo 말고 새롭게 선언해준다.
unsigned int EBO;

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);

이렇게 인덱스버퍼데이터를 넣는다.
그러면 점 4개로 사각형을 그릴수 있다.

float vertices[] = {
     0.0f,  0.0f, 0.0f,  //bottom left
     1.0f,  0.0f, 0.0f,  // bottom right
     0.0f,  1.0f, 0.0f,  // top left
     1.0f,  1.0f, 0.0f   // top right
};




정육면체

 

 

float vertices[] = {
//front
     0.0f,  0.0f, 0.0f,  //bottom left
     1.0f,  0.0f, 0.0f,  // bottom right
     0.0f,  1.0f, 0.0f,  // top left
     1.0f,  1.0f, 0.0f   // top right
//back
     0.0f,  0.0f, -1.0f,  //bottom left
     1.0f,  0.0f, -1.0f,  // bottom right
     0.0f,  1.0f, -1.0f,  // top left
     1.0f,  1.0f, -1.0f   // top right


};


인덱스는 이렇게 나온다.

GLuint indices={
    0,1,2,1,3,2, //front
    1,5,3,3,7,5, //오른쪽 옆면
    5,4,6,6,7,5, //back
    4,0,2,2,6,4, //왼쪽 옆면
    2,3,6,6,7,3, //윗면
    0,1,5,5,4,0  //아랫면
};


처음에 정육면체를 그릴때 개념이해도 하지않고 그리다보니깐 인덱스가 맞는지 아닌지도 모르고 구글링해서 찾았다가 넣어보고 잘 안그려지면 도대체 뭐야;;; 어떻게 그리라고 했었다. 그래서 새롭게 정육면체를 그릴때는 삼각형 하나하나 그려가면서 테스트 했다. 종이에 다 그려보고 컴퓨터에서 0,1,2라고 하고 직삼각형 나오는지 확인하고 1,3,2그려서 예상하는대로 나오는지 확인하고 이렇게 그렸다. 여섯면 다 따로따로 확인해가면서 제대로 그려지는지 봤다.
약간 뻘짓일수있지만 이렇게 한면 확인해놓으면 확인했다는 것만 기억하면 나중에 뻘짓안해도 되고 어쨌든 공부도 많이 되었다.

반응형

'OpenGL' 카테고리의 다른 글

lua 설치 (ubuntu)  (0) 2022.12.23
assimp 설치(ubuntu)  (0) 2022.09.15
opengl 참고사이트  (0) 2022.08.24
우분투환경에서 opengl 설치  (0) 2022.08.04
openGL 공부  (0) 2022.07.01