Exemple #1
0
	Font::~Font()
	{
		if(texture != NULL) plx_txr_destroy(texture);
		delete[] characterList.characters;
	}
Exemple #2
0
	Texture::~Texture()
	{
		if(texture != NULL) plx_txr_destroy(texture);
	}
int main(int argc, char **argv) {
    
    /* Controller Stuff */
    maple_device_t * dev;
    cont_state_t * state;
    int xp = 0;    // False (True or False: Pressed X button last) Toggles Filtering
    int yp = 0;    // False (True or False: Pressed Y button last) Toggles Transparency
    int blend = 0; // blending on/off
    
    float x_m, y_m, z_m, u_m, v_m;
    float xtrans, ztrans, ytrans;
    float sceneroty;
    int numtriangles;
    
    int filter = 0;   // texture filtering method to use (NONE or BILINEAR)
    uint32 color = plx_pack_color(0.5f, 1.0f, 1.0f, 1.0f);

	/* Init PVR API */
	if (pvr_init(&params) < 0)
		return -1;
		
	printControls();	
    
    /* Sets the background color to black */
	pvr_set_bg_color(0.0f, 0.0f, 0.0f);

	/* load our world from romdisk */
    SetupWorld();
	
	/* Load the textures */
	textures[0] = plx_txr_load("/rd/mud.png", 0, PVR_TXRLOAD_16BPP | PVR_TXRLOAD_INVERT_Y);  
	textures[1] = plx_txr_load("/rd/mud.png", 0, PVR_TXRLOAD_16BPP | PVR_TXRLOAD_INVERT_Y);  

	plx_cxt_init();                 // Initialize the plx context system
    plx_cxt_culling(PLX_CULL_NONE); // No culling
	
	// GET SOME 3D GOING!!
	plx_mat3d_init();                    /* Clear internal to an identity matrix */
	plx_mat3d_mode(PLX_MAT_PROJECTION);  /** Projection (frustum, screenview) matrix */
	plx_mat3d_identity();                /** Load an identity matrix */
	plx_mat3d_perspective(45.0f, 640.0f / 480.0f, 0.1f, 100.0f);  // (float angle, float aspect, float znear, float zfar);
	plx_mat3d_mode(PLX_MAT_MODELVIEW);   /** Modelview (rotate, scale) matrix */
	
	/* Set the filters for each texture */
	plx_txr_setfilter(textures[0], PLX_FILTER_NONE);
	plx_txr_setfilter(textures[1], PLX_FILTER_BILINEAR);
	
	while(1) {
             
        /* Check key status */
		dev = maple_enum_dev(0, 0);
	    if(dev == NULL) {
            printf("Error: Could not find controller in first port.\n");
            break;
        }
        state = (cont_state_t *)maple_dev_status(dev);
	    if (state->buttons & CONT_START) {
            break;           // exit the program
        }   
        if (state->buttons & CONT_X && !xp) {
            xp = 1;           
            filter += 1;     // Toggle Filter 
            if (filter > 1)
                filter = 0;
        } 
        if (!(state->buttons & CONT_X)) {
            xp = 0;
        }
        if (state->buttons & CONT_Y && !yp) {
            yp = 1;
            blend = !blend;  // Toggle Blending
        } 
        if (!(state->buttons & CONT_Y)) {
            yp = 0;
        }
        if (state->buttons & CONT_A) {
            lookupdown -= 1.0f;  // look up
        } 
        if (state->buttons & CONT_B) {
            lookupdown += 1.0f;  // look down
        } 
        if (state->buttons & CONT_DPAD_UP) {
            xpos -= fsin(yrot*piover180) * 0.05f;  // moves you forward(bobbing head)
            zpos -= fcos(yrot*piover180) * 0.05f;	
            if (walkbiasangle >= 359.0f) {
                walkbiasangle = 0.0f;	
            } else {
                walkbiasangle += 10.0f;
            }
            walkbias = fsin(walkbiasangle * piover180)/20.0f;
        } 
        if (state->buttons & CONT_DPAD_DOWN) {
            xpos += fsin(yrot*piover180) * 0.05f;  // moves you backward(bobbing head)
            zpos += fcos(yrot*piover180) * 0.05f;	
            if (walkbiasangle <= 1.0f) {
                walkbiasangle = 359.0f;	
            } else {
                walkbiasangle -= 10.0f;
            }
            walkbias = fsin(walkbiasangle * piover180)/20.0f;
        }   
        if (state->buttons & CONT_DPAD_LEFT) {
            yrot += 1.5f;    // Turn Left
        } 
        if (state->buttons & CONT_DPAD_RIGHT) {
            yrot -= 1.5f;	  // Turn Right   
        }         
                 
		pvr_wait_ready();
		pvr_scene_begin();
		
	    if(blend) {
		    pvr_list_begin(PVR_LIST_TR_POLY);
		    plx_cxt_send(PVR_LIST_TR_POLY);     // Submit the Header for PVR_LIST_TR_POLY
        } else {
            pvr_list_begin(PVR_LIST_OP_POLY);
		    plx_cxt_send(PVR_LIST_OP_POLY);     // Submit the Header for PVR_LIST_OP_POLY 
        }
		
		/* Select texture according to filter */
		plx_cxt_texture(textures[filter]);
		
	    xtrans = -xpos;   // Used For Player Translation On The X Axis    
        ztrans = -zpos;   // Used For Player Translation On The Z Axis
        ytrans = -walkbias - 0.25f;  // Used For Bouncing Motion Up And Down
        sceneroty = 360.0f - yrot;   // 360 Degree Angle For Player Direction
        
        plx_mat3d_identity();                                           
        plx_mat3d_rotate(lookupdown, 1.0f, 0.0f, 0.0f); // Rotate Up And Down To Look Up And Down             
        plx_mat3d_rotate(sceneroty, 0.0f, 1.0f, 0.0f);  // Rotate Depending On Direction Player Is Facing 
        plx_mat3d_translate(xtrans, ytrans, ztrans);    // Translate The Scene Based On Player Position          
	    
        /* Clear internal to an identity matrix */
        plx_mat_identity();
	    
	    /* "Applying" all matrixs: multiply a matrix onto the "internal" one */
        plx_mat3d_apply_all();
		    
		numtriangles = sector1.numtriangles;    
	
        for (loop = 0; loop < numtriangles; loop++) {        // loop through all the triangles
 
	        // Vertex 1
	        x_m = sector1.triangle[loop].vertex[0].x;
	        y_m = sector1.triangle[loop].vertex[0].y;
	        z_m = sector1.triangle[loop].vertex[0].z;
	        u_m = sector1.triangle[loop].vertex[0].u;
	        v_m = sector1.triangle[loop].vertex[0].v;
	        plx_vert_ifpm3(PLX_VERT, x_m, y_m, z_m, color, u_m, v_m);
	        
	        // Vertex 2
	        x_m = sector1.triangle[loop].vertex[1].x;
	        y_m = sector1.triangle[loop].vertex[1].y;
	        z_m = sector1.triangle[loop].vertex[1].z;
	        u_m = sector1.triangle[loop].vertex[1].u;
	        v_m = sector1.triangle[loop].vertex[1].v;
	        plx_vert_ifpm3(PLX_VERT, x_m, y_m, z_m, color, u_m, v_m);
	        
	         // Vertex 3
	        x_m = sector1.triangle[loop].vertex[2].x;
	        y_m = sector1.triangle[loop].vertex[2].y;
	        z_m = sector1.triangle[loop].vertex[2].z;
	        u_m = sector1.triangle[loop].vertex[2].u;
	        v_m = sector1.triangle[loop].vertex[2].v;
	        plx_vert_ifpm3(PLX_VERT_EOS, x_m, y_m, z_m, color, u_m, v_m);
	        
        }
        pvr_scene_finish();      
    }
    // Clean up!!!
    free(sector1.triangle);
    plx_txr_destroy(textures[0]);
    plx_txr_destroy(textures[1]);
    
	return 0;
}
int main(int argc, char **argv) {
    
    /* Controller Stuff */
    maple_device_t * dev;
    cont_state_t * state;
    
    int x, y;
    float xrot = 0;	/* X Rotation */
    float yrot = 0;	/* Y Rotation */
    float zrot = 0;	/* Z Rotation */
    float points[45][45][3];    // The Array For The Points On The Grid Of Our "Wave"
    int wiggle_count = 0;		// Counter Used To Control How Fast Flag Waves
    float hold;					// Temporarily Holds A Floating Point Value
    
    uint32 color = plx_pack_color(1.0f, 1.0f, 1.0f, 1.0f);  // Pure white color.  Used for images to keep original color
    plx_texture_t *a_texture;  // Storage for 1 texture
    
    float float_x, float_y, float_xb, float_yb;       // loop counters.
    
	/* Init PVR API */
	if (pvr_init(&params) < 0)
		return -1;

    printControls();

    /* Sets the background color to blue */
	pvr_set_bg_color(0.0f, 0.0f, 1.0f);
	
	/* Load the texture */
	a_texture = plx_txr_load("/rd/tim.png", 0, PVR_TXRLOAD_16BPP);
	
	plx_cxt_init();                  // Initialize the plx context system
	plx_cxt_texture(a_texture);      // Texture 'a_texture' will be used with the context system 
    plx_cxt_culling(PLX_CULL_NONE);  // No culling
	
	// GET SOME 3D GOING!!
	plx_mat3d_init();                    /* Clear internal to an identity matrix */
	plx_mat3d_mode(PLX_MAT_PROJECTION);  /** Projection (frustum, screenview) matrix */
	plx_mat3d_identity();                /** Load an identity matrix */
	plx_mat3d_perspective(45.0f, 640.0f / 480.0f, 0.1f, 100.0f);  // (float angle, float aspect, float znear, float zfar);
	plx_mat3d_mode(PLX_MAT_MODELVIEW);   /** Modelview (rotate, scale) matrix */
	
	for(float_x = 0.0f; float_x < 9.0f; float_x +=  0.2f )	{
	    for(float_y = 0.0f; float_y < 9.0f; float_y += 0.2f)		{
	        points[ (int) (float_x*5) ][ (int) (float_y*5) ][0] = float_x - 4.4f;
	        points[ (int) (float_x*5) ][ (int) (float_y*5) ][1] = float_y - 4.4f;
	        points[ (int) (float_x*5) ][ (int) (float_y*5) ][2] = (float) (fsin( ( (float_x*5*8)/360 ) * 3.14159 * 2));
	    }
    }
	
	while(1) {
        
        // Check for the user pressing START
		dev = maple_enum_dev(0, 0);
		if(dev == NULL) {
            printf("Error: Could not find controller in first port.\n");
            break;
        }
	    state = (cont_state_t *)maple_dev_status(dev);
	    if (state->buttons & CONT_START) {
		    break;           // exit the program
        }          
		
		pvr_wait_ready();
		pvr_scene_begin();
		pvr_list_begin(PVR_LIST_OP_POLY);
     	
		// Submit the context
		plx_cxt_send(PVR_LIST_OP_POLY);     // Submit the Header for PVR_LIST_OP_POLY 
		
        // DRAW THE BOX	
        plx_mat3d_identity();
	    plx_mat3d_translate(0.0f, 0.0f, -12.0f);  // Move 12 units into the screen
	    plx_mat3d_rotate(xrot, 1.0f, 0.0f, 0.0f); // Rotate the Wavy texture angle 'xrot' on the X axis  
	    plx_mat3d_rotate(yrot, 0.0f, 1.0f, 0.0f); // Rotate the Wavy texture angle 'yrot' on the Y axis  
	    plx_mat3d_rotate(zrot, 0.0f, 0.0f, 1.0f); // Rotate the Wavy texture angle 'zrot' on the Z axis  
	    
	    /* Clear internal to an identity matrix */
	    plx_mat_identity();
	    
    	/* "Applying" all matrixs: multiply a matrix onto the "internal" one */
        plx_mat3d_apply_all();
	    
        // Draw each section of the image
    	for (x = 0; x < 44; x++) {
	        for (y = 0; y < 44; y++) {
	            float_x  = (float) (x)/44;
	            float_y  = (float) (y)/44;
	            float_xb = (float) (x+1)/44;
	            float_yb = (float) (y+1)/44;
             
                plx_vert_ifpm3(PLX_VERT, points[x][y+1][0], points[x][y+1][1], points[x][y+1][2], color, float_x, float_yb);         
                plx_vert_ifpm3(PLX_VERT, points[x][y][0], points[x][y][1], points[x][y][2], color, float_x, float_y);                
                plx_vert_ifpm3(PLX_VERT, points[x+1][y+1][0], points[x+1][y+1][1], points[x+1][y+1][2], color, float_xb, float_yb);  
                plx_vert_ifpm3(PLX_VERT_EOS, points[x+1][y][0], points[x+1][y][1], points[x+1][y][2], color, float_xb, float_y);     
	        }
        }

		pvr_scene_finish();
        
        
        if (wiggle_count == 2) {            // Used To Slow Down The Wave (Every 2nd Frame Only)
	        for( y = 0; y < 45; y++ )		// Loop Through The Y Plane
		    {
			    hold = points[0][y][2];		// Store Current Value One Left Side Of Wave
			    for( x = 0; x < 44; x++)	// Loop Through The X Plane
			    {
				    // Current Wave Value Equals Value To The Right
				    points[x][y][2] = points[x+1][y][2];
			    }
			    points[44][y][2] = hold;	// Last Value Becomes The Far Left Stored Value
		    }
		    wiggle_count = 0;				// Set Counter Back To Zero
    	}
	    wiggle_count++;						// Increase The Counter

        xrot += 0.3f;  // Increase the Wavy Texture's angle(x-axis) rotation
        yrot += 0.2f;  // Increase the Wavy Texture's angle(y-axis) rotation
        zrot += 0.4f;  // Increase the Wavy Texture's angle(z-axis) rotation
    }
    // Clean up!!!
    plx_txr_destroy(a_texture);
    
	return 0;
}
Texture::~Texture() {
	if (m_txr != NULL)
		plx_txr_destroy(m_txr);
}