Quiero generar una pista de carreras tridimensional alrededor de una spline que describa su forma. Aquí hay un video ilustrativo .
La pista debe ser un túnel sin fin que se extienda a lo largo de una spline 3D, con algunos obstáculos. Mi mejor idea hasta ahora ha sido alzar una forma circular a lo largo de la spline.
También me gustaría algunos consejos sobre cómo administrar la geometría, es decir, cómo crearla desde la operación loft, administrar su 'ciclo de vida' en memoria, colisión y texturizado.
opengl
3d
racing
procedural
Valentin Galea
fuente
fuente
Respuestas:
No estoy seguro de en qué idioma está trabajando, pero hay un ejemplo de extrusión de malla de procedimiento para Unity3D ubicado aquí:
http://unity3d.com/support/resources/example-projects/procedural-examples
Estoy seguro de que podría mirar el código y modificarlo para su situación.
EDITAR: Estoy trabajando en un juego que utiliza un sistema de rieles extruidos de procedimiento como el que está comenzando, pero está en C # en Unity3d. Le daré una descripción general de cómo creo mi extrusión de riel basada en una ruta de Cubic Bezier, por lo que, aunque la malla del riel se genera de manera procesal, se basa en la ruta de Bezier que defino con anticipación en un editor. Sería como un editor de niveles en el caso de tu juego, en mi caso, está diseñando mesas de pinball. A continuación se muestra un ejemplo de cómo lo estoy haciendo:
1.) Construir / Buscar e implementar una clase de Bezier Path. Esto le dará los datos de origen para su extrusión de malla. Aquí hay uno en C # que puede portar a C ++.
http://forum.unity3d.com/threads/32954-Waypoints-and-constant-variable-speed-problems?p=213942
2.) Una vez que haya creado una ruta Bezier, se muestrean los puntos de datos de esta ruta. Esto se puede hacer a través del método Interp en la clase proporcionada anteriormente. Esto le dará una lista / matriz de puntos Vector3 a lo largo del camino de Bezier.
3.) Cree una clase auxiliar para convertir los datos de ruta de Vector3 Bezier del paso 2. En este caso, tengo una clase simple llamada ExtrudedTrailSection como se define a continuación:
4.) Itere a través de sus datos de muestra de Vector3 y conviértalos en una matriz de secciones ExtrudedTrail que le proporcionan los datos de muestra y una matriz base que sería la ubicación raíz de su malla extruida.
Matrix4x4 worldToLocal = rootTransform.worldToLocalMatrix;
6.) Ahora tiene una matriz de Matrix4x4 [] y puede extruir una malla, pero primero necesitamos una malla de referencia para extruir. Tengo una clase de utilidad que creará una cara de malla circular que suministraremos al método de extrusión de malla.
7.) Encuentra el centro de estos datos:
8.) Ahora que tenemos los datos de borde y centro para una malla de cara radial, puede construir un objeto de malla usando sus datos. El vértice final en la malla es el punto central que calculamos. La malla final es solo una cara que se suministra al método de extrusión de malla del que proporcioné un ejemplo en la clase de extrusión de malla de procedimiento del paquete Unity. Nuevamente, este es mi método y obviamente tendrías que alimentar estos datos en OpenGL. Si tiene una biblioteca de utilidades en 3D que está utilizando o puede escribir su propia clase de malla, probablemente funcionaría mejor para generar su malla extruida final, ya que opengl no necesita realmente estos datos para el renderizado. Esta malla frontal solo se usa como referencia para la extrusión de malla.
9.) Encuentre los bordes exteriores de la malla circular según sea necesario mediante el método de extrusión de malla. Nuevamente, este código se proporciona en el paquete de la unidad.
10.) Alimente todos estos datos en el método de extrusión de malla.
El resultado final en mi caso se ve así ...
¡Buena suerte, tu juego se ve realmente genial! ¿Házmelo saber si lo averiguas?
Arrojar
fuente