From 7d4e4c0b34a613dd3c0220475ae4e448197522c1 Mon Sep 17 00:00:00 2001 From: Treeki Date: Sat, 12 Mar 2011 23:17:12 +0100 Subject: initial commit. now I can start playing with stuff! --- include/rvl/GXLighting.h | 94 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100755 include/rvl/GXLighting.h (limited to 'include/rvl/GXLighting.h') diff --git a/include/rvl/GXLighting.h b/include/rvl/GXLighting.h new file mode 100755 index 0000000..26139b9 --- /dev/null +++ b/include/rvl/GXLighting.h @@ -0,0 +1,94 @@ +#ifndef __GXLIGHTING_H__ +#define __GXLIGHTING_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/*---------------------------------------------------------------------------*/ +#include "rvl/GXStruct.h" + +/*---------------------------------------------------------------------------*/ +void GXInitLightAttn( + GXLightObj* lt_obj, + f32 a0, + f32 a1, + f32 a2, + f32 k0, + f32 k1, + f32 k2 ); + +void GXInitLightAttnA ( GXLightObj *lt_obj, f32 a0, f32 a1, f32 a2); +void GXInitLightAttnK ( GXLightObj *lt_obj, f32 k0, f32 k1, f32 k2 ); + +void GXInitLightSpot( + GXLightObj* lt_obj, + f32 cutoff, + GXSpotFn spot_func ); + +void GXInitLightDistAttn( + GXLightObj* lt_obj, + f32 ref_distance, + f32 ref_brightness, + GXDistAttnFn dist_func ); + + +void GXInitLightPos ( GXLightObj* lt_obj, f32 x, f32 y, f32 z ); +void GXInitLightColor ( GXLightObj* lt_obj, GXColor color ); +void GXLoadLightObjImm ( const GXLightObj* lt_obj, GXLightID light ); +void GXLoadLightObjIndx ( u32 lt_obj_indx, GXLightID light ); +void GXSetChanAmbColor ( GXChannelID chan, GXColor amb_color ); +void GXSetChanMatColor ( GXChannelID chan, GXColor mat_color ); +void GXSetNumChans ( u8 nChans ); + +void GXInitLightDir ( GXLightObj* lt_obj, f32 nx, f32 ny, f32 nz ); + +// New functions to set light direction and half-angle. +void GXInitSpecularDir ( GXLightObj* lt_obj, f32 nx, f32 ny, f32 nz ); +void GXInitSpecularDirHA( + GXLightObj* lt_obj, + f32 nx, + f32 ny, + f32 nz, + f32 hx, + f32 hy, + f32 hz ); + +void GXSetChanCtrl( + GXChannelID chan, + GXBool enable, + GXColorSrc amb_src, + GXColorSrc mat_src, + u32 light_mask, + GXDiffuseFn diff_fn, + GXAttnFn attn_fn ); + +/*---------------------------------------------------------------------------*/ +// Convenient Macros + +#define GXInitLightPosv(lo,vec) \ + (GXInitLightPos((lo), *(f32*)(vec), *((f32*)(vec)+1), *((f32*)(vec)+2))) + +#define GXInitLightDirv(lo,vec) \ + (GXInitLightDir((lo), *(f32*)(vec), *((f32*)(vec)+1), *((f32*)(vec)+2))) + +#define GXInitSpecularDirv(lo,vec) \ + (GXInitSpecularDir((lo), *(f32*)(vec), *((f32*)(vec)+1), *((f32*)(vec)+2))) + +#define GXInitSpecularDirHAv(lo,vec0,vec1) \ + (GXInitSpecularDirHA((lo), \ + *(f32*)(vec0), *((f32*)(vec0)+1), *((f32*)(vec0)+2), \ + *(f32*)(vec1), *((f32*)(vec1)+1), *((f32*)(vec1)+2))) + +#define GXInitLightShininess(lobj, shininess) \ + (GXInitLightAttn(lobj, 0.0F, 0.0F, 1.0F, \ + (shininess)/2.0F, 0.0F, \ + 1.0F-(shininess)/2.0F )) + + +/*---------------------------------------------------------------------------*/ +#ifdef __cplusplus +} +#endif + +#endif // __GXLIGHTING_H__ -- cgit v1.2.3