Функции - инициализации Z-буфера

Pixilang по русски
Post Reply
Several light
Posts: 68
Joined: Sun Jun 28, 2009 11:07 pm

Функции - инициализации Z-буфера

Post by Several light »

Заранее извиняюсь за некоторую недоделанность так как задумка ещё пока в некотором плане на стадии идеи, также за то что в названии описано не всё.
Идея была обеспечить программе(занимающийся циклической отрисовкой чего бы то ни было) возможность расширять пространство для отрисовки вместе с увиличением размеров окна, а также вместе с отрисовкой выводить дополнительную информацию если нужно. В примере ниже попытался сделать набросок на примере с использованием Z-буфера (так как процесс его инициализации тоже привязан к размерам рабочей области).
scr_init(1)

//Set perspective matrix:
matrix = new( 4, 4, FLOAT )
clean( matrix )
t_reset()
t_get_matrix( matrix )
matrix[ 2 * 4 + 3 ] = -0.003

start_timer( 0 )
//---


k=300

while(1){

t = get_timer( 0 )

scr_init(0,1,128)

t_set_matrix( matrix )
t_rotate( t / 20, 0.8, 0.9, 1 )

//back k/2
line3d(-k/2,-k/2,k/2,k/2,-k/2,k/2,WHITE)
line3d(-k/2,k/2,k/2,k/2,k/2,k/2,WHITE)
line3d(-k/2,k/2,k/2,-k/2,-k/2,k/2,WHITE)
line3d(k/2,k/2,k/2,k/2,-k/2,k/2,WHITE)

//sides k/2 -> -k/2
line3d(-k/2,-k/2,k/2,-k/2,-k/2,-k/2,RED)
line3d(-k/2,k/2,k/2,-k/2,k/2,-k/2,GREEN)
line3d(k/2,-k/2,k/2,k/2,-k/2,-k/2,BLUE)
line3d(k/2,k/2,k/2,k/2,k/2,-k/2,WHITE)

//front -k/2
line3d(-k/2,-k/2,-k/2,k/2,-k/2,-k/2,RED)
line3d(-k/2,k/2,-k/2,k/2,k/2,-k/2,GREEN)
line3d(-k/2,k/2,-k/2,-k/2,-k/2,-k/2,BLUE)
line3d(k/2,k/2,-k/2,k/2,-k/2,-k/2,WHITE)

t_reset()

scr_draw(1,128)

}

//function list-------------------------

//Init screen
fn scr_init($init){
if $init==0{
remove(zbuf)
}
wx=WINDOW_XSIZE
wy=WINDOW_YSIZE
xk=-(wx/2)
yk=-(wy/2)

resize(0,wx,wy)

zbuf = new( wx, wy, INT32 )
set_zbuf( zbuf )
clean( zbuf, -2000000000 )
clear()

}

fn scr_draw($info,$info_transp){
//info
transp($info_transp)
if $info==1 {
$ts = ""
sprintf( $ts, "FPS:%u", FPS )
print( $ts, xk, yk, WHITE, TOP | LEFT )
}
transp(255)
frame()
}
Post Reply