Julio 11, 2014, 02:44:50 AM Ultima modificación: Julio 11, 2014, 06:47:53 PM por Iros
Buenas, he vuelto al 3D y la verdad que sigo teniendo el mismo problema de siempre, pero en vez de ser en :GM8: es en :GMS: (cosa que en :GMS: la iluminación mejoró un poco pero sigo sin saber como usarla al 100%).

El problema es simple, la solución no se, alguien que sepa más del tema que yo de seguro me sabrá responder.

Tengo el juego, cargo modelos, defino un modelo (faro) como punto de luz pero a la hora de crear la luz no se me ilumina el suelo o se ilumina muy poco (o desaparece varias veces). Acá dejo una captura:

[spoiler][/spoiler]

El código que tengo es el siguiente:

Evento Create:
[gml]
light_id = floor( random( 7 ) );
d3d_light_define_point( light_id, x, y, 5, 150, c_white);
d3d_light_enable( light_id, true);[/gml]

Defino un punto de luz con id aleatoria de 0 a 7 debido a que :GMS: solo maneja hasta 8 puntos de luz.

Ahora la pregunta del millón, ¿cómo puedo solucionar este problema? He visto un ejemplo muy bueno pero utiliza Shaders y la verdad que ni entiendo como funcionan y/o se usan.

Cualquiera que sepa sobre el tema y pueda ayudarme, va a ser muy bien recibida su respuesta :D

Hola, lo principal es que falta poner [gml]d3d_set_lighting( true );[/gml] y usar random no es necesario, simplemente escribe [gml]light_id = 1;[/gml]
Además puede ser necesario revisar que los vértices de el piso no estén demasiado alejados del punto de luz (en caso de que la iluminación se haga por vértices), y que la cara visible esté hacia arriba.

#2 Julio 11, 2014, 05:01:46 AM Ultima modificación: Julio 11, 2014, 06:38:52 PM por Iros
La iluminación la seteo verdadero en la cámara al igual que las sombras, en cuanto a la id, ¿no sería problema con los demás focos de luz o se comportan de manera totalmente separadas?

Y ahora que lo pienso, el piso es un d3d_draw_floor(); y la verdad que es un solo donde los vértices quedan completamente alejados uno de otro, ¿cómo podría hacer una iluminación para ese tipo de modelos?

[EDIT]

Solucionado, dibujé el suelo en varios sectores con el siguiente código en un objeto nuevo.

Evento Create:
[gml]
model = d3d_model_create();
var xx, yy;
xx = 0
yy = 0
do {
    d3d_model_floor(model,xx*16+16,yy*16,0,xx*16,yy*16+16,0,1,1);
    if xx < room_width {
        xx += 1
    } else {
        xx = 0
        yy += 1
    }
}
until yy > room_height
[/gml]

Evento Draw:
[gml]d3d_model_draw(model,0,0,0,background_get_texture(grassTexture));[/gml]

Y acá una captura de como se ve ahora:

[spoiler][/spoiler]

PD: Tengo que arreglar algunos problemas de resolución pero no le hace tanto ahora.