OpenGL 10

[OpenGL] 쉐이더(shader)/ 쉐이딩 구현 하기

쉐이더 란? 쉐이더는 색상, 명암, 색조 등을 조절 해준다는 뜻을 가지고 있다. teapot, wireCube, sphere 등은 쉐이더 구현이 안되므로 직접 model 데이터를 제작해서 rgb 값을 할당 후 쉐이딩을 해줘야 한다. 쉐이딩 기법 순서 1. 삼각형을 그리기 위해서 3개의 vertex를 찍어 준다. 2. vertex 마다 다르게 색상을 준다. 3. GL_FLAT 나 GL_SMOOTH를 사용해서 RGB를 filling 해준다. 4. 결과가 나온다. GL_SMOOTH 로 쉐이딩 해주기 삼각형을 그리고 GL_SMOOTH 모드로 쉐이딩 해주는 코드. #include #include void draw(void) { glClearColor(1.0f, 1.0f, 1.0f, 1.0f); glClear(GL..

OpenGL 2024.02.19

[OpenGL] 줌 인, 줌 아웃 구현하기

사진 찍을 때 확대, 축소 하는 것 처럼 OpenGL도 구현이 가능하다. 줌 아웃 애니메이션 만들기 #include #include void draw(void) { glClearColor(1.0f, 1.0f, 1.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClearColor(1.0, 1.0, 1.0, 1.0); // 배경 색상 glColor4f(0.0, 0.0, 1.0, 1.0); //그림 색상 float ws = 0; for (int i = 0; i < 10; i++) { glColor4f(1.0f, 0.0f, 0.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); printf("%f\n", ws); ws +..

OpenGL 2024.02.18

[OpenGL] 도형 애니메이션 만들기

애니메이션 도형이나 물체가 알아서 움직이는 것을 애니메이션, 비디오라고 불린다. sphere가 움직이는 애니메이션 만들기 sphere가 우측으로 5번, 좌측으로 5번 움직이는 코드다. #include #include void draw(void) { glClearColor(1.0f, 1.0f, 1.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClearColor(1.0, 1.0, 1.0, 1.0); // 배경 색상 glColor4f(0.0, 0.0, 1.0, 1.0); //그림 색상 float Tx; for (int i = 0; i < 10; i++) { glClear(GL_COLOR_BUFFER_BIT); // 그림 초기화 if (i ..

OpenGL 2024.02.17

[OpenGL] 주전자(Teapot) 그리기, 도형 회전 시키기, 도형 이동 시키기

주전자(Teapot) 그리기 glutWireTeapot() 함수를 사용 해 주전자를 그려준다. #include void draw(void) { glClearColor(1.0f, 1.0f, 1.0f, 1.0f);//배경 색 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor4f(0.0f, 0.0f, 1.0f, 1.0f);//사물 색 설정 glutWireTeapot(0.5);//주전자 그리기, 사이즈 glFlush(); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH); glutInitWindow..

OpenGL 2024.02.16

[OpenGL] 점(point) 그리기

점 4개 그리기 glPointSize() 함수로 점의 크기를 선언해 주지 않으면 점이 안 보인다. #include void draw(void) { glClearColor(1.0f, 1.0f, 1.0f, 1.0f); //배경 색상 설정(흰색) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 화면 초기화 glColor3f(0.0f, 1.0f, 0.0f); // glPointSize(10.0f); // 점 사이즈 glBegin(GL_POINTS); // 점 그리기 모드 glVertex2f(-0.5f, 0.5f); glVertex2f(-0.5f, -0.5f); glVertex2f(0.5f, 0.5f); glVertex2f(0.5f, -0.5f); glEnd();..

OpenGL 2024.02.15

[OpenGL] 선 그리기

선을 그리는 방식 중 아래 3가지를 많이 사용한다. GL_LINES GL_LINE_STRIP GL_LINE_LOOP 직접 사용해 보면서 차이점을 알아보면 된다. 선 1개 그리기 GL_LINES로 가로 선 그리기 #include void draw(void) { glClearColor(1.0f, 1.0f, 1.0f, 1.0f); //배경 색상 설정(흰색) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 화면 초기화 glColor3f(1.0f, 0.0f, 0.0f); //빨간색 //glBegin() ~ glEnd() 사이에 코드 구현. glBegin(GL_LINES); //도형 선택. glVertex2f(-0.5f, 0.0f); glVertex2f(0.5f, ..

OpenGL 2024.02.14

[OpenGL] 사각형, 삼각형 그리기

사각형, 삼각형 그리는 방법에 대한 예제다. 사각형 그리기 lgVertex2f 함수로 꼭짓점을 4개 찍어서 사각형을 그렸다. #include void draw(void) { glClearColor(1.0f, 1.0f, 1.0f, 1.0f); //배경 색상 설정(흰색) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 화면 초기화 glColor3f(0.0f, 0.0f, 1.0f); //그림 색상 r,g,b(파란색) //glBegin() ~ glEnd() 사이에 코드 구현. glBegin(GL_POLYGON); //도형 그리. glVertex2f(-0.5f, -0.5f); // 꼭짓점 위치 선택 glVertex2f(0.5f, -0.5f); glVertex2f(..

OpenGL 2024.02.13

[OpenGL] OpenGL(오픈지엘)이란?

OpenGL 무엇이며 왜 나왔을까? OpenGL(Open Graphics Library)은 2차원, 3차원 그래픽스를 그리기 위해 사용되는 라이브러리다. 직접 코딩해서 선 하나만 그릴려고 해도 엄청난 고역인데, 그래픽스 작업을 직접 코드로 구현 하려면 시간이 엄청나게 든다. 그러므로 라이브러리로 제공되는 OpenGL의 API 사용해서 그래픽스 작업을 한다. 과거 OpenGL은 업계에서 표준으로 가장 많이 사용 되었다. 물론 요즘에는 유니티 같은 툴로 그래픽이 필요한 게임, 애니메이션을 만든다. 하지만 여전히 OpenGL을 사용하는 업계가 있다. OpenGL 사용 가능한 언어 C, C++, Java, Visual Basic, JavaScript OpenGL 사용 가능한 운영체제 Mac OS, Unix, L..

OpenGL 2024.02.12

[OpenGL] CG란?

CG 약자 CG는 Computer Graphices(컴퓨터 그래픽스)의 약자다. 컴퓨터로 그리는 모든것이 CG라고 생각하면 된다. 컴퓨터 바탕화면에 있는 아이콘 부터 시작해서 아바타 같은 영화까지 전부 CG 라고 칭할 수 있다. CG의 역사 CG의 약자 중 컴퓨터가 들어가는 만큼 컴퓨터의 발전에 따라 CG도 발전해 나갔다. 1960년대 : 하드웨어, 소프트웨어가 발달 하지 않아 제한적으로 사용 되었다. 1970년대 : CAD에 활용되기 시작했다. 1980년대 : 컴퓨터가 있는 가구가 증가해 사용자를 위한 UI, 아이콘 등 발전했다. 1990년대 : 하드웨어가 발전해 더 빠르고 처리와 더 많은 데이터를 저장했다. 2000년대 : CG가 없는 곳을 찾아보기 힘들어 졌으며 3D CG의 발전 등 활용 분야가 증..

OpenGL 2024.02.11