¿Por qué se utilizan coordenadas homogéneas en gráficos de computadora?


Respuestas:


12

Simplifican y unifican las matemáticas utilizadas en los gráficos:

  • Le permiten representar traducciones con matrices.

  • Le permiten representar la división por profundidad en proyecciones en perspectiva.

El primero está relacionado con la geometría afín. El segundo está relacionado con la geometría proyectiva.


¿Qué tipo de ejemplos estás buscando? ¿Las matrices de traducción y cualquier cosa relacionada con las proyecciones de perspectiva deberían ser lo suficientemente fáciles de buscar?
Bart

@Bart, se necesita analogía.

2
Lo siento @ anónimo, pero eso realmente no me dice nada. Tendrá que usar más palabras para explicar exactamente lo que está buscando.
Bart

Creo que esta respuesta no es tan votada porque es demasiado técnica para nosotros los novatos. Tal vez un ejemplo simple con una redacción simple ilustraría mejor los principios
Nathan

5

Está en el nombre: las coordenadas homogéneas están bien ... homogéneas. Ser homogéneo significa una representación uniforme de rotación, traslación, escala y otras transformaciones.

Una representación uniforme permite optimizaciones. El hardware de gráficos 3D se puede especializar para realizar multiplicaciones matriciales en matrices 4x4. Incluso puede ser especializado para reconocer y ahorrar en multiplicaciones por 0 o 1, porque a menudo se usan.

No utilizar coordenadas homogéneas puede dificultar al máximo el uso de hardware altamente optimizado. Cualquier programa que reconozca que se pueden usar instrucciones optimizadas del hardware (generalmente un compilador, pero a veces las cosas son más complicadas) para coordenadas homogéneas tendrá dificultades para optimizar otras representaciones. Escogerá instrucciones menos optimizadas y, por lo tanto, no utilizará el potencial del hardware.

Como hubo llamadas para ejemplos: la PS4 de Sony puede realizar multiplicaciones matriciales masivas. Es tan bueno que se agotó durante un tiempo, porque se usaron grupos de ellos en lugar de supercomputadoras más caras. Posteriormente, Sony exigió que su hardware no se pueda utilizar con fines militares. Sí, las supercomputadoras son equipos militares.

Se ha vuelto bastante habitual que los investigadores usen tarjetas gráficas para calcular sus multiplicaciones matriciales, incluso si no hay gráficos involucrados. Simplemente porque tienen magnitudes mejores que las CPU de uso general. A modo de comparación, las CPU multinúcleo modernas tienen del orden de 16 tuberías (x0.5 o x2 no importa mucho) mientras que las GPU tienen del orden de 1024 tuberías.

No son tanto los núcleos como las tuberías lo que permite el procesamiento paralelo real. Los núcleos funcionan en hilos. Los hilos deben ser programados explícitamente. Las tuberías funcionan a nivel de instrucción. El chip puede paralelizar las instrucciones más o menos por sí solo.


"La PS4 de Sony puede realizar multiplicaciones matriciales masivas". Te refieres al procesador Cell de la PS3, ¿verdad? La PS4 tiene un procesador x86 bastante común.
Wumpf

Si bien esta es una buena respuesta, no creo que responda a la pregunta de los OP y sugiere que se utilizan cables homogéneos porque el hardware está optimizado para ello, los cables bastante homogéneos son más útiles y el hardware finalmente se desarrolló alrededor de eso. Otro argumento para vec4s es que están alineados a 128 bits, lo que hace que sea más eficiente leer en buses de memoria amplia (GPU)
PaulHK

4

complemento:

Las coordenadas homogéneas también permiten representar el infinito: en 3D, es decir, el punto en el infinito en la direcciónx,y,z. Típicamente, las fuentes de luz en posición finita o infinita se pueden representar de la misma manera.(X,y,z,0 0)=X,y,z0 0X,y,z

Acerca de la transformación de perspectiva, incluso permite interpolar correctamente sin distorsión de perspectiva (a diferencia del hardware gráfico anterior en la PC).


2

Como gusto personal, siempre me he abstenido (cuando sea posible) de utilizar coordenadas homogéneas y preferí la formulación cartesiana simple.

