Página 1 de 1

[RESOLVIDO]GMS 1.4: 3D: Como desenhar pensado no CPU?

Enviado: Dom Set 03, 2017 2:44 pm
por Cambalinho
pensando no 'for' para desenhar(o chão\tecto por exemplo), como o posso fazer sem usar muito CPU?
eis o meu codigo actual:

Código: Selecionar todos

//no Draw evento:
var cutup=50; //ainda não entendi o 50.. foi ajuda noutro forum
var chunkwidth=w/cutup;
var chunkheight=h/cutup;
for (var i=0; i<cutup; i+=1)
{
    for (var j=0; j<cutup; j+=1)
    {
        if chunkheight*(j+1)>h then break;
        d3d_draw_floor(chunkwidth*i,chunkheight*j,0,chunkwidth*(i+1),chunkheight*(j+1),0, background_get_texture(bkgFloor),1,1);
    }
    if chunkwidth*(i+1)>w then break;
}
o chão é desenhado, mas usa mais CPU. como posso evitar usar muito CPU?
eu fiz este codigo para evitar 1 defeito na luz 3D. por alguma razão a luz não funciona em determinada distancia... o chão desaparece e o tecto tambem(mas as paredes não, excepto paredes mais comprimadas).
eu aceito dicas e correções do que aprendi

Re: GMS 1.4: 3D: Como desenhar pensado no CPU?

Enviado: Seg Set 11, 2017 11:38 am
por Yakooda
É melhor vc usar tileset

Re: GMS 1.4: 3D: Como desenhar pensado no CPU?

Enviado: Seg Set 11, 2017 4:57 pm
por Cambalinho
eu resolvi desta forma mais simplificada:

Código: Selecionar todos

//draw it on x,y position:
d3d_transform_set_identity();
d3d_transform_add_rotation_z(0);
d3d_transform_add_translation(x,y,0);

//divide the object size with texture size(if uses very CPU, depending on object size and texture size, multiply by 2 or 3, and see if the vrepeat\hrepeat are correct):
var stepswidth=w/background_get_width(bkgWall);
var stepsheight=h/background_get_height(bkgWall);


for (var stepx=0; stepx<stepswidth; stepx+=1)
{
    for (var stepy=0; stepy<stepsheight; stepy+=1)
    {
        //draw it 4X4 repetion:
        d3d_draw_wall(background_get_width(bkgWall)*(stepx+1),background_get_height(bkgWall)*(stepy),500,background_get_width(bkgWall)*stepx,background_get_height(bkgWall)*stepy,0, background_get_texture(bkgWall),4,4);
    }
}
d3d_transform_set_identity();
//Don't forget, when we need change the control face,
//we must change the 3 arguments with other 3,
//or it will be black and don't show the texture
leitores: nunca se esqueçam de trocar os primeiros 3 argumentos com os outros 3(falando dos seis argumentos), quando precisam de mudar a face do control. senão não é mostrada a textura mas sim 1 rectângulo preto(nunca se esqueçam desta regra)
muito obrigado a todos