2016-10-05 2 views
0

3D/2D 그래픽 엔진을 만들고 있는데, 멋진 Vector2, Vector3 클래스, Window 래퍼 및 OpenGL 컨텍스트 생성 프레임 워크를 작성한 후 잠시 동안 어떻게 전환 할 수 있을지 생각하고있었습니다. 좌표 시스템 축. OpenGL은 기본적으로는 (내가 아는 한) 그런 간다 : 나를 읽을 좌표에 대한OpenGL 좌표계 변경 방법 + [행렬 연산]

난 정말, 정말 그런 좌표를하고 싶지 않아
+X axis stands for Right | -X for Left 
+Y axis stands for Up | -Y stands for Down 
-Z stands for Forward | -Z stands for Backward 

, 그것은 단지 수 있습니다. 그래서 UE4 스타일 좌표에 대해 생각했습니다 :

+X axis stands for Forward 
+Y axis stands for Right 
+Z axis stands for Up 

이 축은 어떻게 전환 할 수 있습니까?

나는 "미 조정"관점에 대해 읽었지만 전환하지 않는 반전 축 만있었습니다.

내 두 번째 질문은 (컴퓨터 그래픽 용으로) 일부 매트릭스 작업을 배울 수있는 곳입니다. 나는 바로 사용할 수있는 소스 코드 나 확장을 다운로드하고 싶지 않다. 내가이 엔진을 쓰기 주요 목적은 나를 위해 지금 행렬이다 수학과 가장 중요한 것은 내용이다 - 프로젝션 행렬, 회전 행렬, 변환 행렬, 규모 등

답변

1

당신은 OpenGL을의 클립 공간을 좌표를 설명하고 비교하는 UE4의 월드 스페이스에 좌표. 일반적으로 클립 공간과 세계 공간은 서로 어떤 관계도 가질 필요가 없으므로 클립 공간과 세계 공간을 비교하는 것이 실제로 불가능합니다.

좌표계를 월드 공간에서 카메라 공간으로 변환하는 뷰 매트릭스를 만드는 것뿐입니다. 이 행렬은 모델 공간에서 월드 공간으로의 변환 및 카메라 공간에서 클립 공간으로 변환하는 행렬과 결합됩니다. 3 개의 행렬을 모두 결합하면 "modelviewprojection"행렬을 얻을 수 있습니다.

귀하의 버텍스 쉐이더는 다음과 같이 뭔가를 찾고 종료됩니다 :

// In model space 
in vec3 Coords; 
// Conversion from model space to clip space 
uniform mat4 MVP; 

void main() { 
    gl_Position = MVP * vec4(Coords, 1.0); 
} 
MVP 함께 작동 회전, 변환 및 크기 조절 행렬의 조합으로 만들어 질 것이다

. 그 결과 매트릭스는 아마도 다음과 같을 것이다 :

MVP = 투영 행렬 * 회전 행렬 * 번역 매트릭스 * 규모 매트릭스

회전 행렬이 축이 바로 얻는 소스입니다.

회전 매트릭스 = (-roll) x 축 주위로 회전 (pitch + pi/2) * Z 축 주위로 (yaw-pi/2)만큼 회전합니다.)

GLSL에서 제공되는 C++의 기본 벡터 및 행렬 유형 및 연산을 제공하는 GLM 라이브러리를 사용하는 것이 좋습니다. 이렇게하면 선형 대수학을 매우 쉽게 할 수 있습니다.

이러한 기능을 직접 작성하는 것은 좋지 않습니다. 대부분 오타를 만들 기회가 많은 지루하고 반복적 인 프로그래밍 작업입니다. 경험에서 말하기. 또는, 나는 그것을 이쪽으로 두자. 너 자신의 연필을 만드는 것이 너를 더 좋은 작가로 만드는 것은 아니다.