int main(int argc, char **argv) { int done, i; float theta, dt; float colors[3*10] = { 0.0f, 0.5f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.5f, 0.5f, 0.0f, 0.5f, 0.0f, 0.5f, 0.5f, 0.5f, 0.5f, 0.73f, 0.8f, 0.25f, 0.25f, 0.8f, 0.73f, 1.0f, 1.0f, 0.0f }; // Init PVR pvr_init_defaults(); // Setup the context plx_cxt_init(); plx_cxt_texture(NULL); plx_cxt_culling(PLX_CULL_NONE); // Until the user hits start... dt = 2*M_PI/160.0f; for (done = 0, theta = 0.0f; !done; ) { // Check for start MAPLE_FOREACH_BEGIN(MAPLE_FUNC_CONTROLLER, cont_state_t, st) if (st->buttons & CONT_START) done = 1; MAPLE_FOREACH_END() // Setup the frame pvr_wait_ready(); pvr_scene_begin(); pvr_list_begin(PVR_LIST_OP_POLY); // Submit the context plx_cxt_send(PVR_LIST_OP_POLY); // Draw a sinus bar at our current position and several positions // back. Each bar will get its own Z value (descending). for (i=0; i<10; i++) { drawbar(240.0f + fsin(theta - dt*i*6) * 120.0f, 100.0f - i, colors[i*3+0], colors[i*3+1], colors[i*3+2]); } pvr_scene_finish(); // Move our counters theta += dt; while (theta >= 2*M_PI) theta -= 2*M_PI; } return 0; }
int main (int argc, char* argv[]) { int cable_type, quit = 0; float rot1 = 0.0, rot2 = 0.0, rot3 = 0.0; kos_img_t front_txr, back_txr, tmp_img; pvr_ptr_t texaddr; GLuint texture[8]; int blendfunc = 2; float eye_rot = 0; cable_type = vid_check_cable (); if (cable_type == CT_VGA) vid_init (DM_640x480_VGA, PM_RGB565); else vid_init (DM_640x480_PAL_IL, PM_RGB565); init_pvr (); glKosInit (); sphere = mkspheredata (3, &nstrip, &stripl); glGenTextures (8, &texture[0]); #if 1 kmg_to_img ("/rd/sky1.kmg", &front_txr); texaddr = pvr_mem_malloc (front_txr.byte_count); pvr_txr_load_kimg (&front_txr, texaddr, PVR_TXRFMT_VQ_ENABLE); kos_img_free (&front_txr, 0); glBindTexture (GL_TEXTURE_2D, texture[0]); glKosTex2D (GL_RGB565_TWID | GL_VQ_ENABLE, front_txr.w, front_txr.h, texaddr); kmg_to_img ("/rd/sky2o.kmg", &back_txr); texaddr = pvr_mem_malloc (back_txr.byte_count); pvr_txr_load_kimg (&back_txr, texaddr, PVR_TXRFMT_VQ_ENABLE); kos_img_free (&back_txr, 0); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glBindTexture (GL_TEXTURE_2D, texture[1]); glKosTex2D (GL_ARGB4444_TWID | GL_VQ_ENABLE, back_txr.w, back_txr.h, texaddr); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glBindTexture (GL_TEXTURE_2D, texture[2]); kmg_to_img ("/rd/sky3.kmg", &tmp_img); texaddr = pvr_mem_malloc (tmp_img.byte_count); pvr_txr_load_kimg (&tmp_img, texaddr, PVR_TXRFMT_VQ_ENABLE); glKosTex2D (GL_RGB565_TWID | GL_VQ_ENABLE, tmp_img.w, tmp_img.h, texaddr); glBindTexture (GL_TEXTURE_2D, texture[3]); kmg_to_img ("/rd/sky4.kmg", &tmp_img); texaddr = pvr_mem_malloc (tmp_img.byte_count); pvr_txr_load_kimg (&tmp_img, texaddr, PVR_TXRFMT_VQ_ENABLE); glKosTex2D (GL_RGB565_TWID | GL_VQ_ENABLE, tmp_img.w, tmp_img.h, texaddr); glBindTexture (GL_TEXTURE_2D, texture[4]); kmg_to_img ("/rd/sky5.kmg", &tmp_img); texaddr = pvr_mem_malloc (tmp_img.byte_count); pvr_txr_load_kimg (&tmp_img, texaddr, PVR_TXRFMT_VQ_ENABLE); glKosTex2D (GL_RGB565_TWID | GL_VQ_ENABLE, tmp_img.w, tmp_img.h, texaddr); glBindTexture (GL_TEXTURE_2D, texture[5]); kmg_to_img ("/rd/sky6.kmg", &tmp_img); texaddr = pvr_mem_malloc (tmp_img.byte_count); pvr_txr_load_kimg (&tmp_img, texaddr, PVR_TXRFMT_VQ_ENABLE); glKosTex2D (GL_RGB565_TWID | GL_VQ_ENABLE, tmp_img.w, tmp_img.h, texaddr); glBindTexture (GL_TEXTURE_2D, texture[6]); kmg_to_img ("/rd/sky7.kmg", &tmp_img); texaddr = pvr_mem_malloc (tmp_img.byte_count); pvr_txr_load_kimg (&tmp_img, texaddr, PVR_TXRFMT_VQ_ENABLE); glKosTex2D (GL_RGB565_TWID | GL_VQ_ENABLE, tmp_img.w, tmp_img.h, texaddr); glBindTexture (GL_TEXTURE_2D, texture[7]); kmg_to_img ("/rd/sky8.kmg", &tmp_img); texaddr = pvr_mem_malloc (tmp_img.byte_count); pvr_txr_load_kimg (&tmp_img, texaddr, PVR_TXRFMT_VQ_ENABLE); glKosTex2D (GL_RGB565_TWID | GL_VQ_ENABLE, tmp_img.w, tmp_img.h, texaddr); #else png_to_img ("/rd/sky1.png", PNG_MASK_ALPHA, &front_txr); texaddr = pvr_mem_malloc (front_txr.w * front_txr.h * 2); pvr_txr_load_kimg (&front_txr, texaddr, PVR_TXRLOAD_INVERT_Y); kos_img_free (&front_txr, 0); glBindTexture (GL_TEXTURE_2D, texture[0]); glKosTex2D (GL_ARGB1555_TWID, front_txr.w, front_txr.h, texaddr); png_to_img ("/rd/sky2o.png", PNG_MASK_ALPHA, &back_txr); texaddr = pvr_mem_malloc (back_txr.w * back_txr.h * 2); pvr_txr_load_kimg (&back_txr, texaddr, PVR_TXRLOAD_INVERT_Y); kos_img_free (&back_txr, 0); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glBindTexture (GL_TEXTURE_2D, texture[1]); glKosTex2D (GL_ARGB1555_TWID, back_txr.w, back_txr.h, texaddr); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glBindTexture (GL_TEXTURE_2D, texture[2]); texaddr = pvr_mem_malloc (TEXSIZE * TEXSIZE * 2); png_to_texture ("/rd/sky3.png", texaddr, PNG_NO_ALPHA); glKosTex2D (GL_RGB565_TWID, TEXSIZE, TEXSIZE, texaddr); glBindTexture (GL_TEXTURE_2D, texture[3]); texaddr = pvr_mem_malloc (TEXSIZE * TEXSIZE * 2); png_to_texture ("/rd/sky4.png", texaddr, PNG_NO_ALPHA); glKosTex2D (GL_RGB565_TWID, TEXSIZE, TEXSIZE, texaddr); glBindTexture (GL_TEXTURE_2D, texture[4]); texaddr = pvr_mem_malloc (TEXSIZE * TEXSIZE * 2); png_to_texture ("/rd/sky5.png", texaddr, PNG_NO_ALPHA); glKosTex2D (GL_RGB565_TWID, TEXSIZE, TEXSIZE, texaddr); glBindTexture (GL_TEXTURE_2D, texture[5]); texaddr = pvr_mem_malloc (TEXSIZE * TEXSIZE * 2); png_to_texture ("/rd/sky6.png", texaddr, PNG_NO_ALPHA); glKosTex2D (GL_RGB565_TWID, TEXSIZE, TEXSIZE, texaddr); glBindTexture (GL_TEXTURE_2D, texture[6]); texaddr = pvr_mem_malloc (TEXSIZE * TEXSIZE * 2); png_to_texture ("/rd/sky7.png", texaddr, PNG_NO_ALPHA); glKosTex2D (GL_RGB565_TWID, TEXSIZE, TEXSIZE, texaddr); glBindTexture (GL_TEXTURE_2D, texture[7]); texaddr = pvr_mem_malloc (TEXSIZE * TEXSIZE * 2); png_to_texture ("/rd/sky8.png", texaddr, PNG_NO_ALPHA); glKosTex2D (GL_RGB565_TWID, TEXSIZE, TEXSIZE, texaddr); #endif glEnable (GL_DEPTH_TEST); glEnable (GL_CULL_FACE); glEnable (GL_TEXTURE_2D); glShadeModel (GL_SMOOTH); glClearDepth (1.0f); glDepthFunc (GL_LEQUAL); glMatrixMode (GL_PROJECTION); glLoadIdentity (); gluPerspective (60.0, /* Field of view in degrees. */ 640.0 / 480.0, /* Aspect ratio. */ 1.0, /* Z near. */ 50.0); /* Z far. */ glMatrixMode (GL_MODELVIEW); while (!quit) { MAPLE_FOREACH_BEGIN (MAPLE_FUNC_CONTROLLER, cont_state_t, st) { if (st->buttons & CONT_START) quit = 1; eye_pos[0] = st->joyx / 25.0; eye_pos[1] = st->joyy / 25.0; eye_pos[2] = 5 * sin (eye_rot); if (st->buttons & CONT_A) blendfunc = 0; else if (st->buttons & CONT_B) blendfunc = 1; else if (st->buttons & CONT_X) blendfunc = 2; } MAPLE_FOREACH_END () draw_vectors = 10; glLoadIdentity (); gluLookAt (eye_pos[0], eye_pos[1], eye_pos[2], /* Eye position. */ 0.0, 0.0, 0.0, /* Centre. */ 0.0, 1.0, 0.0); /* Up. */ glGetFloatv (GL_MODELVIEW_MATRIX, &camera[0][0]); invcamera[0][0] = camera[0][0]; invcamera[0][1] = camera[1][0]; invcamera[0][2] = camera[2][0]; invcamera[0][3] = 0.0; invcamera[1][0] = camera[0][1]; invcamera[1][1] = camera[1][1]; invcamera[1][2] = camera[2][1]; invcamera[1][3] = 0.0; invcamera[2][0] = camera[0][2]; invcamera[2][1] = camera[1][2]; invcamera[2][2] = camera[2][2]; invcamera[2][3] = 0.0; invcamera[3][0] = 0.0; invcamera[3][1] = 0.0; invcamera[3][2] = 0.0; invcamera[3][3] = 1.0; /*dbgio_printf ("inverted camera orthogonality: %f %f %f\n", (double) vec_dot (invcamera[0], invcamera[1]), (double) vec_dot (invcamera[1], invcamera[2]), (double) vec_dot (invcamera[2], invcamera[0]));*/ /*dbgio_printf ("Inverted camera matrix:\n"); for (i = 0; i < 4; i++) { dbgio_printf ("[ %f %f %f %f ]\n", (double) invcamera[0][i], (double) invcamera[1][i], (double) invcamera[2][i], (double) invcamera[3][i]); }*/ glKosBeginFrame (); /*glPushMatrix (); glTranslatef (-camera[3][0], -camera[3][1], -camera[3][2]);*/ render_cube (&texture[2]); /*glPopMatrix ();*/ glPushMatrix (); #if 1 glRotatef (rot1, 0.0, 1.0, 0.0); rot1 += 0.7; glRotatef (rot2, 1.0, 0.0, 0.0); rot2 += 0.29; #else glRotatef (rot1, 0.0, 0.0, 1.0); rot1 += 0.7; #endif if (rot1 >= 360) rot1 -= 360; if (rot2 >= 360) rot2 -= 360; eye_rot += 0.05; if (eye_rot >= 2 * M_PI) eye_rot -= 2 * M_PI; blob_phase += 0.05; if (blob_phase >= 24 * M_PI) blob_phase -= 24 * M_PI; /* Render front. */ glBindTexture (GL_TEXTURE_2D, texture[0]); glTexEnvi (GL_TEXTURE_2D, GL_TEXTURE_ENV_MODE, GL_MODULATE); #if 1 render_blob (sphere, nstrip, stripl, 1); #else render_torus (1.0, 0.6, 1); #endif glPushMatrix (); glRotatef (rot3, 1.0, 0.0, 0.0); glTranslatef (2.9, 0.0, 0.0); render_torus (0.8, 0.5, 1); glPopMatrix (); glPushMatrix (); glRotatef (-rot3, 1.0, 0.0, 0.0); glTranslatef (-2.9, 0.0, 0.0); render_torus (0.8, 0.5, 1); glPopMatrix (); glKosFinishList (); /* Render back. */ glBindTexture (GL_TEXTURE_2D, texture[1]); glTexEnvi (GL_TEXTURE_2D, GL_TEXTURE_ENV_MODE, GL_MODULATE); if (blendfunc == 0) glBlendFunc (GL_SRC_ALPHA, GL_ZERO); else if (blendfunc == 1) glBlendFunc (GL_ZERO, GL_ONE_MINUS_SRC_ALPHA); else glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); #if 1 //glDisable (GL_TEXTURE_2D); render_blob (sphere, nstrip, stripl, 0); //glEnable (GL_TEXTURE_2D); #else render_torus (1.0, 0.6, 0); #endif glPushMatrix (); glRotatef (rot3, 1.0, 0.0, 0.0); glTranslatef (2.9, 0.0, 0.0); render_torus (0.8, 0.5, 0); glPopMatrix (); glPushMatrix (); glRotatef (-rot3, 1.0, 0.0, 0.0); glTranslatef (-2.9, 0.0, 0.0); render_torus (0.8, 0.5, 0); glPopMatrix (); rot3 += 1; if (rot3 >= 360) rot3 -= 360; glPopMatrix (); glKosFinishFrame (); } glKosShutdown (); pvr_shutdown (); vid_shutdown (); /* Make dc-load look nicer. */ vid_init (DM_640x480_PAL_IL, PM_RGB565); return 0; }
int main(int argc, char **argv) { plx_texture_t * txr; int done; float y, xoffs; // Init PVR pvr_init_defaults(); // Load a texture txr = plx_txr_load("/rd/dan.jpg", 0, 0); if(!txr) return 0; // Setup a texture context plx_cxt_init(); plx_cxt_texture(txr); plx_cxt_culling(PLX_CULL_NONE); // The image will be offset by this much from each side xoffs = (640 - 512) / 2; // Until the user hits start... for(done = 0, y = 0.0f; !done;) { // Check for start MAPLE_FOREACH_BEGIN(MAPLE_FUNC_CONTROLLER, cont_state_t, st) if(st->buttons & CONT_START) done = 1; MAPLE_FOREACH_END() // Setup the frame pvr_wait_ready(); pvr_scene_begin(); pvr_list_begin(PVR_LIST_OP_POLY); // Submit the context plx_cxt_send(PVR_LIST_OP_POLY); // Two polys -- one normal up to the scan point, and one // stretched to the bottom. plx_vert_ifp(PLX_VERT, xoffs, y, 1.0f, 0xffffffff, 0.0f, y / 480.0f); plx_vert_ifp(PLX_VERT, xoffs, 0.0f, 1.0f, 0xffffffff, 0.0f, 0.0f); plx_vert_ifp(PLX_VERT, 640.0f - xoffs, y, 1.0f, 0xffffffff, 1.0f, y / 480.0f); plx_vert_ifp(PLX_VERT_EOS, 640.0f - xoffs, 0.0f, 1.0f, 0xffffffff, 1.0f, 0.0f); plx_vert_ifp(PLX_VERT, xoffs, 480.0f, 1.0f, 0xffffffff, 0.0f, y / 480.0f); plx_vert_ifp(PLX_VERT, xoffs, y, 1.0f, 0xffffffff, 0.0f, y / 480.0f); plx_vert_ifp(PLX_VERT, 640.0f - xoffs, 480.0f, 1.0f, 0xffffffff, 1.0f, y / 480.0f); plx_vert_ifp(PLX_VERT_EOS, 640.0f - xoffs, y, 1.0f, 0xffffffff, 1.0f, y / 480.0f); pvr_scene_finish(); // Move our scanline if(y < 480.0f) y += 2.0f; } return 0; }
int main (int argc, char *argv[]) { int cable_type; int quit = 0; float rot1 = 0.0, rot2 = 0.0, rot3 = 0.0; kos_img_t cubetxr; GLuint texture[2]; pvr_ptr_t texaddr; pvr_ptr_t bumpmap; /* Consider this as the vector from the object to the light, for now. */ GLfloat light_position[3] = { 0.7, 0.7, 2.0 }; vec_normalize (&light_position[0], &light_position[0]); cable_type = vid_check_cable (); printf ("KOS says M_PI is: %f\n", M_PI); if (cable_type == CT_VGA) vid_init (DM_640x480_VGA, PM_RGB565); else vid_init (DM_640x480_PAL_IL, PM_RGB565); init_pvr (); auto_orient (); png_to_img ("/rd/cube.png", PNG_NO_ALPHA, &cubetxr); texaddr = pvr_mem_malloc (cubetxr.w * cubetxr.h * 2); pvr_txr_load_kimg (&cubetxr, texaddr, PVR_TXRLOAD_INVERT_Y); kos_img_free (&cubetxr, 0); bumpmap = load_bumpmap ("/rd/bump.raw"); vid_border_color (0, 0, 0); pvr_set_bg_color (0.0, 0.0, 0.0); glKosInit (); glEnable (GL_DEPTH_TEST); glEnable (GL_CULL_FACE); glEnable (GL_TEXTURE_2D); glShadeModel (GL_SMOOTH); glClearDepth (1.0f); glDepthFunc (GL_LEQUAL); glMatrixMode (GL_PROJECTION); glLoadIdentity (); gluPerspective (45.0, /* Field of view in degrees. */ 640.0 / 480.0, /* Aspect ratio. */ 1.0, /* Z near. */ 50.0); /* Z far. */ glMatrixMode (GL_MODELVIEW); glLoadIdentity (); gluLookAt (0.0, 0.0, -4.5, /* Eye position. */ 0.0, 0.0, 0.0, /* Centre. */ 0.0, 1.0, 0.0); /* Up. */ glGenTextures (2, &texture[0]); /* Ordinary texture. */ glBindTexture (GL_TEXTURE_2D, texture[0]); glKosTex2D (GL_RGB565_TWID, cubetxr.w, cubetxr.h, texaddr); /* Bump texture. */ glBindTexture (GL_TEXTURE_2D, texture[1]); /*pvr_poly_cxt_txr (cxt, PVR_LIST_OP_POLY, PVR_TXRFMT_BUMP | PVR_TXRFMT_TWIDDLED, 128, 128, bumpmap, PVR_FILTER_BILINEAR);*/ glKosTex2D (GL_BUMP_TWID, 128, 128, bumpmap); glTexEnvi (GL_TEXTURE_2D, GL_TEXTURE_ENV_MODE, GL_MODULATE); /* Break the nice abstraction. Tweak for bump mapping. */ /*cxt = (pvr_poly_cxt_t *) texture[1]; cxt->gen.specular = PVR_SPECULAR_ENABLE;*/ /*pvr_poly_compile (&bumphdr, cxt);*/ printf ("objmatrix at %p\n", objmatrix); while (!quit) { int faces; GLfloat transformed_normals [sizeof (face_normals) / (3 * sizeof (GLfloat))][3]; GLfloat transformed_orient [sizeof (face_orient) / (3 * sizeof (GLfloat))][3]; MAPLE_FOREACH_BEGIN (MAPLE_FUNC_CONTROLLER, cont_state_t, st) if (st->buttons & CONT_START) quit = 1; MAPLE_FOREACH_END () glKosBeginFrame (); glPushMatrix (); glRotatef (rot1, 1.0, 0.0, 0.0); glRotatef (rot2, 0.0, 1.0, 0.0); glRotatef (rot3, 0.0, 0.0, 1.0); rot1 += 0.1; rot2 += 0.2; rot3 += 0.3; /* Get the object's transformation matrix. */ glGetFloatv (GL_MODELVIEW_MATRIX, &objmatrix[0][0]); /* We care only about rotation for now. */ objmatrix[0][3] = objmatrix[1][3] = objmatrix[2][3] = 0.0; objmatrix[3][0] = objmatrix[3][1] = objmatrix[3][2] = 0.0; objmatrix[3][3] = 1.0; /*printf ("Got matrix:\n"); printf ("[ %f %f %f %f ]\n", objmatrix[0][0], objmatrix[0][1], objmatrix[0][2], objmatrix[0][3]); printf ("[ %f %f %f %f ]\n", objmatrix[1][0], objmatrix[1][1], objmatrix[1][2], objmatrix[1][3]); printf ("[ %f %f %f %f ]\n", objmatrix[2][0], objmatrix[2][1], objmatrix[2][2], objmatrix[2][3]); printf ("[ %f %f %f %f ]\n", objmatrix[3][0], objmatrix[3][1], objmatrix[3][2], objmatrix[3][3]);*/ /* Do these all in one go. */ mat_load ((matrix_t *) &objmatrix[0][0]); /* Note: mat_transform is only for 3D->2D (perspective) transformations! This won't be quite as quick, most likely. */ for (faces = 0; faces < 6; faces++) { GLfloat x = face_normals[faces][0]; GLfloat y = face_normals[faces][1]; GLfloat z = face_normals[faces][2]; GLfloat w = 1.0; mat_trans_nodiv (x, y, z, w); transformed_normals[faces][0] = x; transformed_normals[faces][1] = y; transformed_normals[faces][2] = z; x = face_orient[faces][0]; y = face_orient[faces][1]; z = face_orient[faces][2]; w = 1.0; mat_trans_nodiv (x, y, z, w); transformed_orient[faces][0] = x; transformed_orient[faces][1] = y; transformed_orient[faces][2] = z; } glKosMatrixDirty (); glDisable (GL_KOS_OFFSET_COLOR); glBindTexture (GL_TEXTURE_2D, texture[0]); glDisable (GL_TEXTURE_2D); //glBlendFunc (GL_DST_COLOR, GL_ZERO); glBlendFunc (GL_ONE, GL_ZERO); for (faces = 0; faces < 6; faces++) { int strip; glBegin (GL_TRIANGLE_STRIP); glColor4ub (colour[faces][0], colour[faces][1], colour[faces][2], colour[faces][3]); for (strip = 0; strip < 4; strip++) { glTexCoord2fv (texcoords[strip]); glVertex3fv (points[tristrips[faces][strip]]); } glEnd (); } /* Finish opaque list, start transparent list. */ glKosFinishList (); glBindTexture (GL_TEXTURE_2D, texture[1]); glEnable (GL_TEXTURE_2D); glEnable (GL_KOS_OFFSET_COLOR); glBlendFunc (GL_ZERO, GL_SRC_ALPHA); for (faces = 0; faces < 6; faces++) { int strip, over_pi, over_2pi; GLfloat s_dot_n, f[3], d[3], t, q; GLfloat d_cross_r[3], dxr_len, d_len; s_dot_n = vec_dot (&transformed_normals[faces][0], &light_position[0]); /* Elevation (T) angle: s.n = |s| |n| cos T T = acos (s.n / (|s| * |n|)) |s| and |n| are both 1. */ t = M_PI / 2 - acosf (s_dot_n); if (t < 0) t = 0; /* Rotation (Q) angle: d x r = (|d| |r| sin Q) n |d x r| / (|d| |r|) = sin Q. */ vec_scale (&f[0], &transformed_normals[faces][0], s_dot_n); vec_sub (&d[0], &light_position[0], &f[0]); vec_cross (&d_cross_r[0], &d[0], &transformed_orient[faces][0]); dxr_len = vec_length (&d_cross_r[0]); d_len = vec_length (&d[0]); q = asinf (dxr_len / d_len); over_pi = vec_dot (&d[0], &transformed_orient[faces][0]) < 0; if (over_pi) q = M_PI - q; over_2pi = vec_dot (&d_cross_r[0], &transformed_normals[faces][0]) < 0; if (over_2pi) q = 2 * M_PI - q; /*printf ("length of n: %f\n", length (&transformed_normals[faces][0])); printf ("%d: [ %f %f %f ]\n", faces, transformed_normals[faces][0], transformed_normals[faces][1], transformed_normals[faces][2]); printf ("length of r: %f\n", length (&transformed_orient[faces][0])); printf ("%d: [ %f %f %f ]\n", faces, transformed_orient[faces][0], transformed_orient[faces][1], transformed_orient[faces][2]);*/ glBegin (GL_TRIANGLE_STRIP); set_bump_direction (t, 2 * M_PI - q, 1.0); glColor4ub (255, 255, 255, 255); for (strip = 0; strip < 4; strip++) { glTexCoord2fv (texcoords[strip]); glVertex3fv (points[tristrips[faces][strip]]); } glEnd (); } /* Finish opaque polygon list, start translucent polygon list. */ /* glKosFinishList ();*/ glPopMatrix (); glKosFinishFrame (); } glKosShutdown (); pvr_shutdown (); vid_shutdown (); return 0; }
int main(int argc,char **argv){ Init(); //sndoggvorbis_start("/pc/billy.ogg",-1); Lights[0].z = 10.0; Lights[0].x = 0.0; Lights[0].y = 0.0; Lights[0].w = 1.0; Lights[0].r = 5.0; Lights[0].g = 0.0; Lights[0].b = 0.0; Lights[0].a = 1.0; Lights[0].aa = 0.0; Lights[0].ab = 0.0; Lights[0].ac = 1.0; Lights[0].dummy = 1.0; Lights[1].z = 10.0; Lights[1].x = 100.0; Lights[1].y = 100.0; Lights[1].w = 1.0; Lights[1].r = 0.0; Lights[1].g = 5.0; Lights[1].b = 0.0; Lights[1].a = 1.0; Lights[1].aa = 0.0; Lights[1].ab = 0.0; Lights[1].ac = 1.0; Lights[1].dummy = 1.0; Lights[2].z = 10.0; Lights[2].x = 400.0; Lights[2].y = 400.0; Lights[2].w = 1.0; Lights[2].r = 0.0; Lights[2].g = 0.0; Lights[2].b = 5.0; Lights[2].a = 1.0; Lights[2].aa = 0.0; Lights[2].ab = 0.0; Lights[2].ac = 1.0; Lights[2].dummy = 1.0; vid_border_color(255,0,0); Load_Texture("/rd/bumpmap.raw",&GlobalNormal); Load_Texture("/rd/text.raw",&GlobalTex); vid_border_color(0,0,255); Init_Layer(); int q = 0; int x = 0; int pushed = 0; int bumpenabled = 1; int display_fps = 0; bfont_set_encoding(BFONT_CODE_ISO8859_1); while(q == 0){ mat_identity(); vid_border_color(255,0,0); pvr_wait_ready(); vid_border_color(0,255,0); pvr_scene_begin(); pvr_list_begin(PVR_LIST_OP_POLY); Draw_Layer(); pvr_list_finish(); pvr_list_begin(PVR_LIST_TR_POLY); if(bumpenabled) Draw_Layer_Bump(); pvr_list_finish(); pvr_scene_finish(); vid_border_color(0,0,255); MAPLE_FOREACH_BEGIN(MAPLE_FUNC_CONTROLLER, cont_state_t, st); if(st->buttons & CONT_START) q = 1; if(st->joyx > 32){ Lights[x].x += 4.0f; } if(st->joyx < -32){ Lights[x].x -= 4.0f; } if(st->joyy < -32){ Lights[x].y -= 4.0f; } if(st->joyy > 32){ Lights[x].y += 4.0f; } if(st->buttons & CONT_DPAD_LEFT){ Lights[x].x -= 4.0f; } if(st->buttons & CONT_DPAD_RIGHT){ Lights[x].x += 4.0f; } if(st->buttons & CONT_DPAD_UP){ Lights[x].y -= 4; } if(st->buttons & CONT_DPAD_DOWN){ Lights[x].y += 4; } if(st->buttons & CONT_A && pushed == 0){ pushed = 1; x++; if(x == LIGHTS){ x = 0; } } if(st->buttons & CONT_Y && pushed == 0){ LIGHTS--; pushed = 1; if(LIGHTS < 0){ LIGHTS = MAX_LIGHTS; } } if(st->buttons & CONT_B && pushed == 0){ display_fps ^= 0x01; pushed = 1; } if(st->buttons & CONT_X && pushed == 0){ bumpenabled ^= 0x01; pushed = 1; } if(!(st->buttons & CONT_A) && !(st->buttons & CONT_B) && !(st->buttons & CONT_X) && !(st->buttons & CONT_Y)){ pushed = 0; } MAPLE_FOREACH_END(); running_stats(); sprintf(buf,"FPS:%f",avgfps); if(display_fps){ //printf("%s\n",buf); bfont_draw_str(vram_s + (640*24),640,1,buf); } } DeleteTexture(&GlobalNormal); DeleteTexture(&GlobalTex); //sndoggvorbis_stop(); //sndoggvorbis_shutdown(); pvr_shutdown(); return 0; }
int main(int argc,char** argv){ pvr_vertex_t v; Texture spr; pvr_poly_cxt_t p_cxt; pvr_poly_hdr_t p_hdr; Init(); Load_VQTexture("/rd/billy.kmg",&spr); sndoggvorbis_start("/rd/billy.ogg",-1); int q = 0; while(q == 0){ vid_border_color(255,0,0); pvr_wait_ready(); vid_border_color(0,255,0); pvr_scene_begin(); pvr_list_begin(PVR_LIST_OP_POLY); pvr_list_finish(); pvr_list_begin(PVR_LIST_TR_POLY); pvr_poly_cxt_txr(&p_cxt,PVR_LIST_TR_POLY,spr.fmt,spr.w,spr.h,spr.txt,PVR_FILTER_BILINEAR); pvr_poly_compile(&p_hdr,&p_cxt); pvr_prim(&p_hdr,sizeof(p_hdr)); // submit header v.x = 0.0; v.y = 0.0; v.z = 1.0; v.u = 0.0; v.v = 0.0; v.argb = 0xffffffff; v.oargb = 0; v.flags = PVR_CMD_VERTEX; pvr_prim(&v,sizeof(v)); v.x = 640.0; v.y = 0.0; v.u = 1.0; v.v = 0.0; pvr_prim(&v,sizeof(v)); v.x = 0.0; v.y = 480.0; v.u = 0.0; v.v = 1.0; pvr_prim(&v,sizeof(v)); v.x = 640.0; v.y = 480.0; v.u = 1.0; v.v = 1.0; v.flags = PVR_CMD_VERTEX_EOL; pvr_prim(&v,sizeof(v)); pvr_list_finish(); pvr_scene_finish(); vid_border_color(0,0,255); MAPLE_FOREACH_BEGIN(MAPLE_FUNC_CONTROLLER, cont_state_t, st); if(st->buttons & CONT_START) q = 1; MAPLE_FOREACH_END(); } DeleteTexture(&spr); sndoggvorbis_stop(); pvr_shutdown(); sndoggvorbis_shutdown(); return 0; }