Noticias

Importante: ¡Si quieres publicar tu juego no olvides leer este tema!

Comunidad Game Maker

Bienvenid@ a la comunidad hispana de Game Maker. Nuestro objetivo es crear videojuegos y dar soporte en castellano de GM. Para mejorar nuestro servicio hemos implantado, como adicion al reglamento general, algunas normas especificas en los subforos más comunes. ¡No olvides informarte antes de participar!.

Autor Tema: Modelo 3D con color y alpha variables  (Leído 198 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado DarkKRuleR

en: Julio 22, 2020, 04:11:43 pm
¡Buenas! Pues yo creo en Create de un objeto controlador modelos usando las funciones d3d_model_create, d3d_model_primitive_begin y d3d_model_vertex_texture. Entonces a la hora de dibujarlo con d3d_model_draw, yo puedo hacerle antes un draw_set_color y un draw_set_alpha sin problemas, y se aplica correctamente. El problema es cuando el modelo lo creo con d3d_model_vertex_texture_colour, pues es necesario que diferentes vértices tengan diferentes alphas y colores. Al dibujarlo, me ignora el draw_set_color y el draw_set_alpha.

Es NECESARIO usar modelos, pues sin ellos iría demasiado lento. Logré resolver esto creando 10 modelos distintos, copia, cada uno con colores distintos en los vértices, y llamando a cada uno según la situación, pero a futuro con otros modelos sería una locura seguir con esta técnica, y molaría hacer limpieza de modelos innecesarios. ¿Alguna forma de que un modelo con alphas y colores definidos en sus vértices, tenga en cuenta el draw_set_color y draw_set_alpha? Que el segundo se aplique, se sume, sobre el del modelo, básicamente. Igual que cuando tengo un sprite con colores distintos en distintos pixeles (modelo con colores distintos en distintos vertices) y le aplico el color encima con draw_set_color, etc.

 


No Tienes Permisos Para Dar Puntos
point 0 Puntos

Este tema no recibió puntos.


Desconectado dixon

Respuesta #1 en: Julio 22, 2020, 07:46:27 pm
Hola gusto en saludarlo.

Cuando las cosas se ponen dificiles en game maker, entonces hay que crear editores.

La tecnica que mencionas como locura es bastante genial si se mira desde un punto de vista distinto.

Dejame alardear un rato: "cuando el programador no puede programar del mismo modo porque la cantidad de codigos es exagerada entonces debe crear editores de codigo que hagan el trabajo pesado, entonces el programador ya no escribe codigos sino que contruye estructuras complejas presionando un par de botones".

Mi recomendacion es que sigas usando los 10 modelos, pero crea un editor de modelos 3D a tu medida, que facilite la creacion de estructuras arquitectonicas complejas y que devuelva el codigo necesario, el cual estaria compuesto por draw_set_color y draw_set_alpha.

Ahora bien, no estoy queriendo decir que contruyas un autocad 2020, solo un pequeño programa que ubique los 10 modelos en algun punto en el espacio 3D empleando el mouse y las teclas del cursor, donde se pueda definir sus colores y su alpha, inclusive su textura, presionando algunos botones de la interface. Luego que exista un boton llamado "generar codigo gmk" y que al presionarlo cree un archivo de texto con el codigo usado.




Si Dios quiere; Limpiaré la oficina, puliré el piso y les serviré café a todos, luego, me enseñarán a programar e iré a comprarles más café.
 


Desconectado DarkKRuleR

Respuesta #2 en: Julio 24, 2020, 11:15:02 pm
¡Buenas! Gracias, pero me expliqué mal. Da igual si creo los modelos manualmente o mediante una aplicación que yo haga. El problema es, que en ambos casos, debería usar d3d_model_vertex_texture_colour para definir colores en distintos puntos del modelo. Y al dibujar ese modelo, ignora mis draw_set_color, cuando quiero que se mezclen. Draw_set_alpha no sirve para esta tarea, pues debo definir el alpha (y color) de cada vértice con el método descrito, creo.

 


Desconectado bygdle

  • Flota de Justicia Particular.
  • Moderadores globales
  • Okupa
  • *
  • Puntos: 2834
  • Mensajes: 1.709
  • Agradecido: 145 veces
  • Sexo: Masculino
  • Thomas the dank engine.
    • Ver Perfil
Respuesta #3 en: Julio 25, 2020, 12:29:33 am
Tendrías que hacer tú mismo el cálculo del color resultante para cada vértice de los modelos. Se me ocurre algo así:

Para establecer el color y alpha de blending para los modelos tendrías que utilizar una variable global y un script diferente:
///Algún evento create
global.color = c_white;
global.alpha = 1;
Luego, un script para establecer el color y alpha de blending para los modelos:
///draw_set_color2(color, alpha);
global.color = argument0;
global.alpha = argument1;

Luego, un script para obtener el color resultante de la mezcla:
(GM utiliza el "darken blending mode", que selecciona el menor de los componentes de color RGB.)
///color2(color);

return make_colour_rgb(
    min(colour_get_red(argument0), colour_get_red(global.color)),
    min(colour_get_green(argument0), colour_get_green(global.color)),
    min(colour_get_blue(argument0), colour_get_blue(global.color))
);
Y por último, un script para obtener el alpha resultante:
///alpha2(alpha);
return argument0*global.alpha;

Ahora, cuando quieras dibujar figuras que respondan tanto a su color de vértice como al "color global", tendrías que hacer algo así:
/// Evento Draw
draw_set_color2(c_yellow, 0.5);

d3d_primitive_begin(pr_trianglestrip);

d3d_vertex_colour(100, 100, 0, color2(c_white), alpha2(1));
d3d_vertex_colour(200, 200, 100, color2(c_gray), alpha2(1));
d3d_vertex_colour(150, 100, 200, color2(c_black), alpha2(1));

d3d_primitive_end();
Dibujé primitivas, pero creo que también funcionará en vértices de modelos.

alaberga regué el café.

BA:STFW&RTFM
 


Desconectado Clamud

Respuesta #4 en: Julio 25, 2020, 08:20:40 pm
Otra forma que se me ocurre es que las texturas tengan el color y transparencia adecuados para la zona en que se aplican. Pero seguro que esto va a complicar mucho el texturizado.

Otra opción es dibujar a traves  de un shader. No estoy seguro si los shader que sirven para colorear sprites en 2D sirven cuando se activa d3d.

 


Desconectado DarkKRuleR

Respuesta #5 en: Julio 27, 2020, 08:27:38 pm
@bygdle, agradezco la explicación elaborada, pero (más o menos) eso es lo que ya hacía, y precisamente lo haces con primitivas.

Citar
Dibujé primitivas, pero creo que también funcionará en vértices de modelos.

Precisamente el problema es que con modelos NO funciona. Ignora totalmente el draw_set_alpha y draw_set_color y toma los definidos por el modelo, los inmutables.

@Clamud Sin duda... bastante complicado tengo ya las texturas como para eso xD Y serían demasiadas, tengo que tener muchos tonos de color. Lo del shader no entendí...

EDIT: Vale. Entre una cosa y otra lo he resuelto. Activé la fog en negro, y segun la distancia, los objetos se van oscureciendo, así que lo pude reducir a sólo 1 modelo donde ya no necesito que sus vértices tengan colores dinámicos, pues el fog ya lo hace. Aunque por si alguien sabe, dejo esto abierto, quizás a futuro hace falta para otra cosa...
« última modificación: Julio 28, 2020, 09:25:28 pm por DarkKRuleR »

 


Desconectado Clamud

Respuesta #6 en: Julio 31, 2020, 06:03:49 pm
Los shaders para sprites sí funcionan con modelos 3D.
Usé estos shaders
https://marketplace.yoyogames.com/assets/261/free-shaders

Probé de esta forma
shader_set(shd_thermal);
    d3d_draw_ellipsoid(200, 200, 0, 400, 400, 300, -1, 1, 1, 8);
shader_reset();