guLookAtHilite
Creates the viewing matrix (fixed point) and sets the LookAt/Hilite structures
#include <ultra64.h> /* gu.h */
void guLookAtHilite(
Mtx *m,
LookAt *l,
Hilite *h,
float xEye,
float yEye,
float zEye,
float xAt,
float yAt,
float zAt,
float xUp,
float yUp,
float zUp,
float xl1,
float yl1,
float zl1,
float xl2,
float yl2,
float zl2,
int twidth,
int theight);
None
This function returns a viewing matrix to the structure indicated by m. It also sets the x,y screen coordinate directions in the LookAt structure in order to render specular highlights, and it sets the texture offsets used for the rendering of two specular highlights in the Hilite structure. For details about the fixed point format, see gSPMatrix. Floating point is handled with the guLookAtHiliteF function.
The arguments that this function shares in common with guLookAt also share the same meanings. Use gDPSetHilite1Tile or gDPSetHilite2Tile to set the texture parameters (the Hilite structure) for the rendering of specular highlights. Use the gSPLookAt function to set the texture settings (the LookAt structure) for specular highlights.
For details, see Section 11.7.4 "Specular Highlights" in the N64 Programming Manual.
If you are only going to render one specular highlight, be sure to set xl2, yl2, and zl2 to 0. Also, note that both twidth and theight must be powers of 2.
The Mtx structure looks like this:
typedef long Mtx_t[4][4];
typedef union {
Mtx_t m;
long long int force_structure_alignment;
} Mtx;
The LookAt structure looks like this:
typedef struct {
unsigned char col[3]; /* Diffuse light value (RGBA) */
char pad1;
unsigned char colc[3]; /* Copy of diffuse light value (RGBA) */
char pad2;
signed char dir[3]; /* Direction toward light source (normalized) */
char pad3; /* IMPORTANT: dir must be smaller than 127 */
} Light_t;
typedef union {
Light_t l;
long long int force_structure_alignment[2];
} Light;
typedef struct {
Light l[2];
} LookAt;
* Note that here the Light structure is not utilized in the normal way: l[0].dir is for the x,y,z components of the viewing space in the x direction of the screen space, while l[1].dir is for the x,y,z components of the viewing space in the y direction of the screen space.
The Hilite structure looks like this:
typedef struct {
int x1, y1, x2, y2; /* Texture offsets for specular highlights */
} Hilite_t;
typedef union {
Hilite_t h;
long int force_structure_alignment[4];
} Hilite;
gDPSetHilite1Tile, gDPSetHilite2Tile, gSPLookAt, gSPMatrix, guLookAt, guLookAtF, guLookAtHiliteF, guLookAtReflect, and guLookAtReflectF
03/01/99 Completely rewritten.