add ugly matrix-generating macros; set near-far planes
This commit is contained in:
parent
386b4ad19d
commit
4ecb1e5f1f
2 changed files with 64 additions and 18 deletions
28
dlist.asm
28
dlist.asm
|
@ -207,30 +207,22 @@ viewport:
|
||||||
dh WIDTH/2*4, HEIGHT/2*4, 0x000, 0 // translation
|
dh WIDTH/2*4, HEIGHT/2*4, 0x000, 0 // translation
|
||||||
|
|
||||||
view_mat0:
|
view_mat0:
|
||||||
dh 0, 0, 0, 0
|
Mat.X($0000'C000, $0000'0000, $0000'0000, $0000'0000)
|
||||||
dh 0, 1, 0, 0
|
Mat.Y($0000'0000, $0001'0000, $0000'0000, $0000'0000)
|
||||||
dh 0, 0, 1, -1 // <- FOV?
|
Mat.Z($0000'0000, $0000'0000, $FFFF'FF7D, $FFFF'0000)
|
||||||
dh 0, 0, 0, 0
|
Mat.W($0000'0000, $0000'0000, $0000'CCC0, $0000'0000)
|
||||||
|
Mat.rix()
|
||||||
dh 0xC000, 0, 0, 0 // 3/4 for a 4:3 aspect ratio
|
|
||||||
dh 0, 0, 0, 0
|
|
||||||
dh 0, 0, 0, 0
|
|
||||||
dh 0, 0, 0, 0
|
|
||||||
|
|
||||||
view_mat1:
|
view_mat1:
|
||||||
// xx 0x00, xy 0x02, xz 0x04, xw 0x06
|
// xx 0x00, xy 0x02, xz 0x04, xw 0x06
|
||||||
// yx 0x08, yy 0x0A, yz 0x0C, yw 0x0E
|
// yx 0x08, yy 0x0A, yz 0x0C, yw 0x0E
|
||||||
// zx 0x10, zy 0x12, zz 0x14, zw 0x16
|
// zx 0x10, zy 0x12, zz 0x14, zw 0x16
|
||||||
// wx 0x18, wy 0x1A, wz 0x1C, ww 0x1E
|
// wx 0x18, wy 0x1A, wz 0x1C, ww 0x1E
|
||||||
dh 1, 0, 0, 0
|
Mat.X($0001'0000, $0000'0000, $0000'0000, $0000'0000)
|
||||||
dh 0, 1, 0, 0
|
Mat.Y($0000'0000, $0001'0000, $0000'0000, $0000'0000)
|
||||||
dh 0, 0, 1, 0
|
Mat.Z($0000'0000, $0000'0000, $0001'0000, $0000'0000)
|
||||||
dh 0, -44, -192, 1
|
Mat.W($0000'0000, $FFD4'0000, $FF80'0000, $0001'0000)
|
||||||
|
Mat.rix()
|
||||||
dh 0, 0, 0, 0
|
|
||||||
dh 0, 0, 0, 0
|
|
||||||
dh 0, 0, 0, 0
|
|
||||||
dh 0, 0, 0, 0
|
|
||||||
|
|
||||||
model_mat:
|
model_mat:
|
||||||
MatObject(0,0,0, 0x0800)
|
MatObject(0,0,0, 0x0800)
|
||||||
|
|
|
@ -43,6 +43,60 @@ macro MatEye() {
|
||||||
dh 0x0000, 0x0000, 0x0000, 0x0000
|
dh 0x0000, 0x0000, 0x0000, 0x0000
|
||||||
}
|
}
|
||||||
|
|
||||||
|
macro Matrix(variable xx, variable xy, variable xz, variable xw, variable yx, variable yy, variable yz, variable yw, variable zx, variable zy, variable zz, variable zw, variable wx, variable wy, variable wz, variable ww) {
|
||||||
|
// no floats in bass expressions unfortunately...
|
||||||
|
// signed integer part
|
||||||
|
dh xx >> 16, xy >> 16, xz >> 16, xw >> 16
|
||||||
|
dh yx >> 16, yy >> 16, yz >> 16, yw >> 16
|
||||||
|
dh zx >> 16, zy >> 16, zz >> 16, zw >> 16
|
||||||
|
dh wx >> 16, wy >> 16, wz >> 16, ww >> 16
|
||||||
|
|
||||||
|
// fractional part
|
||||||
|
dh xx & 0xFFFF, xy & 0xFFFF, xz & 0xFFFF, xw & 0xFFFF
|
||||||
|
dh yx & 0xFFFF, yy & 0xFFFF, yz & 0xFFFF, yw & 0xFFFF
|
||||||
|
dh zx & 0xFFFF, zy & 0xFFFF, zz & 0xFFFF, zw & 0xFFFF
|
||||||
|
dh wx & 0xFFFF, wy & 0xFFFF, wz & 0xFFFF, ww & 0xFFFF
|
||||||
|
}
|
||||||
|
|
||||||
|
scope Mat {
|
||||||
|
define xx(0); define xy(0); define xz(0); define xw(0)
|
||||||
|
define yx(0); define yy(0); define yz(0); define yw(0)
|
||||||
|
define zx(0); define zy(0); define zz(0); define zw(0)
|
||||||
|
define wx(0); define wy(0); define wz(0); define ww(0)
|
||||||
|
|
||||||
|
macro X(variable xx, variable xy, variable xz, variable xw) {
|
||||||
|
global evaluate Mat.xx(xx)
|
||||||
|
global evaluate Mat.xy(xy)
|
||||||
|
global evaluate Mat.xz(xz)
|
||||||
|
global evaluate Mat.xw(xw)
|
||||||
|
}
|
||||||
|
|
||||||
|
macro Y(variable yx, variable yy, variable yz, variable yw) {
|
||||||
|
global evaluate Mat.yx(yx)
|
||||||
|
global evaluate Mat.yy(yy)
|
||||||
|
global evaluate Mat.yz(yz)
|
||||||
|
global evaluate Mat.yw(yw)
|
||||||
|
}
|
||||||
|
|
||||||
|
macro Z(variable zx, variable zy, variable zz, variable zw) {
|
||||||
|
global evaluate Mat.zx(zx)
|
||||||
|
global evaluate Mat.zy(zy)
|
||||||
|
global evaluate Mat.zz(zz)
|
||||||
|
global evaluate Mat.zw(zw)
|
||||||
|
}
|
||||||
|
|
||||||
|
macro W(variable wx, variable wy, variable wz, variable ww) {
|
||||||
|
global evaluate Mat.wx(wx)
|
||||||
|
global evaluate Mat.wy(wy)
|
||||||
|
global evaluate Mat.wz(wz)
|
||||||
|
global evaluate Mat.ww(ww)
|
||||||
|
}
|
||||||
|
|
||||||
|
macro rix() {
|
||||||
|
Matrix({Mat.xx}, {Mat.xy}, {Mat.xz}, {Mat.xw}, {Mat.yx}, {Mat.yy}, {Mat.yz}, {Mat.yw}, {Mat.zx}, {Mat.zy}, {Mat.zz}, {Mat.zw}, {Mat.wx}, {Mat.wy}, {Mat.wz}, {Mat.ww})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
macro MatObject(variable x, variable y, variable z, variable scale) {
|
macro MatObject(variable x, variable y, variable z, variable scale) {
|
||||||
dh scale >> 16, 0, 0, 0
|
dh scale >> 16, 0, 0, 0
|
||||||
dh 0, scale >> 16, 0, 0
|
dh 0, scale >> 16, 0, 0
|
||||||
|
|
Loading…
Add table
Reference in a new issue