En esta entrada aprenderemos a aplicar traslaciones objetos y rotaciones, no solo desde en entorno de Castle Game Engine, sino que lo haremos desde código.

Preparando la escena.

Vamos a preparar una escena en tres dimensiones. Si tienes dudas de como empezar con Castle Game Engine, puede visitar esta entrada del blog.

Crea una escena 3D, y añade un rectángulo en el centro, modifica las dimensiones del rectángulo para su tamaño en X sea igual a uno, en Y sea igual a siete y en Z sea igual a uno.

Ahora modifica su posición, para ello cambia la propiedad translation del rectángulo que acabas de crear. Y ajusta su valor Y a tres y medio.

Ajustes de Box1

Acabas de realizar tu primera traslación. Pero lo interesante sería realizar desde código, respondiendo a la pulsación de unas teclas.

Usando los componentes en el código

Para ello, lo primero es añadir el rectángulo al código. Abre el editor de código pulsando F12, y añade la clausula CastleScene en la sección uses. Y el en la sección published añade una variable llamada Box1, del tipo TCastleBox

El siguiente paso es asignar el rectángulo que tenemos en el editor, a la variable Box1, que acabamos de crear. Esto se hace en el procedimiento Start, tal como se muestra en el código más abajo1.

Observa, que la variable que creamos anteriormente, le asignamos un el componente Box1 (que es como se llama en el editor), y le indicamos que es de tipo TCastleBox.

Traslaciones por código

Ahora, solo tenemos que ir al procedimiento Press, y añadir el el siguiente código.

Observa, que para desplazar el rectángulo, simplemente sumamos un nuevo vector a su propiedad Translation. El motivo de sumar un vector, es que los objetos está situados en el espacio, y tiene tres coordenadas. En este caso se le suma 0.5 unidades en la coordenada X.

Rotaciones por código.

Ahora, podemos aplicar una rotación, podemos hacer los mismo que con la traslación, sumar a la rotación actual una nueva rotación, pero ello usaremos la propiedad Rotation. Observa este código.

En este caso, la rotación se expresa por un vector de cuatro componentes. Los tres primeros indican los ejes a los que se le aplica la rotación. Si el valor de un eje determinada es uno, se le aplicará una rotación, cuyo valor es indicado en el último componente del vector. Este valor es indicado en radianes. Como es más cómodo o intuitivo trabajar con grados, el valor es convertido de grados a radianes.

La rotación de un elemento se produce desde dónde está su centro. Observa el rectángulo en el editor. En esta imagen se puede ver el punto de rotación, indicado por un eje de coordenadas.

Si deseamos que la rotación se realice desde otro punto diferente, debemos desplazar el el centro del objeto a dónde nos interese. En el este ejemplo, la rotación del rectángulo se produce desde su punto de apoyo.

Observa el vídeo.

Aquí tiene el código fuente con algún detalle más. Si se pulsa la tecla retroceso, el rectángulo vuelve a su origen. Así mismo si se pulsa la tecla escape se termina la aplicación.

Conclusiones.

En esta entrada hemos visto:

  • Cómo usar los objetos definidos en el editor desde código.
  • Cómo trasladar objetos desde código.
  • Cómo rotar objetos desde código.

Saludos

  1. Editada la entrada. No siempre es necesario realizar este paso. Según el comentario Michalis, para más información visitar: https://castle-engine.io/wp/2022/10/16/published-state-fields-are-now-automatically-initialized-no-need-in-most-cases-for-designedcomponent-calls/ ↩︎
2 comentario en “Castle Game Engine. Traslación y rotación”
  1. Thank you for the article! I noticed one small possible improvement:

    You should not need to use the line

    «»»
    Box1 := DesignedComponent(‘Box1’) as TCastleBox;
    «»»

    in TViewMain.Start . You can actually just remove it, and the example will work the same 🙂 That’s because the «Box1: TCastleBox» is already declared in the «published» section of the view, and so at «Start» it will be automatically set to point to the «Box1» component in your design.

    See https://castle-engine.io/wp/2022/10/16/published-state-fields-are-now-automatically-initialized-no-need-in-most-cases-for-designedcomponent-calls/ .

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio esta protegido por reCAPTCHA y laPolítica de privacidady losTérminos del servicio de Googlese aplican.

El periodo de verificación de reCAPTCHA ha caducado. Por favor, recarga la página.