컴퓨터 그래픽에 동종 좌표가 사용되는 이유는 무엇입니까?


답변:


12

그래픽에 사용되는 수학을 단순화하고 통합합니다.

  • 그들은 당신이 행렬로 번역을 표현할 수 있습니다.

  • 원근 투영에서 깊이로 나눗셈을 나타낼 수 있습니다.

첫 번째는 아핀 지오메트리와 관련이 있습니다. 두 번째는 투영 형상과 관련이 있습니다.


어떤 종류의 예를 찾고 있습니까? 변환 행렬과 원근 투영과 관련된 것이 쉽게 찾을 수 있어야합니까?
Bart

@Bart, Analogy가 필요했습니다.

2
@anonymous 님이 죄송하지만 실제로 아무 말도하지 않습니다. 정확히 무엇을 찾고 있는지 설명하기 위해 더 많은 단어를 사용해야합니다.
Bart

이 답변은 초보자에게는 너무 기술적이기 때문에 높게 평가되지 않았다고 생각합니다. 어쩌면 간단한 표현을하는 간단한 예가 원칙을 더 잘 설명해 줄 수 있습니다.
Nathan

5

이름이 있습니다 : 동종 좌표는 잘 ... 동종입니다. 균질하다는 것은 회전, 변환, 스케일링 및 기타 변형을 균일하게 표현하는 것을 의미합니다.

균일 한 표현으로 최적화가 가능합니다. 3D 그래픽 하드웨어는 4x4 매트릭스에서 매트릭스 곱셈을 수행하도록 특화 될 수 있습니다. 곱셈은 ​​종종 사용되기 때문에 0 또는 1로 곱셈을 인식하고 저장하는 것도 전문화 될 수 있습니다.

동종 좌표를 사용하지 않으면 강력하게 최적화 된 하드웨어를 최대한 활용하기 어려울 수 있습니다. 프로그램이 인식하는 것은 동종 좌표에 대해 하드웨어의 최적화 된 명령을 사용할 수 있다는 것 (일반적으로 컴파일러이지만 상황이 더 복잡 할 수 있음)은 다른 표현을 최적화하는 데 어려움을 겪을 것입니다. 덜 최적화 된 명령어를 선택하므로 하드웨어의 잠재력을 사용하지 않습니다.

소니 PS4는 대규모 매트릭스 곱셈을 수행 할 수 있습니다. 그것은 너무 비싸서 한동안 팔려 나갔습니다. 왜냐하면 더 비싼 슈퍼 컴퓨터 대신 클러스터가 사용 되었기 때문입니다. 그 후 소니는 하드웨어를 군사용으로 사용할 수 없도록 요구했습니다. 그렇습니다. 슈퍼 컴퓨터는 군사 장비입니다.

연구자들은 그래픽이 포함되어 있지 않더라도 그래픽 카드를 사용하여 행렬 곱셈을 계산하는 것이 일반적이되었습니다. 범용 CPU보다 크기가 더 우수하기 때문입니다. 비교를 위해 현대의 ​​멀티 코어 CPU는 16 개 파이프 라인 (x0.5 또는 x2는 그다지 중요하지 않음)이고 GPU는 1024 개 파이프 라인입니다.

실제 병렬 처리를 허용하는 것은 파이프 라인보다 핵심이 아닙니다. 코어는 스레드에서 작동합니다. 스레드는 명시 적으로 프로그래밍해야합니다. 파이프 라인은 명령 수준에서 작동합니다. 칩은 자체적으로 명령을 병렬화 할 수 있습니다.


"Sony의 PS4는 대규모 행렬 곱셈을 수행 할 수 있습니다." PS3의 셀 프로세서를 의미합니까? PS4에는 다소 일반적인 x86 프로세서가 있습니다.
Wumpf

이것은 좋은 답변이지만 OPs 질문에 대답하지 않는다고 생각합니다. 하드웨어가 최적화되어 있기 때문에 동종 코드가 사용된다고 제안합니다. 동종 코드가 더 유용하고 결국 하드웨어가 개발되었습니다. vec4의 또 다른 논점은 128 비트로 정렬되어 넓은 메모리 버스 (GPU)에서보다 효율적으로 읽을 수 있다는 것입니다.
PaulHK

4

보어:

동종 좌표는 또한 무한대를 나타낼 수 있습니다 : 3D에서 0 , 즉x,y,z방향 무한대의 점(엑스,와이,,0)=엑스,와이,0x,y, . 일반적으로 유한 또는 무한 위치의 광원은 같은 방식으로 표현 될 수 있습니다.

원근 변환의 경우 원근 왜곡없이 PC의 초기 그래픽 하드웨어와 달리 올바르게 보간 할 수 있습니다.


2

