기타/컴퓨터 그래픽스 & OpenGL (11) 썸네일형 리스트형 [OpenGL] 평행 투상과 원근 투상 / 2022.10.24 1. 평행 투상 - 시점이 물체로부터 무한대의 거리에 있다고 간주하여 투상선을 나란히 가져가는 방법. - 원래 물체의 평행선은 투상 후에도 평행 - 시점으로 부터의 거리와 무관하게 같은 길이의 물체는 같은 길이로 투상됨 - 평행 투상은 정사 투상, 축측 투상, 경사 투상으로 나뉨 2. 원근 투상 - 시점이 물체로부터 유한한 거리에 있다고 간주 - 투상선이 시점에서 출발하여 방사선 모양으로 퍼져감 - 실제로 카메라나 사람의 눈이 물체를 포착하는 방식 - 동일한 물체라도 시점으로부터 멀면 작게 보이고, 가까우면 크게 보인다. (원근감) 3. 예제를 통해 알아보자 #include #include #include int Width, Height; void Init() { glClearColor(1.0, 1.0,.. [OpenGL] 타이머 콜백 / 2022.10.24 * 출처 : OpenGL로 배우는 3차원 컴퓨터 그래픽스, 한빛아카데미 일정한 시간 간격이 지나면 발생하는 이벤트가 타이머 이벤트이며, 타이머 콜백은 이 이벤트에 대응하는 콜백 함수다. void glutTimerFunc(unsigned int msecs, void(*func)(int value), int value); - unsigned int msecs : 얼마 후에 이벤트를 발생시킬 것인지, msec 단위 - void(*func)(int value) : 타이머 이벤트 발생 시에 호출되어야 할 함수명 - int value : 이벤트 발생 시에 콜백 함수에 넘겨줄 파라미터 예제를 통해 알아보자. #include #include #include #include unsigned char PALETTE[16].. [OpenGL] 아이들 콜백 / 2022.10.23 * 출처 : OpenGL로 배우는 3차원 컴퓨터 그래픽스, 한빛아카데미 GLUT은 매우 짧은 시간 간격으로 이벤트 루프를 돌기 때문에 어떤 경우에는 큐에 새로운 이벤트가 아직 하나도 안 들어가 있는 때도 있다. 아이들 콜백을 정의하면 이 경우에도 콜백 함수를 만들어 필요한 일을 할 수 있다. 예제를 통해서 알아보자. #include #include #include GLfloat Delta = 0.0; void MyDisplay() { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POLYGON); glColor3f(0.0, 0.5, 0.8); glVertex3f(-1.0 + Delta, -0.5, 0.0); glVertex3f(0.0 + Delta, -0.5, 0.0); glV.. [OpenGL] 메뉴 콜백 / 2022.10.23 * 출처 : OpenGL로 배우는 3차원 컴퓨터 그래픽스, 한빛아카데미 1. 콜백 함수를 사용하여 메뉴를 만드는 방법을 알아보자. #include #include #include GLboolean IsSphere = true; void MyDisplay() { glClear(GL_COLOR_BUFFER_BIT); glColor3f(0.5, 0.0, 0.5); if (IsSphere) // IsSphere가 true라면 glutWireSphere(0.2, 15, 15); //원구를 그림 else // false라면 glutWireTorus(0.1, 0.3, 40, 20); // 원환체를 그림 glFlush(); } void MyMainMenu(int entryID) { if (entryID == 1) Is.. [OpenGL] 마우스 콜백 / 2022.10.23 * 출처 : OpenGL로 배우는 3차원 컴퓨터 그래픽스, 한빛아카데미 마우스 이벤트는 마우스 버튼을 누를 때 또는 마우스가 움직일 때 발생한다. 예제를 통해서 알아보자. 1. 마우스 움직임 따라 사각형 그리기 #include #include #include // 눌러진 위치의 좌표 & 현재의 마우스 위치 좌표 // 마우스 콜백 함수와 디스플레이 콜백 함수 사이의 변수 공유를 위해 전역변수로 선언 GLint TopLeftX, TopLeftY, BottomRightX, BottomRightY; void MyDisplay() { glViewport(0, 0, 300, 300); glClear(GL_COLOR_BUFFER_BIT); glColor3f(0.5, 0.5, 0.5); glBegin(GL_POLYGO.. [OpenGL] 리셰이프 콜백 / 2022.10.23 * 출처 : OpenGL로 배우는 3차원 컴퓨터 그래픽스, 한빛아카데미 리셰이프 이벤트는 1. 처음 윈도우를 열 때 2. 윈도우 위치를 옮길 때 3. 윈도우 크기를 조절할 때 발생한다 아래 코드는 원래 뷰 포트의 중심과 변경된 뷰 포트의 중심을 일치시키면서도 물체 크기와 종횡비를 그대로 유지하는 방법이다. 1. 흰색 바탕에 회색 사각형을 그리는 프로그램을 통해 설명해보자 #include #include #include void MyDisplay() { glClear(GL_COLOR_BUFFER_BIT); // 컬러 버퍼에 초기화 색을 가함 glColor3f(0.5, 0.5, 0.5); //회색 glBegin(GL_POLYGON); //사각형 glVertex3f(-0.5, -0.5, 0.0); glVert.. [OpenGL] 백색 사각형 그리기 / 2022.10.22 * 출처 : OpenGL로 배우는 3차원 컴퓨터 그래픽스, 한빛아카데미 1. 흑색 바탕에 백색 사각형 그리기 #include #include #include void MyDisplay() { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POLYGON); // 4개의 정점으로 이루어진 다각형 glVertex3f(-0.5, -0.5, 0.0); glVertex3f(0.5, -0.5, 0.0); glVertex3f(0.5, 0.5, 0.0); glVertex3f(-0.5, 0.5, 0.0); glEnd(); glFlush(); // 현재까지 쌓인 명령어 모두를 프로세서에 전달 } int main() { glutCreateWindow("OpenGL Drawing Example"); .. 벡터 그래픽 / 2022.10.22 * 출처 : OpenGL로 배우는 3차원 컴퓨터 그래픽스, 한빛아카데미 1. 벡터 그래픽 장치 - 벡터 그래픽 장치 (Vector Display, Calligraphic Display, Stroke Display, Random Display) - 화소 개념이 없음 -> 해상도 무한대 -> 에일리어싱이 일어나지 않음 - 화면 전체에 인이 칠해져 있어 래스터 장치처럼 화면 면적 단위로 밝혀지는 것이 아니라 전자총이 닿는 부분마다 밝혀지게 됨 - 벡터 그래픽 장치는 화소 개념이 없기 때문에 프레임 버퍼를 사용하지 않고 디스플레이 리스트라는 메모리에 해당 물체를 그리기 위한 명령어를 저장함 -> 용량 면에서 훨씬 유리하다 2. 래스터 그래픽 대 벡터 그래픽 래스터 그래픽 : https://cow-kite24.t.. 이전 1 2 다음