Автор: Al_Rado
// Al_Rado http://al-rado.ya.ru // 3d_pixel // 3d-просмотрщик спрайтов 06.02.09 logo = load_pixi ("img.gif") CUBE_PIXEL x_logo = get_pixi_xsize ( logo ) // ширина лого y_logo = get_pixi_ysize ( logo ) // высота лого start_timer( 0 ) // запускаем таймер use_mouse=0 // флаг использования мыши s = 200 // значение масштаба x_line=0 y_line=0 px_line=20 py_line=20 alfa_color = get_pixi_alpha(logo) // прозрачный цвет, например WHITE main: // главный цикл программы t = get_timer( 0 ) / 32 * 2 // переменная для изменения углов вращения, основана на данных таймера t_scale( s, s, s ) // масштабируем картинку clear(#aaaaaa) handle_pen_keys ({use_mouse=1}, {use_mouse=1 px_line=x_line py_line=y_line rx=gpx ry=gpy x_line=gpx y_line=gpy}, {use_mouse=0}) t_rotate_x( ry, 0, 0 ) // вращение по оси X t_rotate_y( rx, 0, 0 ) // вращение по оси Y sort_triangles( cube, cube_t ) // сортируем треугольники VIVOD_PIXI t_reset // очищаем все трансформации if use_mouse=0 { ry=ry+(py_line+y_line)/10 rx=rx+(px_line+x_line)/10 } frame(30) go main //////////////////////////////////////////////////////////////////// //////////////////////////ПОДПРОГРАММЫ////////////////////////////// //////////////////////////////////////////////////////////////////// VIVOD_PIXI: // отрисовка лого кубиками t_translate (-256*8*(x_logo/2)-2048,-256*8*(y_logo/2),0) // сдвигаем всё по оси X и Y в левый верхний угол (половина ширины/высоты лого * ширину кубика+промежуток ) + корректировка l=0 m=0 while m < y_logo { n=0 while n < x_logo { t_translate ( (256*8),0 ,0 ) // переводим по оси X на кубик правее if logo [l] != alfa_color { color=logo[l] COLOR_CUBE_PIXEL triangles3d( cube, cube_t ) } // если ячейка массива лого не равна нулю (любой символ кроме точки), то рисуем кубик l+1 n+1 } t_translate ( -256*8*(x_logo) ,(256*8) ,0 ) // переводим по оси Y на кубик ниже, по оси X возвращаем в начало m+1 } ret CUBE_PIXEL: // данные для построения куба s = 1200 // длинна стороны куба cube=new_array(64) cube[0]=-s cube[1]=-s cube[2]=-s cube[8]=s cube[9]=-s cube[10]=-s cube[16]=s cube[17]=s cube[18]=-s cube[24]=-s cube[25]=s cube[26]=-s cube[32]=-s cube[33]=-s cube[34]=s cube[40]=s cube[41]=-s cube[42]=s cube[48]=s cube[49]=s cube[50]=s cube[56]=-s cube[57]=s cube[58]=s cube_t=new_array(96) cube_t[0]=0 cube_t[1]=1 cube_t[2]=2 cube_t[3]=#80FF70 cube_t[4]=256 cube_t[8]=0 cube_t[9]=2 cube_t[10]=3 cube_t[11]=#80FF70 cube_t[12]=256 cube_t[16]=4 cube_t[17]=5 cube_t[18]=6 cube_t[19]=#90A0B0 cube_t[20]=256 cube_t[24]=4 cube_t[25]=6 cube_t[26]=7 cube_t[27]=#90A0B0 cube_t[28]=256 cube_t[32]=0 cube_t[33]=7 cube_t[34]=4 cube_t[35]=#909090 cube_t[36]=256 cube_t[40]=0 cube_t[41]=3 cube_t[42]=7 cube_t[43]=#909090 cube_t[44]=256 cube_t[48]=1 cube_t[49]=2 cube_t[50]=5 cube_t[51]=#FFFFFF cube_t[52]=256 cube_t[56]=2 cube_t[57]=5 cube_t[58]=6 cube_t[59]=#FFFFFF cube_t[60]=256 cube_t[64]=0 cube_t[65]=1 cube_t[66]=5 cube_t[67]=#40E0F0 cube_t[68]=256 cube_t[72]=0 cube_t[73]=4 cube_t[74]=5 cube_t[75]=#40E0F0 cube_t[76]=256 cube_t[80]=3 cube_t[81]=2 cube_t[82]=7 cube_t[83]=#909090 cube_t[84]=256 cube_t[88]=2 cube_t[89]=6 cube_t[90]=7 cube_t[91]=#909090 cube_t[92]=256 ret COLOR_CUBE_PIXEL: // одна сторона кубика - цвет пикселя, остальные осветленные/затемненные стороны color = get_color (get_red(color)+10,get_green(color)+10,get_blue(color)+10 ) cube_t[3]= color cube_t[11]= color cube_t[19]= get_color (get_red(color)/3,get_green(color)/3,get_blue(color)/3 ) cube_t[27]= get_color (get_red(color)/3,get_green(color)/3,get_blue(color)/3 ) cube_t[35]= get_color (get_red(color)/2,get_green(color)/2,get_blue(color)/2 ) cube_t[43]= get_color (get_red(color)/2,get_green(color)/2,get_blue(color)/2 ) cube_t[51]= get_color (get_red(color)*3,get_green(color)*3,get_blue(color)*3 ) cube_t[59]= get_color (get_red(color)*3,get_green(color)*3,get_blue(color)*3 ) cube_t[67]= get_color (get_red(color)*2,get_green(color)*2,get_blue(color)*2 ) cube_t[75]= get_color (get_red(color)*2,get_green(color)*2,get_blue(color)*2 ) cube_t[83]= get_color (get_red(color)/2,get_green(color)/2,get_blue(color)/2 ) cube_t[91]= get_color (get_red(color)/2,get_green(color)/2,get_blue(color)/2 ) ret