다양한 방법으로 정점을 잇는 도형을 그려봅시다.
glVertex{234}{~~}[v] (정점 위치 정보);
//
// 도형그리기.cpp
// OpenGlTest
//
// Created by 심주흔 on 2024/03/26.
//
// 맥 환경에서 실행가능합니다.
#define GL_SILENCE_DEPRECATION //버전 오류 해결
#include <iostream>
#include <OpenGL/gl.h>
#include <OpenGl/glu.h>
#include <GLUT/glut.h>
//점들의 정점 위치를 먼저 설정해줌.
float v1[3] = {75.0, 400.0, 0.0};
float v2[3] = {150.0,100.0,0.0};
float v3[3] = {255.0, 400.0,0.0};
float v4[3] = { 300.0, 100.0,0.0 };
float v5[3] = {375.0,400.0,0.0};
float v6[3] = {450.0,100.0,0.0};
void init(void) {
glClearColor(0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, 500.0, 0.0, 500.0);
}
// 점을 그리는 코드
void draw_points() {
glColor3f(1.0, 0.0, 0.0);
glPointSize(4);
glBegin(GL_POINTS); //glBegin 과 함께 도형 그리는 설정
glVertex3fv(v1);
glVertex3fv(v2);
glVertex3fv(v3);
glVertex3fv(v4);
glVertex3fv(v5);
glVertex3fv(v6);
glEnd();
}
// 선을 그리는 코드
void draw_lines() {
glColor3f(0.0, 1.0, 0.0);
glLineWidth(1);
glBegin(GL_LINES);
glVertex3fv(v1);
glVertex3fv(v2);
glVertex3fv(v3);
glVertex3fv(v4);
glVertex3fv(v5);
glVertex3fv(v6);
glEnd();
}
// 삼각형 fan 을 그리는 코드
void draw_trianle_fan() {
glColor3f(0.0, 1.0, 0.0);
glBegin(GL_TRIANGLE_FAN);
glVertex3fv(v1);
glVertex3fv(v2);
glVertex3fv(v3);
glVertex3fv(v4);
glVertex3fv(v5);
glVertex3fv(v6);
glEnd();
}
// 사각형을 그리는 코드
void draw_quads() {
glColor3f(0.0, 1.0, 0.0);
glBegin(GL_QUADS);
glVertex3fv(v1);
glVertex3fv(v2);
glVertex3fv(v4);
glVertex3fv(v3);
glEnd();
}
//사각형 strip 을 그리는 코드
void draw_quad_strip() {
glColor3f(0.0, 1.0, 0.0);
glBegin(GL_QUAD_STRIP);
glVertex3fv(v1);
glVertex3fv(v2);
glVertex3fv(v3);
glVertex3fv(v4);
glVertex3fv(v5);
glVertex3fv(v6);
glEnd();
}
// 다각형을 그리는 코드
void draw_polygon() {
glColor3f(0.0, 1.0, 0.0);
glBegin(GL_POLYGON);
glVertex3fv(v1);
glVertex3fv(v2);
glVertex3fv(v4);
glVertex3fv(v5);
glVertex3fv(v3);
glEnd();
}
void display(void) {
glClear(GL_COLOR_BUFFER_BIT);
draw_points();
//draw_lines();
//draw_points();
//draw_quad_strip();
//draw_trianle_fan();
//draw_quads();
//draw_quad_strip();
//draw_polygon();
glFlush();
}
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500,500);
glutInitWindowPosition(300, 300);
glutCreateWindow("My First GL program");
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
연속 된 정점들을 시작점을 기준으로 연결하여 삼각형들을 그려나감. v0, v1, v2, v3, v4 로 구성 된 정점들에 대해서 v0을 기준으로 두개의 정점으로 구성 된 도형을 그림.
연속 된 정점들을 연결하여 사각형들을 그려나감 v0, v1, v2, v3, v4 ,v5, v6, v7 로 구성된 정점들에 대해서 아래의 그림과 같은 도형을 그림.
연속 된 정점들을 시작점을 기준으로 순서적으로 연결하여 다각형을 그림
OpenGL의 polygon
의 edge 들은 서로 교차 불가하여 Polygon 들은 convex
이어야 함.
Convex
: 어떤 두 정점들이 polygon 의 안에 있으면 두 정점을 잇는 직선 역시 polygon 의 안에 있어야 함.