개인적 취향으로서 나는 항상 가능한 동질적인 좌표를 사용하지 않고 평범한 직교 공식을 선호했다.

주된 이유는 동종 좌표가 쓸모없는 저장 및 계산을 포함하는 변환 행렬 (0, 0, 0, 1)에서 4 개의 사소한 항목을 사용하기 때문입니다 (또한 "기본적으로"기본적으로 사용되는 범용 매트릭스 계산 루틴의 오버 헤드 이 경우).

단점은 방정식을 쓸 때 더 많은주의가 필요하고 행렬 이론의 지원을 잃지 만 지금까지는 살아 남았습니다.


1
원칙적으로 데이터 항목은 실제와 같이 작동하더라도 실제로 저장하지 않는 데이터 유형을 구현할 수 있습니다.

1
@Hurkyl 분명히. 범용 매트릭스 도구 상자가 준비되어 있으므로 거의 수행되지 않습니다.
Yves Daoust

@YvesDaoust plain Cartesian formulation3D 그래픽에서의 사용을 설명하는 리소스 의 예 또는 링크를 제공 할 수 있습니까?
Dan

@Dan : y = Ax + b를 사용하십시오. 여기서 A는 3x3 행렬이고 ba 3x1 벡터 대신 y '= Ax'입니다. 여기서 y ', x'는 증강 벡터이고 A는 4x4 행렬입니다.
이브 다우 스트

@YvesDaoust 그래서 4x4 행렬 대신 3x3 행렬과 3x1 벡터를 쉐이더에 전달하고 있습니까? 어디에서 계산하고 저장 w합니까?
Dan

2

행렬을 사용하여 변환을 표현한다고 가정합니다. 포인트는 저장 될 수있다 당신은 회전 나타낼 수있다 [ U는 V ] = [ C O S ( θ ) - s의 I N ( θ ) s의 I N ( θ ) C O S ( θ를 ) ] [ X를 y ][ u v ] = [ k 1 로 스케일링

[엑스와이]
[V]=[영형에스(θ)에스나는(θ)에스나는(θ)영형에스(θ)][엑스와이]
선형 변환이라고하며 행렬 곱셈으로 변환 할 수 있습니다. 그러나 행렬 곱셈으로는 번역을 수행 할 수 없습니다. 대신[ u v ]=[ x y ]+[ s t ]를 수행해야합니다.이를 아핀 변환이라고합니다. 그러나 이것은 (계산적으로) 바람직하지 않습니다.
[V]=[케이100케이2][엑스와이]
[V]=[엑스와이]+[에스]

R과 S를 회전 및 스케일링 행렬로하고 T를 변환 벡터로합니다. 컴퓨터 그래픽에서 한 지점으로 일련의 변환을 수행해야 할 수도 있습니다. 이것이 얼마나 까다로운 지 상상할 수 있습니다.

'=에스아르 자형(에스+)+

미디엄=에스아르 자형에스
'=미디엄

p=[xy1]
R=[cos(θ)sin(θ)0sin(θ)cos(θ)0001]
S=[k1000k20001]
T=[10t101t2001]
몇 가지 예를 들어서 실제로 원하는 변환을하도록 설득해야합니다. 여러 행렬을 곱하여 일련의 변환을 구성 할 수 있습니다.

p=[xyw]
Q=[1000010000100010]

1

아핀 좌표의 계산에는 종종 더하기 또는 곱하기에 비해 값이 많은 나눗셈이 필요합니다. 투영 좌표를 사용할 때 일반적으로 분할 할 필요가 없습니다.

프로젝션 좌표 (보다 일반적으로 프로젝션 지오메트리)를 사용하면 특수한 경우도 제거되어 모든 것이 더 단순하고 균일 해집니다.


"아핀 좌표 계산에는 종종 나눗셈이 필요합니다": 나는 왜 그런지 모르겠습니다. 사실 당신은 정확히 같은 표현을 계산합니다.
Yves Daoust

@Yves : 구체적인 "컴퓨팅 매트릭스 변환"질문이 아니라보다 일반적인 "컴퓨터 그래픽에서의 사용"주제에 응답하고 있습니다.

@Hurkyl : 나도 그렇습니다. 장면을 렌더링 할 때 같은 양의 나누기로 정확하게 같은 표현을 계산합니다 (차이는 0 요소의 더미 항에 있습니다).
Yves Daoust

@ 이브 : 흠. 나는 affine으로의 변환이 어느 정도 지연 될 수있는 계산을하는 데 익숙합니다. 자주 나오지 않는다고 말하면 귀하의 전문 지식을 기꺼이 적용하겠습니다.

-1
  • 더 간단한 공식
  • 더 적은 특별한 경우
  • 통일과
  • 이중성

2
대답은 매우 불분명합니다. 각 요점을 자세히 설명해야합니다.
Rotem
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.