2025/OpenGL

OpenGL 기초 (1)

rimugiri 2025. 3. 23. 04:01
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