PA_Mode7.h

00001 #ifndef PA_MODE7
00002 #define PA_MODE7
00003 
00004 
00005 
00006 #include "PA_Tile.h"
00007 
00008 
00009 // Mode 7 functions !!
00010 
00011 void hbl_mode7(void);
00012 
00013 extern const s32 DIV[160];
00014 
00015 
00016 #define M7_D_SH        7 // focal shift
00017 #define M7O_NORM       1 // object renormalization shift (by /2)
00018 
00019 // view frustrum limits
00020 #define M7_NEAR     16
00021 #define M7_FAR     384
00022 #define M7_LEFT   -120
00023 #define M7_RIGHT   120
00024 #define M7_TOP      80
00025 #define M7_BOTTOM  -80
00026 
00027 // the background uses a different far-plane than objects
00028 #define M7_FAR_BG  512
00029 
00030 
00031 typedef struct{
00032        s32 x, y, z;
00033 }VECTOR;
00034 
00035 typedef struct tagM7CAM
00036 {
00037     VECTOR pos;     
00038     int phi;        // yaw
00039     int theta;      // pitch
00040     VECTOR u;       // local x-axis (right)
00041     VECTOR v;       // local y-axis (up)
00042     VECTOR w;       // local z-axis (back)
00043 } M7CAM;
00044 
00045 
00046 typedef struct { 
00047        s16 pa, pb, pc, pd; s32 dx, dy; 
00048 } BGAFF_EX;
00049 
00050 /*#define PA_BGXX(screen, bg) _REG32(0x4000008 + (0x1000 * screen) + (bg << 4))
00051 #define PA_BGXY(screen, bg) _REG32(0x400000C + (0x1000 * screen) + (bg << 4))
00052 #define PA_BGXPA(screen, bg) _REG16(0x4000000 + (0x1000 * screen) + (bg << 4))
00053 #define PA_BGXPB(screen, bg) _REG16(0x4000002 + (0x1000 * screen) + (bg << 4))
00054 #define PA_BGXPC(screen, bg) _REG16(0x4000004 + (0x1000 * screen) + (bg << 4))
00055 #define PA_BGXPD(screen, bg) _REG16(0x4000006 + (0x1000 * screen) + (bg << 4))
00056 */
00057 
00058 
00059 
00060 // in mode7.c
00061 extern M7CAM _m7_cam;
00062 extern int _m7_horizon;
00063 extern BGAFF_EX _m7_bgaff_ex[192];  // affine parameters for each line
00064 
00065 
00066 
00067 
00068 
00069 #define X0    256<<8
00070 #define Y0     32<<8  // Default camera height -> 8192
00071 #define Z0    256<<8
00072 
00073 // DRV
00074 extern u8 PA_currentmode;
00075 
00076 
00077 
00078 
00079 // === GLOBALS ========================================================
00080 // DRV
00081 extern s32 mode7cam_x, mode7cam_y, mode7cam_z, mode7alpha;
00082 // DRV
00083 extern s32 mode7cos, mode7sin;     // temporaries for cos and sin alpha
00084 // DRV
00085 extern s16 mode7_distance;
00086 
00087 
00088 
00103 void PA_InitMode7(u8 bg_select);
00104 
00105 
00115 extern inline void PA_Mode7Angle(s16 angle){
00116     mode7alpha = angle&511;
00117        mode7cos = PA_Cos(mode7alpha);
00118        mode7sin = PA_Sin(mode7alpha);
00119 }
00120 
00121 
00122 
00132 extern inline void PA_Mode7MoveLeftRight(s16 x_deplac){
00133               mode7cam_x += x_deplac*mode7cos;
00134               mode7cam_z += x_deplac*mode7sin;
00135 }
00136 
00137 
00147 extern inline void PA_Mode7MoveForwardBack(s16 z_deplac){
00148               mode7cam_x += z_deplac*mode7sin;
00149               mode7cam_z -= z_deplac*mode7cos;
00150 }
00151 
00152 
00153 
00163 extern inline void PA_Mode7X(s16 mode7x){
00164               mode7cam_x = mode7x;
00165 }
00166 
00167 
00177 extern inline void PA_Mode7Z(s16 mode7z){
00178               mode7cam_z = mode7z;
00179 }
00180 
00181 
00182 
00194 extern inline void PA_Mode7SetPointXZ(s16 mode7x, s16 mode7z){
00195               mode7cam_x = mode7x;
00196               mode7cam_z = mode7z;
00197 }
00198 
00199 
00209 extern inline void PA_Mode7Height(s16 mode7y){
00210               mode7cam_y = mode7y;
00211 }
00212 
00213 
00214  // end of Mode7
00216 
00217 
00218 
00219 void m7_aff_calc(void);
00220 void m7_hbl_flr(void);
00221 void m7_horz_calc(void);
00222 
00223 #endif
00224 
00225 

Généré le Sat Feb 4 17:33:05 2006 pour PAlib par  doxygen 1.3.9.1