OpenGL 23

[OpenGL] Light Sources 종류 및 예제

Simple Light  Ambient Light (앰비언트 광원)설명: 앰비언트 라이트는 어디에나 있는 빛으로, 난반사를 통해 모든 방향에서 같은 정도의 낮은 밝기를 가진다. 특별한 광원이 없더라도 간접 조명으로 공간을 채운다.사용 예: 기본적인 환경 조명.Point Light Sources (점 광원)설명: 중심점 P0에서 모든 방향으로 동일하게 빛을 방출하는 광원으로, 특정 지점에서 빛을 방출하여 전구와 유사하다.사용Parallel Light Sources (평행 광원)설명: 광원이 매우 멀리 있어서 빛이 평행하게 들어오는 것을 가정하는 광원으로, 태양광을 모델링할 때 사용된다.사용 예: 태양광. Real Light Spot Lights (스팟 광원)설명: 특정 지점에서 원추형으로 빛을 방출하는 조..

OpenGL 2024.07.01

[OpenGL] Shading과 illumination model

그래픽스 프로그램에서는 광학 시뮬레이션을 통해 색상의 자연스러운 변화를 나타냅니다. 이 과정에서 중요한 요소는 광원과 물체 표면의 상호작용입니다. 이를 통해 더욱 현실감 있는 장면을 렌더링할 수 있습니다.쉐이딩 (Shading)먼저, 광원(light source)에서 나오는 빛이 타겟 오브젝트에 부딪힐 때, 물체 표면의 재질(material)을 시뮬레이션해야 합니다. 재질은 금속처럼 반사성이 강한 것부터 천처럼 빛을 흡수하거나 산란시키는 것까지 다양합니다. 쉐이더(shader)는 이러한 물체 표면의 광학적 특성을 시뮬레이션하여 자연현상인 그림자, 굴절 등을 처리합니다.즉 쉐이딩은 광원이 물체 표면에 닿아 반사, 흡수, 산란되는 과정을 시뮬레이션합니다. 이를 통해 물체의 색상과 밝기가 결정됩니다. 광원 (..

OpenGL 2024.07.01

[OpenGL] Viewport와 Scissor Box

WC는 다양한 디바이스의 디스플레이 해상도와 무관하게 그림을 표현할 수 있습니다.NDC는 해상도에 맞춰서 일일이 그림을 만드는 작업을 하는 것보다는 디바이스 해상도를 무시해 버리고 일단 마이너스 1에서 플러스 1까지 가는 어떤 그림을 만드는 것이다.OpenGL의 뷰포트(Viewport)는 OpenGL의 출력 영역을 나타낸다. 보통은 window전체를 사용하지만 window 내의 직사각형 영역을 미니맵처럼 따로 설정 가능 합니다. 즉 렌더링 된 이미지가 표시될 프레임버퍼의 영역을 정의합니다.뷰포트는 윈도 내에서 직사각형 영역이 되어야 되기 때문에 정수좌표계를 가져야 합니다. 그래서 정수 좌표계를 갖는 wc좌표계를 갖게 됩니다. 즉 프레임버퍼의 영역은 WC(Window Coordinate)를 사용하며 어떠한..

OpenGL 2024.05.10

[OpenGL] orthographic프로젝션와 Perspective프로젝션

Orthographic Projection (직교 투영):Orthographic projection은 객체를 카메라에서 동등한 비율로 투영합니다. 즉, 원근감이 없는 투영입니다.이는 3D 객체를 2D 화면에 표시할 때 크기만 변경되고 모양은 유지되는 것을 의미합니다.이는 일반적으로 2D 렌더링, CAD 응용 프로그램 또는 게임에서의 2D 스프라이트와 같은 경우에 유용합니다.Orthographic projection 행렬을 만들 때는 glOrtho() 함수를 사용합니다.void glOrthoRH(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble nearVal, GLdouble farVal);void glOrthoLH(GLdoubl..

OpenGL 2024.05.08

[OpenGL] LookAt Approach

카메라를 설정할 때 필요한 월드 프레임에서의 카메라 포지션(p 좌표), 유닛 벡터 (n 좌표), view up vector(v좌표)n좌표와 v좌표를 설정하는 View Transform 설정에 대한 직접 계산을 보다 직관적인 방법으로 쉽게 계산하기 위한 대안으로 나온 것 이 LookAt Approach 방법이다. OpenGL의 LookAt Approach는 3D 그래픽스에서 카메라의 위치와 방향을 지정하는 데 사용되는 방법입니다. 이 방법은 보통 OpenGL의 카메라 시스템을 설정하는 데 쓰이며, 보다 정확하게는 시점 변환(Transformations)을 수행하기 위해 사용됩니다.OpenGL에서는 세 가지 주요 변환을 사용하여 객체를 표시합니다: 이동(Translation), 회전(Rotation), 및 ..

OpenGL 2024.05.07

[OpenGL] 카메라와 뷰잉(viewing)

카메라와 뷰잉컴퓨터 그래픽스에서는 카메라를 카메라라고 직설적으로 표현하지 않고 뷰라고 표현한다. 즉 뷰잉은 카메라를 어떻게 설정할 것이냐이다.카메라 == 뷰잉좌표 종류Object frame - 물체를 디자인하는 프레임 좌표 World frame(q world) - 모든 것들을 배치하기 위한 월드 프레임 좌표View frame - 카메라가 작동하는 수학적으로 카메라를 시뮬레이션 하기 위한 뷰 프레임OpenGL 관점과 순서model transform - world frame상에서 어떤 물체를 원하는 위치로 이동하는 과정을 뜻 하며 즉 object를 world frame 기준으로 회전하거나 이동시킨다. Object frame -> World frame view transform - 배치되어 있는 모든 오브젝트..

OpenGL 2024.05.03

[OpenGL] VRAM와 VBO(Vertex Buffer Objects)

VBO(Vertex Buffer Objects)란?VBO는 그래픽스에서 사용되는 데이터를 어디에 저장하는 것이 좋을까에서부터 시작된다. 그래픽스 프로그램에서는 그래픽 카드에 있는 GPU에서 돌아가는 Vertex Shader에다 메모리가 전달되어 수행한다.즉 메인인 메모리인 Ram에 있던 데이터가 데이터버스를 통해 GPU로 흘러가야 Vertex Shader에서 실행되게된다. 하지만 1초에 30~60번의 그림을 그리기위해 그때마다 메인 메모리에 있던 데이터가 GPU를 향해서 전송되어 그림을 그리게 된다면 그래픽 프로그램에서는 오브젝트의 위치가 변경 되더라도 사실상 같은 모양을 반복해서 그리는 경우가 많게된다. 그래서 기존에 매번 데이터를 보내는 것보다 그러지 말고 그래픽 카드에도 별도의 메모리(VRAM 혹은..

OpenGL 2024.04.18

[OpenGL] lerp와 slerp

lerp와 slerp모두 부드러운 움직임을 표현하기 위해 사용된다. 하지만 lerp같은 경우 선형 보간으로 직선으로 보간하기 때문에 오일러각을 이용한 회전같은 부분에서 부드럽지 않는 문제가 발생한다. 따라서 quaternion을 사용하여 구면 선형 보간을 이용하면 회전과같은 애니메이션 처리에 더 부드럽게 처리가 가능하다. lerp와 slerp를 구분하여 사용하는 이유는 각각의 보간 방법이 다른 종류의 데이터에 대해 적합하기 때문입니다. 선형 보간(lerp)의 용도: 선형 보간은 두 값 사이를 직선으로 보간합니다. 따라서 주로 선형적인 변화를 필요로 하는 경우에 사용됩니다. 위치, 크기, 색상 등과 같이 선형적인 특성을 갖는 데이터의 보간에 적합합니다. 예를 들어, 오브젝트의 위치나 크기를 부드럽게 변화시..

OpenGL 2024.04.18

[OpenGL] Transformation(Scaling, rotation, translation)의 결합 순서

※Scaling -> Rotation -> Translation 순서로 오브젝트를 변화하는 것이 가장 좋은 방법이다. Scaling(확대/축소), Rotation(회전), Translation(이동)의 순서는 변환들이 적용되는 순서를 나타냅니다. 일반적으로 변환 순서는 중요한 역할을 합니다. 이 세 가지 변환을 순서대로 적용하는 이유는 다음과 같습니다:Scaling(확대/축소):먼저 Scaling을 적용하는 것은 객체의 크기를 조절하기 위해 기준을 설정하는 단계입니다. Scaling을 적용하기 전에 객체의 크기를 결정하고, 그 크기를 기준으로 나머지 변환을 적용할 수 있습니다.Rotation(회전):Scaling 이후에 Rotation을 적용하는 것은 객체의 크기를 변경하지 않고도 회전할 수 있도록 하기..

OpenGL 2024.04.18

[OpenGL] 오일러 앵글 Euler angle

오일러 앵글임의의 좌표를 그려 회전한다면 다양한 각도를 만들 수 있지만 1개의 좌표축을 사용한다면 절대 못 만드는 각도가 존재하게 된다. 하지만 비교적 간단한 행렬식이 나타난다. 이런 특정좌표축 1개를 사용한 문제를 해결하기 위해 좌표축 중심의 3D rotation x,y,z를 차례로 사용하여 모든 각도를 표현하는 방식을 Euler rotation이라고 하며 x, y, z를 rotation한 3가지 각도를 Euler Angle이라고 한다(세타1, 세타2, 세타3) x, y ,z를 회전하는건 순서와 상관없지만 순서가달라지면 결과값도 달라진다. 행렬식은 반대 순서로 적용 : p' = z * y * x * p Euler angle의 결과값은 unique하지 않는다 이뜻은 input값이 달라도 결과값이 같을 수..

OpenGL 2024.04.18