소근소근

[컴퓨터그래픽스/OpenGL] rendering , 그리기 (glVertex , glColor , glBegin ) 본문

ComputerGraphics

[컴퓨터그래픽스/OpenGL] rendering , 그리기 (glVertex , glColor , glBegin )

JJureng 2021. 8. 11. 20:48
728x90
반응형
SMALL

지난 글에서 올렸던 기본 코드에서 render함수 , 즉 본격적으로 화면에 렌더링 하는 함수를 작성해보자

[ComputerGraphics] - [컴퓨터그래픽스/CG/OpenGL] 시작하기 

 

[컴퓨터그래픽스/CG/OpenGL] 시작하기

학교 수업으로 들었던 그래픽스를 정리해보고자 이렇게 블로그에도 올리게 되었다 ㅎㅎ 그래픽스 수업을 듣는 후배들이 구글링 할 때 도움이 되면 좋겠당 그래픽스에선 OpenGL(Open Graphics Library)

steptoprogrammer.tistory.com

 

def render():
	glClear(GL_COLOR_BUFFER_BIT)
    glLoadIdentity()
    glBegin(GL_TRIANGLES)
    glVertex2f(0.0 , 1.0)
    glVertex2f(-1.0,-1.0)
    glVertex2f(1.0,-1.0)
    glEnd()

실행화면

삼각형을 그리는 코드이다.

glBegin(GL_TRAINGLES) 로 삼각형을 그릴 것 이라고 선언하고, 

3개의 vertex를 지정해주고, glEnd()를 호출한다

 

OpenGL에서는 이렇게 도형은 vertex지정으로 그릴 수 있다. 

 

NDC(normalized device coordinate)

위 실행 화면처럼 2d에 그려질 때 범위는 (-1,1) 에서 (1,1) 에 그려지고 이를 NDC라고 한다.

 

primitive types

glBegin(GL_TRAINGLES) 말고 다른 도형을 그리고 싶을 때는 매개변수를 그 도형에 맞게 주면 된다

출처 : https://www.3dgep.com/rendering-primitives-with-opengl/

 

vertex를 지정하면서 색을 줄 수도 있다.

def render():
	glClear(GL_COLOR_BUFFER_BIT)
    glLoadIdentity()
    glBegin(GL_TRIANGLES)
    glColor3f(1.0 , 0.0 , 0.0)
    glVertex2f(0.0 , 1.0)
    glColor3f(0.0 , 1.0 , 0.0)
    glVertex2f(-1.0,-1.0)
    glColor3f(1.0 , 1.0 , 0.0)
    glVertex2f(1.0,-1.0)
    glEnd()

색은 rgb 값으로 준다. 그러므로 위에서부터 빨간색, 파란색 , 노란색이 된다

State Machine

OpenGL은 state machine , 즉 상태를 한번 지정하면 바꾸기 전까지 유지된다.

만약 위의 코드에서 색 지정을 맨 위에서 한번만 빨간색으로 지정하면 그 뒤에 rendering하는 것은 다 빨간색으로 그려질 것이다.

 

함수 형태

glVertex3fv( ... )

3 : number of components , 즉 개수이다. 삼각형의 경우 꼭짓점이 3개이므로 3

f : data type : b(byte) , ub(unsigned byte) , s(short) , i(int) 등 데이터 타입을 지정할 수 있다. 위의 코드의 경우 f(float)이었다

v : vector , 만약 v가 없다면 위의 코드처럼 쓸 수 있다. v가 있다면 벡터 형식으로 써줘야 하는데, 

glVertex2fv([0.0,1.0]) 

glVertex2fv((0.0,1.0))

glVertex2fv(np.array([1.0,0.0])

이런식으로 써주면 된다.

728x90
반응형
LIST