전체 글 216

GLUT 콜백 함수 정리

🪟 GLUT 윈도우 콜백 함수 완전 정복 (기초 개념부터 설명!)OpenGL을 배우다 보면 콜백 함수(callback function)라는 개념이 자주 나와요.특히 GLUT 라이브러리를 사용할 때는, 콜백 함수를 등록해서 윈도우 이벤트에 반응하는 것이 기본 중의 기본이에요!그런데 처음 프로그래밍을 배우는 입장에서는 “콜백 함수가 뭔데?”,“내가 직접 호출하지도 않는 함수를 왜 등록해?” 같은 궁금증이 들 수 있어요.📣 콜백 함수란 무엇인가요?콜백 함수는 특정 이벤트가 발생했을 때, 시스템이 자동으로 호출해주는 함수예요.우리가 직접 호출하지 않아도, GLUT가 알아서 적절한 타이밍에 호출해줘요.🎯 쉬운 비유: 음식 배달 앱음식 배달 앱에서 주소를 등록하면, 배달원이 도착했을 때 그 주소로 자동으로 찾..

OpenGL에서 기하 변환의 처리

🧭 OpenGL에서는 기하 변환이 어떻게 처리될까?앞에서 우리는 점과 벡터, 어파인 결합, 이동·회전·스케일·밀림 변환, 그리고 합성 변환까지 다양한 기하 변환의 이론을 수학적으로 배웠습니다.그렇다면 이제 이 개념들이 실제 OpenGL과 같은 그래픽스 시스템에서는 어떻게 구현될까요?💡 동차 좌표와 행렬 곱으로 처리되는 변환OpenGL에서는 모든 정점의 좌표를 내부적으로 동차 좌표(homogeneous coordinate) 로 표현합니다.예를 들어, 2D 점 (x, y)은 (x, y, 1),3D 점 (x, y, z)은 (x, y, z, 1)로 표현됩니다.이러한 동차 좌표 덕분에 이동(translation) 과 같은 변환도 행렬 곱 하나로 처리할 수 있습니다.즉, OpenGL에서는 다음과 같이 각 정점에..

합성 변환과 해석

🔄 합성 변환: 고정점을 기준으로 회전하기지금까지 우리는 주로 원점(0, 0)을 기준으로 한 회전만 다뤄왔습니다.하지만 실제 그래픽스에서는 임의의 점, 예를 들어 (1, 1) 같은 점을 기준으로 물체를 회전시켜야 할 일이 자주 발생합니다.이때 단순히 회전 행렬만 사용하는 것으로는 원하는 결과를 얻을 수 없습니다. 왜 그런지, 그리고 어떻게 해결하는지 차근차근 예시와 함께 살펴보겠습니다.❌ 첫 번째 시도: 그냥 회전만 하기 (잘못된 결과)아래는 점 (1, 1)을 기준으로 도형(삼각형)을 90도 회전시키고 싶은 상황입니다.이때 단순히 위와 같은 회전 행렬을 적용했다면:이 행렬은 원점(0, 0) 을 기준으로 90도 회전시키는 행렬입니다. 따라서 삼각형은 회전은 하지만, 원점 기준으로 도는 것이기 때문에 회전..

어파인 변환의 해석

📐 어파인 변환의 해석: 고정좌표계 vs 지역좌표계✅ 1. 객체의 변환 (Fixed Coordinate System, 고정좌표계)이 방식은 우리가 가장 자주 사용하는 형태입니다.좌표계(기준축)는 고정되어 있고,객체(점이나 도형)가 변환 행렬에 의해 변형됩니다.📌 수식:q' = XqX: 변환 행렬 (회전, 스케일, 이동 등 포함)q: 원래의 점 좌표 (동차좌표)q': 변환된 점의 좌표 (동일한 기준축에서 본)📌 슬라이드 해석:➡️ 객체가 고정 좌표계 기준으로 회전하고 이동된 것처럼 해석✅ 2. 좌표계의 변환 (Local Coordinate System, 지역좌표계)이번에는 반대입니다!객체는 그대로 두고,우리가 보는 좌표계가 바뀌는 경우를 생각해요.📌 수식:q' = Xq하지만 해석이 다릅니다:q: 점..

동차 좌표, 어파인 공간, 어파인 변환: 이동, 회전, 스케일, 밀림 변환

1. 어파인 공간과 기초 개념그래픽스에서는 위치를 나타내는 점(Point) 과 방향과 크기를 나타내는 벡터(Vector) 를 명확히 구분합니다.📌 벡터 연산벡터는 방향과 크기를 가지는 물리적인 양이며, 보통 화살표로 표현합니다.📌 점과 벡터 연산❗ 점 + 점은 수학적으로 정의되지 않음: 위치 간의 덧셈은 의미 없음2. 어파인 결합과 좌표계📌 어파인 결합이란?어파인 결합은 여러 점 또는 벡터를 선형 결합한 것으로, 계수의 합이 1인 경우 점을, 0인 경우 벡터를 생성합니다. 다음 수식처럼 표현할 수 있습니다:예시 수식을 통해 자세히 보면:📌 n차원 어파인 좌표계어파인 공간에서는 기준점(origin) 과 기저 벡터(basis vectors) 로 좌표계를 정의합니다.n차원 어파인 공간에서는:3차원 예시..

OpenGL 기본 출력 객체 속성 정리

🎯 점(Point)의 속성✅ 속성: 색상, 크기🔧 관련 함수glColor*() → 색상 지정 (RGB 또는 RGBA)glPointSize(float size) → 점 크기 지정🎨 glColor*() 함수 형식OpenGL에서는 다양한 형태의 glColor 함수가 제공되며, 아래와 같이 구조를 가지고 있습니다:glColor[3/4][i/s/f/d][v]()[3/4]: RGB 또는 RGBA (3요소 or 4요소)[i/s/f/d]: 데이터 타입 (정수, short, float, double)[v]: 벡터 형태로 배열을 전달할 경우 붙임 (예: glColor3fv)예시:glColor3f(1.0f, 0.0f, 0.0f) → RGB 색상 직접 지정glColor4f(0.0f, 1.0f, 0.0f, 0.5f) → ..