통일 D3D 및 OpenGL 좌표 시스템

 

 

저자: 여행 (()

 

DirectX 3D과 OpenGL 좌표 시스템 차이, 우리에게 큰 번거로움을 가져다 줄 수 있도록 크로스 플랫폼 프로그래밍 하는 데에는 매우 곤혹스럽다.최근 한 개 크로스 플랫폼 게임, 자세히 다음 둘의 행렬 발견 하 고 별 차이가 없는 것이다 d3d 왼손 과 행렬 배달 줄 수 shader 다각형 완전히 정상적인 작업.

먼저 얘기 좀 둘 일부 개념 상의 차이:

(1)좌표 시스템 다르다

d3d 왼손 좌표, 다각형 오른손 좌표

(2)격자 선 순서 다르다

d3d 그래. 우선, 다각형 열 우선.이 두 개의 다른 직접 때문에 좌표 변환 순서 및 행렬 곱셈 순서 반대로 성.만약 먼저 크기 조정, 다시, 마지막 구성, 대응 행렬 각각 S, R · T 않으면 d3d 최종 행렬 m = s * r * r 위해 다각형 위해M = T * R * S

(3)감축 공간 z 순위 범위 다르다

d3d [0 1]. 예, 예, 다각형[-1, 1]

 

겉으로 보면 둘 매트릭스 큰 차이가 있지만 사실은 그렇지 않다.

1. 정도 손 좌표

그래픽 장치 대해 말하자면, 장치 좌표, 왼손 좌표 즉 가리키는 화면 안에 z z 값 더 큰 것을 시선을 더 먼 거리. 그래서 다각형 오른손 시스템 을 감축하다 공간 들어갈 때 어떻게 1개씩을 왼손 매다. 이 그러니까, 렌더링 관선 내부, 좌표 은 통일. 그게 왼손 좌표 행렬, 아니면 오른 좌표 행렬, 그냥 변환 까지 감축 공간 속 좀 왼손 학과 됩니다.

 

2.격자 선 순서

행 행렬, 열 행렬, 논리적 하나 또 하나의 바꾸다, 그러나 물리 스토어드 구조 에서 결국 완전히 일치한다.만약 한 병진 변환(x, y, z):

주의를 필요로 하는 것은 행렬 곱셈 관심 없어 행렬 실행할 행렬, 아니면 열 행렬, 모두 첫 행렬 되는 대로 가서 곱하기 두 번째 행렬.에 열 행렬 경우 이 바로 그 엉터리 지방 위해 보증 곱셈 의미 유효성 그 좌표 변환 순서에 따라 행렬의 곱셈 순서 마침 반대로.

또 조심 좀, shader 중 다각형 있는 행렬 곱셈 규칙에 따라 d3d 다르다.행렬의 곱셈 규칙에 (첫 번째 행렬 행 * 두 번째 행렬 모음):

d3d 행렬의 곱셈: Ma(0 1 2 3) * Mb(0 4 8 12)

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

opengl행렬의 곱셈: Ma(0 4 8 12) * Mb(0 1 2 3)

이에 대해 다각형 shader 경우 변환 순서에 따라 행렬의 곱셈 순서 여전히 반대.만약 우리가 할 수 있는 것이다 shader 전래 다각형 매트릭스 한 번 바꾸다 하면 그렇게 다각형 shader 있는 행렬 곱셈 의미가 따라 d3d 것이다 shader 완전히 일치한다!

 

3.수정 투영 행렬

다각형 때문에 정규직 감원은 공간 z 순위 범위 위해 [-1, 1] 따라 d3d 있는 [0, 1] 다르다, 우리 쉽게 사용할 수 d3d 투영 행렬, 반드시 다시 정의 d3d 투영 행렬.

 

void Matrix::perspectiveProjectionLH2( float fov, float aspectRatio,
        float nearPlane, float farPlane )
{
        float h = (1.0f / tanf(fov * 0.5f));
        float w = h / aspectRatio;

        float a = (farPlane + nearPlane) / (farPlane - nearPlane);
        float b = -2.0f * farPlane * nearPlane / (farPlane - nearPlane);
        
        m[0][0] = w; m[0][1] = 0; m[0][2] = 0; m[0][3] = 0;
        m[1][0] = 0; m[1][1] = h; m[1][2] = 0; m[1][3] = 0;
        m[2][0] = 0; m[2][1] = 0; m[2][2] = a; m[2][3] = 1;
        m[3][0] = 0; m[3][1] = 0; m[3][2] = b; m[3][3] = 0;
}


 

 

4.총화

사용 왼손 시스템 변환 와 통일 두 플랫폼 비교적 편리하다.총괄하여 다각형 렌더링 파이프 라인 수정 절차:

(1)는 부하 층 통일 사용 왼손 좌표 변환,

(2)수정 투영 행렬 에 맞 감축 공간 z 그래프 범위[-1, 1],

(3)행렬 이 전래 shader 때 는 행렬 바꾸다 행렬 유입,

(4)지금 shader 층, 통일 사용 왼손 좌표 변환.

만약 싶지 않다 shader 중 변환 수정, 단지 할 (1) 와 (2) 충분해.

 

5.많이 읽다

유도 투영 행렬 

다각형 d3d 단절 과 뛰어넘다.

 

[출처] http://www.programkr.com/blog/MEzMxADMwYT0.html

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
114 Windows 에 Caffe 설치하기 (๑•‿•๑) 졸리운_곰 2018.02.21 306
113 Windows에서 Caffe 예제 돌리기 : MNIST(1) (๑•‿•๑) file 졸리운_곰 2018.02.21 356
112 Caffe 구성 요소들 알아보기: blobs, nets, layer, solver, prototxt ๑•‿•๑ file 졸리운_곰 2018.02.21 569
111 Windows에서 Caffe 첫 컴파일 해보기 with Visual Studio 2013(๑•‿•๑ file 졸리운_곰 2018.02.21 313
110 윈도우10(Windows 10) / Caffe / CUDA / cuDNN / Python 설치 file 졸리운_곰 2018.02.21 350
109 [Caffe] windows 환경에서 caffe를 설치하자 (161102 기준) 졸리운_곰 2018.02.21 269
108 [리눅스 GUI 하드디스크 상태 모니터링 툴] GSmartControl - A GUI Tool to Check HDD/SSD Health on Linux file 졸리운_곰 2018.01.16 346
107 CONREC : A Contouring Subroutine 등고선 그리기 file 졸리운_곰 2018.01.11 638
106 ubuntu xfce4 rdp에서 MS Code나 Atom 에디터가 안뜰때 졸리운_곰 2017.10.14 251
105 Install Atom Text Editor in Ubuntu 16.04 (both 32&64bit) file 졸리운_곰 2017.10.14 305
104 우분투 서버 윈도우 원격접속(rdp) 설정 졸리운_곰 2017.10.14 431
103 우분투 서버 한글 설정 및 한글폰트 설치 졸리운_곰 2017.10.14 458
102 왼손 / 오른손 좌표계 비교: Left- vs. Right-handed coordinate systems file 졸리운_곰 2017.09.24 432
101 3D Graphics with OpenGL file 졸리운_곰 2017.09.24 1214
100 OpenGL의 회전순서 졸리운_곰 2017.09.24 294
» 통일 D3D 및 OpenGL 좌표 시스템 file 졸리운_곰 2017.09.24 337
98 우분투(Ubuntu)에서 putty로 ssh 원격 접속 실패 해결 방법 file 졸리운_곰 2017.08.27 316
97 Webdriver++ : A C++ client library for Selenium Webdriver. file 졸리운_곰 2017.07.30 380
96 우분투 16.04 원격 데스크탑 설정 file 졸리운_곰 2017.07.08 559
95 [OpenGL] 중심점(pivot)으로 물체 회전하기 file 졸리운_곰 2017.06.25 1139
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED