728x90
삼각형 그리기 부터 시작하여 원 표현, 색상 구현등 실험을 해보았는데 directX보다 사전 준비해야되는 것들이 적어 가볍게 공부하기 좋은거 같다
#include <windows.h>
#include <glut.h>
#include <math.h>
#define Pi 3.14159265358979323846
void reshape(int w, int h)
{
// 기존 행렬 초기화
glLoadIdentity();
// 창의 크기를 뷰포트 영역으로 설정
glViewport(0, 0, w, h);
// 월드 좌표계 설정 왼쪽 아래가 0,0 오른쪽 위가 100,100
// 구버전 OpenGL
gluOrtho2D(0.0, 50.0, 0.0, 50.0);
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 0.0, 0.0);
// 사각형 그리기
glRectf(30.0, 30.0, 50.0, 50.0);
// 더블 버퍼링
glutSwapBuffers();
}
void myDisPlay() {
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
glutSolidTeapot(0.5);
glColor3f(1.0, 0.0, 0.0);
glutWireTeapot(0.5);
// 싱글 버퍼링
glFlush();
}
void Circle()
{
GLfloat size[2]; // 포인트 크기 저장 변수
GLfloat angle; // 각도 변수
glClear(GL_COLOR_BUFFER_BIT); // 화면을 초기화 (배경색으로 채움)
glColor3f(1.0, 1.0, 1.0); // 점 색상을 흰색으로 설정
glGetFloatv(GL_POINT_SIZE_RANGE, size); // 시스템에서 지원하는 포인트 크기 범위를 가져옴
glPointSize(size[0]); // 가장 작은 크기의 점을 사용
glBegin(GL_POINTS); // 점을 그리는 모드 시작
for (angle = 0.0; angle <= 2.0 * Pi; angle += Pi / 30.0) // 360도를 30개의 점으로 나눠서 그리기
glVertex2f(0.5 * cos(angle), 0.5 * sin(angle)); // 원의 점 좌표 계산 (반지름 0.5)
glEnd(); // 점 그리기 종료
glFlush(); // OpenGL 명령을 실행하도록 지시 (싱글 버퍼링이므로 필요)
}
void GradationTriangle()
{
glClear(GL_COLOR_BUFFER_BIT);
//glShadeModel(GL_FLAT); //제일 마지막 점의 색상으로 채움
glShadeModel(GL_SMOOTH); //그라데이션으로 채움
glBegin(GL_TRIANGLES);
glColor3f(1.0, 0.0, 0.0);
glVertex2f(0.0, 0.0);
glColor3f(0.0, 1.0, 0.0);
glVertex2f(0.5, 0.0);
glColor3f(0.0, 0.0, 1.0);
glVertex2f(0.25, 0.5);
glEnd();
glFlush();
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
//싱글 버퍼링, RGB 컬러 모드로 윈도우 생성
//glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
// 윈도우 생성
glutInitWindowSize(500, 500);
glutCreateWindow("example");
// 배경색 설정
glClearColor(0.0, 0.0, 0.0, 1.0);
// 움직이다 놨을때 불리는 함수
//glutReshapeFunc(reshape);
// 화면이 가려졌다가 다시 나올때 불리는 함수
glutDisplayFunc(GradationTriangle);
glutMainLoop();
return 0;
}
728x90