|
Varios macros útiles de transformación. Todos producen transformaciones, puede usarlos en cualquier parte donde se pueda escalar, rotar, etc. Las descripciones asumen que está trabajando con un objeto, pero los macros trabajan también con texturas, etc.
Shear_Trans(A, B, C)
. Este macro reorienta y deforma un
objeto para que sus ejes originales XYZ apunten a lo largo de A, B y C,
resultando en un efecto cortante cuando los vectores no son
perpendiculares. También puede usar vectores de longitudes diferentes
para afectar el escalado (tamaño), o utilizar vectores perpendiculares
para reorientar el objeto.
Parámetros:
A, B, C
= Los vectores representan los nuevos ejes
XYZ para la transformación.Matrix_Trans(A, B, C, D)
. Este macro provee una manera
de especificar una transformación de matriz a partir de 4 vectores. Los
efectos son muy similares a los del macro Shear_Trans() (anterior),
pero el cuarto parámetro controla la traslación.
Parámetros:
A, B, C, D
= Los vectores para cada fila de la
matriz resultante.Axial_Scale_Trans(Axis, Amt)
. Como una clase de escala
direccional, este macro "estirará" un objeto a lo largo de un eje
específico.
Parámetros:
Axis (Ejes)
= El vector que indica la dirección del
estiramiento.Axis_Rotate_Trans(Axis, Angle)
. Este macro es
equivalente a la transformación hecha por la función vaxis_rotate(),
que rota alrededor de un eje arbitrario.
Parámetros:
Axis (Ejes)
= Un vector que representa elrededor
del que se va a rotar.Angle (Ángulo)
= La cantidad a ser rotada (grados).Rotate_Around_Trans(Rotation, Point)
. La rotación
ordinaria ocurre alrededor del origen, pero este macro rota alrededor
de un punto específico.
Parámetros:
Rotation (Rotación)
= El vector de rotación, igual
al del parámetro del identificador "rotate".Point (Punto)
= El punto alrededor del cual se va a
rotar. Reorient_Trans(Axis1, Axis2)
. Este macro alinea Axis1
(Eje1)
con Axis2 (Eje2)
rotando el objeto alrededor
de un vector perpendicular a ambos ejes ( eje1 y eje2 ).
Parámetros:
Axis1 (Eje1)
= Vector a ser rotado.Axis2 (Eje2)
= Vectores hacia los cuales se rota.Point_At_Trans(YAxis)
. Este macro es similar al macro
Reorient_Trans(), sólo que alinea el eje y
a lo largo del
Eje (Axis).
Parámetros:
YAxis
= La dirección a la que señala el eje y.Center_Trans(Object, Axis)
. Calcula una transformación
que centrará un objeto a lo largo de un eje específico. Indique los
ejes que quiere centrar añadiendo "x", "y", y "z" juntos en el
parámetro Axis -Ejes-.
Nota: este macro en realidad realiza el cálculo de la transformación para centrar la caja de acotación (bounding box) del objeto; y que puede no ser enteramente exacto. No hay manera de definir el "centro" de un objeto arbitrario.
Parámetros:
Object (Objeto)
= El centro del objeto cuya
transformación será calculada.Axis (Ejes)
= Los ejes para centrar el objeto.object {MyObj Center_Trans(MyObj, x)} //centrar a lo largo del eje xTambién puede centrar a lo largo de ejes múltiples:
object {MyObj Center_Trans(MyObj, x+y)} //centrar a lo largo de los ejes x e y
Align_Trans(Object, Axis, Pt)
. Calcula la
transformación que alineará los lados de la caja de acotación de un
objeto con respecto a un punto. Valores negativos en "Axis" (Ejes)
alinearán hacia los lados que encaran los extremos negativos del
sistema de coordenadas, los valores positivos se alinearán con los
lados opuestos, 0 significa que no se realiza ninguna alineación en ese
eje.
Parámetros:
Object (Objeto)
= El objeto a ser alineado.Axis (Ejes)
= Una combinación de +x, +y, +z, -x, -y,
y -z, o un vector donde cada componente es -1, 0, ó +1 especificando
las caras de la caja de acotación que se alinearán con el punto.Point (Punto)
= El punto al cual se alineará la caja
de acotación del objeto. object { MyObj Align_Trans(MyObj, x, Pt) //Alinea el lado derecho del objeto para ser //coplanar con Pt Align_Trans(MyObj,-y, Pt) //Alinea el fondo del objeto para ser // coplanar con Pt }
vtransform(Vect, Trans)
y vinv_transform(Vect,
Trans)
.
El macro vtransform()
toma una transformación (rotar,
escalar, trasladar, etc...) y un punto, y retorna el resultado de la
aplicación de la transformación a ese punto. El macro vinv_transform()
es
similar, pero aplica el inverso de la transformación, en efecto
"deshaciendo" la transformación. Puede combinar transformaciones
encerrándolas en un bloque de transformación.
Parámetros:
Vect
= El vector al que se le aplica la
transformación.Trans
= La transformación que ha de aplicarse a Vect.Spline_Trans(Spline, Time, SkyVector, ForeSight, Banking)
.
Este macro alinea un objeto a una curva spline para un valor de tiempo
dado. El eje Z del objeto apuntará hacia el sentido 'hacia adelante' de
la spline y el eje X
del objeto apuntará hacia arriba.
Parámetros:
Spline
= La curva spline a la que el objeto se alinea.Time
= El valor de tiempo que alimenta a la curva
spline, por ejemplo "clock".Sky
= El vector que apunta hacia arriba en su escena,
a menudo y
.Foresight
= Un valor positivo que controla de
antemano cuánto se volteará y ladeará el objeto. Los valores cercanos a
- proporcionan resultados precisos, mientras que valores mayores dan
resultados más suavizados. No afecta la velocidad del renderizado, así
que puede buscar el valor adecuado que le parezca mejor. Banking
= Cuánto se inclina el objeto al voltearse.
La cantidad de la inclinación es igualmente controlada por el valor
'ForeSight'.object {MyObj Spline_Trans(MySpline, clock, y, 0.1, 0.5)}
|