Code: Select all
// 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
http://www.picamatic.com/show/2009/02/0 ... _41x77.gif