반응형
쉐이더 란?
쉐이더는 색상, 명암, 색조 등을 조절 해준다는 뜻을 가지고 있다.
teapot, wireCube, sphere 등은 쉐이더 구현이 안되므로 직접 model 데이터를 제작해서 rgb 값을 할당 후 쉐이딩을 해줘야 한다.
쉐이딩 기법 순서
1. 삼각형을 그리기 위해서 3개의 vertex를 찍어 준다.
2. vertex 마다 다르게 색상을 준다.
3. GL_FLAT 나 GL_SMOOTH를 사용해서 RGB를 filling 해준다.
4. 결과가 나온다.
GL_SMOOTH 로 쉐이딩 해주기
삼각형을 그리고 GL_SMOOTH 모드로 쉐이딩 해주는 코드.
#include <GL/freeglut.h>
#include <stdio.h>
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); // 배경 색상
glFrustum(-1, 1, -1, 1, 1, 100);
glShadeModel(GL_SMOOTH); // GL_SMOOTH or GL_FLAT
glBegin(GL_POLYGON);
glColor4f(1.0f, 0.0f, 0.0f, 1.0f);//red
glVertex3f(0.0, 0.5, -1.0);
glColor4f(0.0f, 1.0f, 0.0f, 1.0f);//green
glVertex3f(-0.5, -0.5, -1.0);
glColor4f(0.0f, 0.0f, 1.0f, 1.0f);//blue
glVertex3f(0.5, -0.5, -1.0);
glEnd();
glFlush();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH);
glutInitWindowPosition(800, 200);
glutCreateWindow("Example");
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glutDisplayFunc(draw);
glutMainLoop();
}
실행 결과
GL_FLAT 으로 쉐이딩 해주기
GL_FLAT으로 쉐이딩 하는 코드
#include <GL/freeglut.h>
#include <stdio.h>
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); // 배경 색상
glFrustum(-1, 1, -1, 1, 1, 100);
glShadeModel(GL_FLAT); // GL_SMOOTH or GL_FLAT
glBegin(GL_POLYGON);
glColor4f(1.0f, 0.0f, 0.0f, 1.0f);//red 가장 먼저인 레드가 쉐이딩 된다.
glVertex3f(0.0, 0.5, -1.0);
glColor4f(0.0f, 1.0f, 0.0f, 1.0f);//green
glVertex3f(-0.5, -0.5, -1.0);
glColor4f(0.0f, 0.0f, 1.0f, 1.0f);//blue
glVertex3f(0.5, -0.5, -1.0);
glEnd();
glFlush();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH);
glutInitWindowPosition(800, 200);
glutCreateWindow("Example");
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glutDisplayFunc(draw);
glutMainLoop();
}
실행 결과
제일 먼저 컬러를 입힌 red로 쉐이딩이 된다.
GL_SMOOTH와 차이점이다.
반응형
'OpenGL' 카테고리의 다른 글
[OpenGL] 원 그리기 (1) | 2024.02.20 |
---|---|
[OpenGL] 줌 인, 줌 아웃 구현하기 (0) | 2024.02.18 |
[OpenGL] 도형 애니메이션 만들기 (1) | 2024.02.17 |
[OpenGL] 주전자(Teapot) 그리기, 도형 회전 시키기, 도형 이동 시키기 (0) | 2024.02.16 |
[OpenGL] 점(point) 그리기 (0) | 2024.02.15 |