Идея была обеспечить программе(занимающийся циклической отрисовкой чего бы то ни было) возможность расширять пространство для отрисовки вместе с увиличением размеров окна, а также вместе с отрисовкой выводить дополнительную информацию если нужно. В примере ниже попытался сделать набросок на примере с использованием 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()
}