La razón principal es el hecho de que las coordenadas homogéneas usan 4 entradas triviales en las matrices de transformación (0, 0, 0, 1), que implican almacenamiento y cálculo inútiles (también la sobrecarga de rutinas de cálculo de matriz de propósito general que se usan "por defecto" en este caso).

La desventaja es que necesita más cuidado al escribir las ecuaciones y perder el apoyo de la teoría de matrices, pero hasta ahora he sobrevivido.


1
En principio, se pueden implementar tipos de datos que en realidad no almacenan esas entradas a pesar de que actúan como lo hacen.

1
@Hurkyl Obviamente. Esto rara vez se hace, ya que las cajas de herramientas de matriz de propósito general están disponibles.
Yves Daoust

@YvesDaoust ¿Podría proporcionar un ejemplo plain Cartesian formulationo un enlace a un recurso que describa su uso en gráficos 3D?
Dan

@Dan: use y = Ax + b donde A es una matriz de 3x3 y un vector ba 3x1, en lugar de y '= Ax' donde y ', x' son vectores aumentados y A una matriz de 4x4.
Yves Daoust

@YvesDaoust ¿Entonces está pasando una matriz de 3x3 y un vector de 3x1 a sus sombreadores en lugar de una matriz de 4x4? ¿Dónde calculas y almacenas w?
Dan

2

Imagina que quieres representar transformaciones usando matrices. Los puntos podrían almacenarse como y usted podría representar una rotación como [ u v ] = [ c o s ( θ ) - s i n ( θ ) s i n ( θ ) c o s ( θ ) ] [ x y ] y escala como [ u v ] = [ k 1

[Xy]
[tuv]=[Cos(θ)-syonorte(θ)syonorte(θ)Cos(θ)][Xy]
Estas se conocen como transformaciones lineales y nos permiten hacer transformaciones como multiplicaciones matriciales. Pero tenga en cuenta que no puede hacer traducciones como una multiplicación matricial. En su lugar, debe hacer[ u v ]=[ x y ]+[ s t ]Esto se conoce como transformación afín. Sin embargo, esto no es deseable (computacionalmente).
[tuv]=[k10 00 0k2][Xy]
[tuv]=[Xy]+[st]

Deje R y S ser matrices de rotación y escala y T sea un vector de traducción. En gráficos de computadora, es posible que deba hacer una serie de traducciones a un punto. Podrías imaginar lo complicado que esto podría ser.

pag=SR(Spag+T)+T

METRO=TSRTS
pag=METROpag

pag=[Xy1]
R=[Cos(θ)-syonorte(θ)0 0syonorte(θ)Cos(θ)0 00 00 01]
S=[k10 00 00 0k20 00 00 01]
T=[10 0t10 01t20 00 01]

pag=[Xyw]
Q=[10 00 00 00 010 00 00 00 010 00 00 0-10 0]

1

Los cálculos en coordenadas afines a menudo requieren divisiones, que son caras en comparación con las sumas o multiplicaciones. Por lo general, no es necesario dividir cuando se utilizan coordenadas proyectivas.

El uso de coordenadas proyectivas (y más generalmente, geometría proyectiva) tiende a eliminar también casos especiales, haciendo que todo sea más simple y uniforme.


"Los cálculos en coordenadas afines a menudo requieren divisiones": no veo por qué. De hecho, calcula exactamente las mismas expresiones.
Yves Daoust

@Yves: estoy respondiendo al tema más general "uso en gráficos de computadora", no a la pregunta específica "transformaciones de la matriz informática".

@Hurkyl: yo también. Cuando renderizas una escena, calculas exactamente las mismas expresiones, con la misma cantidad de divisiones (la diferencia radica en términos ficticios con un factor 0).
Yves Daoust

@Yves: Hrm. Estoy acostumbrado a hacer cálculos en los que la conversión de nuevo a afín puede diferirse hasta cierto punto; Cederé tu experiencia si dices que eso no aparece a menudo.

-1
  • fórmulas más simples
  • Menos casos especiales
  • Unificación y
  • Dualidad

2
La respuesta es muy poco clara. Debes elaborar cada punto.
Rotem
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.