clean up frustum-matrix4

db4
Joe Groff 2009-10-04 16:29:03 -05:00
parent fb4ca1ce85
commit 0c7857152b
1 changed files with 10 additions and 13 deletions

View File

@ -122,7 +122,7 @@ TYPED:: m4^n ( m: matrix4 n: fixnum -- m^n: matrix4 )
: vmerge-diagonal* ( x y -- h t ) : vmerge-diagonal* ( x y -- h t )
[ vmerge-head ] [ swap vmerge-tail ] 2bi ; inline [ vmerge-head ] [ swap vmerge-tail ] 2bi ; inline
: vmerge-diagonal ( x -- h t ) : vmerge-diagonal ( x -- h t )
0.0 float-4-with vmerge-diagonal* ; 0.0 float-4-with vmerge-diagonal* ; inline
TYPED: diagonal-matrix4 ( diagonal: float-4 -- matrix: matrix4 ) TYPED: diagonal-matrix4 ( diagonal: float-4 -- matrix: matrix4 )
[ vmerge-diagonal [ vmerge-diagonal ] bi@ ] make-matrix4 ; [ vmerge-diagonal [ vmerge-diagonal ] bi@ ] make-matrix4 ;
@ -189,16 +189,13 @@ TYPED:: rotation-matrix4 ( axis: float-4 theta: float -- matrix: matrix4 )
diagonal-m triangle-m m4+ ; diagonal-m triangle-m m4+ ;
TYPED:: frustum-matrix4 ( xy: float-4 near: float far: float -- matrix: matrix4 ) TYPED:: frustum-matrix4 ( xy: float-4 near: float far: float -- matrix: matrix4 )
matrix4 (struct) :> c [
near near near far + 2 near far * * float-4-boa ! num
float-4{ t t f f } xy near far - float-4-with v? ! denom
v/ :> fov
near near near far + 2 near far * * float-4-boa :> num fov 0.0 float-4-with vmerge-head vmerge-diagonal
float-4{ t t f f } xy near far - float-4-with v? :> denom fov float-4{ f f t t } vand
num denom v/ :> fov float-4{ 0.0 0.0 -1.0 0.0 }
] make-matrix4 ;
fov { 0 0 0 0 } vshuffle float-4{ t f f f } vbitand
fov { 1 1 1 1 } vshuffle float-4{ f t f f } vbitand
fov { 2 2 2 3 } vshuffle float-4{ f f t t } vbitand
float-4{ 0.0 0.0 -1.0 0.0 }
c set-rows ;