Autor Tema: Efectos visuales  (Leído 6581 veces)

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

Desconectado Yawin

  • Hero Member
  • *****
  • Mensajes: 1082
  • Karma: 44
  • Sexo: Masculino
  • La primera persona que ha "demosceneado" en Bennu.
    • Ver Perfil
Re:Efectos visuales
« Respuesta #30 en: Marzo 18, 2015, 04:18:47 pm »
¿Os imagináis un prisma pentagonal que no sea tal?

1º Ponemos cinco puntos a dar vueltas alrededor de una elipse.
2º Las duplicamos varios píxeles más abajo.
3º Conectamos todo por líneas.

¿Resultado?
https://www.youtube.com/watch?v=t1URE5YD4ag

Pero podemos mejorarlo. al pintar las líneas podemos calcular cuales se tienen que ver y cuales no.
https://www.youtube.com/watch?v=20NBLW5vsqU

Código: [Seleccionar]
import "mod_video";
import "mod_scroll";
import "mod_key";
import "mod_map";
import "mod_screen";
import "mod_proc";
import "mod_draw";
import "mod_math";
import "mod_say";
import "mod_rand";
import "mod_grproc";
import "mod_timers";

process main()
    private
        int i=0,j=80,k=0,l=0;
    end
    begin
        control();
        set_fps(120,0);
        set_mode(640,480,32,MODE_WINDOW);

        loop
            i+=cos(timer[0]*1000)*4;
            if(k==0)
                if(j++>90)k=1; end
            else
                if(j--<50)k=0; end
            end

            cubo(i,j,j);
            frame;
        end
    end

function cubo(int stepe, int _wi, int _hi)
    private
        int i,j,vertices[5][4],ci;
        int ly,ly2,v=5;
    end
    begin
        clear_screen();
        delete_draw(0);
        stepe*=1000;
        ly=210-_hi;
        ly2=220+_hi*2;

        for(i=0;i<v;i++)
            vertices[i][0]=320+cos(stepe+(i*70000))*2*_wi;
            vertices[i][1]=(240-_hi)+sin(stepe+(i*70000))*_wi;

            vertices[i][2]=320+cos(stepe+(i*70000))*2*_wi;
            vertices[i][3]=(240+_hi)+sin(stepe+(i*70000))*_wi;
        end

        drawing_color(rgb(255,255,255));

        j=0;
        for(i=0;i<v;i++)
            if(vertices[i][1]>ly)
                if(i>0)
                    if(vertices[i][3]>ly2 || vertices[j][3]>ly2)
                        if(j==i+1 || j==i-1)
                            draw_line(vertices[i][2],vertices[i][3],vertices[j][2],vertices[j][3]);
                        end
                    end
                else
                    ci=i;
                end
                draw_line(vertices[i][0],vertices[i][1],vertices[i][2],vertices[i][3]);
                j=i;
            end

            if(i<v-1)
                draw_line(vertices[i][0],vertices[i][1],vertices[i+1][0],vertices[i+1][1]);
            else
                draw_line(vertices[0][0],vertices[0][1],vertices[i][0],vertices[i][1]);
            end
        end
        if(vertices[ci][3]>ly2+10 || vertices[j][3]>ly2+5)
            draw_line(vertices[ci][2],vertices[ci][3],vertices[j][2],vertices[j][3]);
        end
    end

process control()
    begin
        loop if(key(_esc)) exit(0); end frame; end
    end
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end