필요로하는 정보가 프로젝션 매트릭스에 직접 저장되어 있기 때문에 시야각을 어지럽히 기보다 약간 더 쉽게 할 수 있습니다.
따라서는 투영 행렬은 다음과 같을 것이다 주어진다 :
Z-파 (ZF) 및 (Z) - 근처 (아연), 엑스 스케일과 yScale 공지되어
xScale 0 0 0
0 yScale 0 0
0 0 -(zf + zn)/(zf - zn) -(2 * zf)/(zf-zn)
0 0 -1 0
.
정확한 Z-Depth를 선택하려면 w가 1로 끝나는 지 확인해야합니다.이 방법으로 w로 나누면 아무 것도 바뀌지 않습니다.
다행히도 w는 매우 쉽습니다. 그것은 단순히 입력 z의 음수입니다. 따라서 z에 -1을 입력하면 1의 w가 반환됩니다.
사용자가 1024x768의 해상도를 사용하고 올바른 크기로 원하는 텍스처가 256x256이라고 가정합니다.
또한 사각형의 왼쪽 상단이 -1, 1, 오른쪽 하단이 1, -1로 설정되어 있다고 가정합니다.
그래서 이것을 끼워 넣어 z를 풀어보세요.다음과 같이
-1, 1, -1, 1
1, -1, -1, 1
우리가 뭔가를 얻을 것이다 : 우리는 다음과 같은 사용하는 경우
.
1/xScale, -1/yScale, someZThatIsn'tImportant, 1
-1/xScale, 1/yScale, someZThatIsn'tImportant, 1
뷰포트 변환은 그 값이 변환되도록 -1, 1 0, 0, 1, -1 1024,768
그래서 우리는 수행하여 작동 것을 확인할 수있다 ((X + 1)/2) * 1024 그리고 ((1 - y)/2) * 768
우리가 3/4의 xScale과 1의 yScale을 가정하면 우리는 그것을 연결함으로써 다음과 같은 것을 얻을 수 있음을 알 수 있습니다 :
좌측 상단 :
x = -3/4
=> ((-3/4 + 1)/2) * 1024
=> 128
y = 1
=> ((1 - 1)/2) * 768
=> 0
01 오른쪽 아래에 들어 23,516,
:
x = 3/4
=> ((3/4 + 1)/2) * 1024
=> 896
y = -1
=> ((1 + 1)/2) * 768
=> 768
당신은 따라서 우리가 화면 중심 768x768 픽셀 이미지를 볼 수 있습니다. 분명히 256x256을 얻으려면 w가 3이되도록해야합니다. 따라서 w를 나누면 좌표 (xScale * 1024)/256이 (yScale * 768)/256과 같아야 정사각형이됩니다. . 투사
다음과 같이 우리의 최종 좌표는 그래서 경우 :
-1, 1, -3, 1
and
1, -1, -3, 1
우리는 (w-분할 후) 밖으로 다음 얻을 것이다 :
-0.25, 0.333, unimportantZ, 1
and
0.25, -0.333, unimportantZ, 1
위의 화면 방정식을 통해 사람들을 실행하고 우리는
을 얻습니다.
x = -0.25
=> ((-0.25 + 1)/2) * 1024
=> 384
y = 0.3333
=> ((1 - 0.3333)/2) * 768
=> 256
오른쪽 아래의 경우 : 왼쪽 상단의 경우 63,210
x = 0.25
=> ((0.25 + 1)/2) * 1024
=> 640
y = -0.333
=> ((1 + 0.33333)/2) * 768
=> 512
640 - 384 = 256
512 - 256 = 256
따라서 우리는 지금 올바른 픽셀 크기의 최종 RECT ...
와우, 멋진 답변, 고마워요. – Sam