2012-03-18 9 views
8

Hola, estoy usando Firemonkey debido a sus capacidades de plataforma cruzada. Quiero renderizar un sistema de partículas. Ahora estoy usando un TMesh que funciona lo suficientemente bien como para mostrar las partículas rápidamente. Cada partícula se representa en la malla a través de dos triángulos texturizados. Usando diferentes coordenadas de textura puedo mostrar muchos tipos de partículas diferentes con la misma malla. El problema es que cada partícula puede tener su propia transparencia/opacidad. Con mi enfoque actual no puedo establecer la transparencia individual para cada triángulo (o incluso vértice). ¿Que puedo hacer?¿Cómo dibujar miles de Sprites con diferente transparencia?

Me di cuenta de que hay otras propiedades en TMesh.Data.VertexBuffer, como Diffuse u otros conjuntos de texturas (TexCoord1-3), pero estas propiedades no se utilizan (ni siquiera se inicializan) en TMesh. Tampoco parece fácil simplemente cambiar este comportamiento al heredar de TMesh. Parece que uno tiene que heredar de un control de nivel inferior para inicializar el VertextBuffer con más propiedades. Antes de intentar eso, me gustaría preguntar si sería posible controlar la transparencia de un triángulo con eso. P.ej. ¿Puedo establecer un color transparente (Difuso) o usar una textura transparente (TextCoor1)? ¿O hay una mejor manera de dibujar las partículas en Firemonkey?

+2

"puedo establecer un color transparente ... o usar una textura transparente" ... ¿Por qué no lo intentas? Entonces vuelve y cuéntanos. – Ben

Respuesta

0

Admito que no sé mucho sobre ese marco en particular, pero no debería ser capaz de cambiar la transparencia a través de puntos de vértice en un modelo 3D. Los puntos son usualmente coordenadas x, y, z. Ahora, los puntos de vértice tendrían un efecto sobre cómo se encienden los sprites si está utilizando un sistema de iluminación. También puede usar la información de vértice para aplicar diferentes efectos de transparencia

Ahora, probablemente haya una docena de maneras diferentes de hacerlo. Por lo general, tiene una textura con diferentes grados de valores alfa que se pueden establecer en tiempo de ejecución. Las API de gráficos generalmente tienen alguna función de filtrado que puede aplicar rápidamente valores a sprites/texturas, y una buena usará su chip gráfico, si está disponible.

Si puede usar un efecto, generalmente es mejor ya que la forma nuclear es hacer un montón de copias diferentes de un objeto y luego aplicarles efectos individualmente. Si está usando Gouraud Shading, entonces es más fácil ya que Gouraud usa código para completar la información de textura.

Ahora, ¿está usando partículas de luz? Algunas API de gráficos en realidad tienen un código que genera partículas ligeras.

Editar: Acabo de recordar Vertex Shaders, que podría.

Cuestiones relacionadas