@ -40,6 +40,7 @@ void world_load(const u_long *data, world_t *world)
void world_draw ( const world_t * world )
{
SVECTOR vecs [ 3 ] ;
int p ;
/ / The world doesn ' t move , so we just set the camera view - projection matrix
@ -51,16 +52,27 @@ void world_draw(const world_t *world)
const ps1bsp_face_t * face = & world - > faces [ faceIdx ] ;
const CVECTOR * col = & colors [ faceIdx % numColors ] ;
for ( int triangleIdx = 0 ; triangleIdx < face - > numTriangles ; + + triangleIdx )
const ps1bsp_triangle_t * tri = & world - > triangles [ face - > firstTriangleId ] ;
for ( int triangleIdx = 0 ; triangleIdx < face - > numTriangles ; + + triangleIdx , + + tri )
{
const ps1bsp_triangle_t * tri = & world - > triangles [ face - > firstTriangleId + triangleIdx ] ;
/ / Naively draw the triangle with GTE , nothing special or optimized about this
SVECTOR * v0 = ( SVECTOR * ) & world - > vertices [ tri - > vertex0 ] ;
SVECTOR * v1 = ( SVECTOR * ) & world - > vertices [ tri - > vertex1 ] ;
SVECTOR * v2 = ( SVECTOR * ) & world - > vertices [ tri - > vertex2 ] ;
const ps1bsp_vertex_t * v0 = & world - > vertices [ tri - > vertex0 ] ;
const ps1bsp_vertex_t * v1 = & world - > vertices [ tri - > vertex1 ] ;
const ps1bsp_vertex_t * v2 = & world - > vertices [ tri - > vertex2 ] ;
vecs [ 0 ] . vx = v0 - > x ; vecs [ 0 ] . vy = v0 - > y ; vecs [ 0 ] . vz = v0 - > z ;
vecs [ 1 ] . vx = v1 - > x ; vecs [ 1 ] . vy = v1 - > y ; vecs [ 1 ] . vz = v1 - > z ;
vecs [ 2 ] . vx = v2 - > x ; vecs [ 2 ] . vy = v2 - > y ; vecs [ 2 ] . vz = v2 - > z ;
gte_ldv3c ( vecs ) ;
/ / This method * should * work but it doesn ' t on real hardware , for some reason .
/ / Perhaps the PS1 doesn ' t like loading data from random far - off memory locations directly into GTE registers ?
/ / We probably want to use the scratchpad memory to prepare the vertex data for the GTE anyway .
/ / SVECTOR * v0 = ( SVECTOR * ) & world - > vertices [ tri - > vertex0 ] ;
/ / SVECTOR * v1 = ( SVECTOR * ) & world - > vertices [ tri - > vertex1 ] ;
/ / SVECTOR * v2 = ( SVECTOR * ) & world - > vertices [ tri - > vertex2 ] ;
/ / gte_ldv3 ( v0 , v1 , v2 ) ;
gte_ldv3 ( v0 , v1 , v2 ) ;
gte_rtpt ( ) ; / / Rotation , translation , perspective projection
/ / Normal clipping for backface culling