Compare commits

...

2 Commits

Author SHA1 Message Date
ba8201acee cube: enable backface culling 2024-09-03 23:26:29 -05:00
a6a18162bf cube: add perspective matrix 2024-09-03 23:26:20 -05:00

View File

@ -45,14 +45,32 @@ void main()
// load identity matrices // load identity matrices
io_registers.a.MTX_MODE = MTX_MODE__matrix_mode__projection; io_registers.a.MTX_MODE = MTX_MODE__matrix_mode__projection;
io_registers.a.MTX_IDENTITY = 0; io_registers.a.MTX_IDENTITY = 0;
// scale everything by 1/2
io_registers.a.MTX_SCALE = (1 << 12) / 2; // load a symmetric perspective matrix, with aspect ratio correction
io_registers.a.MTX_SCALE = (1 << 12) / 2; io_registers.a.MTX_LOAD_4X4 = (192 << 12) / 256;
io_registers.a.MTX_SCALE = (1 << 12) / 2; io_registers.a.MTX_LOAD_4X4 = 0;
// scale the x-axis by the ratio of the display height by the display width. io_registers.a.MTX_LOAD_4X4 = 0;
io_registers.a.MTX_SCALE = (192 << 12) / 256; io_registers.a.MTX_LOAD_4X4 = 0;
io_registers.a.MTX_SCALE = 1 << 12;
io_registers.a.MTX_SCALE = 1 << 12; io_registers.a.MTX_LOAD_4X4 = 0;
io_registers.a.MTX_LOAD_4X4 = 1 << 12;
io_registers.a.MTX_LOAD_4X4 = 0;
io_registers.a.MTX_LOAD_4X4 = 0;
io_registers.a.MTX_LOAD_4X4 = 0;
io_registers.a.MTX_LOAD_4X4 = 0;
io_registers.a.MTX_LOAD_4X4 = 0;
io_registers.a.MTX_LOAD_4X4 = -(1 << 12);
io_registers.a.MTX_LOAD_4X4 = 0;
io_registers.a.MTX_LOAD_4X4 = 0;
io_registers.a.MTX_LOAD_4X4 = -(1 << 12);
io_registers.a.MTX_LOAD_4X4 = 0;
// translate the viewpoint
io_registers.a.MTX_TRANS = 0;
io_registers.a.MTX_TRANS = 0;
io_registers.a.MTX_TRANS = -3 << 12;
io_registers.a.MTX_MODE = MTX_MODE__matrix_mode__position; io_registers.a.MTX_MODE = MTX_MODE__matrix_mode__position;
io_registers.a.MTX_IDENTITY = 0; io_registers.a.MTX_IDENTITY = 0;
@ -71,12 +89,11 @@ void main()
// set the depth buffer clear value to the maximum value // set the depth buffer clear value to the maximum value
io_registers.a.CLEAR_DEPTH = CLEAR_DEPTH__value(0x7fff); io_registers.a.CLEAR_DEPTH = CLEAR_DEPTH__value(0x7fff);
// the following polygons are fully opaque and are not // the following polygons are fully opaque; backface culling is
// backface-culled // enabled
io_registers.a.POLYGON_ATTR = 0 io_registers.a.POLYGON_ATTR = 0
| POLYGON_ATTR__alpha_value(31) | POLYGON_ATTR__alpha_value(31)
| POLYGON_ATTR__render_front_surface__enable | POLYGON_ATTR__render_front_surface__enable;
| POLYGON_ATTR__render_back_surface__enable;
// the 3d viewport is the entire display area // the 3d viewport is the entire display area
io_registers.a.VIEWPORT = 0 io_registers.a.VIEWPORT = 0