coooooode
1. Cho người chạy theo track trong morfit
#include "Engine\\Include\\mrft_api.h"
#include <iostream.h>
void main(void)
{
void Move_man_on_track(DWORD man,DWORD track);
int rc=Morfit_engine_load_world("nguoi2.wld",".","Bitmaps",USER_DEFINED_BEHAVIOR);
if(rc==VR_ERROR) {
cout << "Failed to load world, aborting
";
cout << "look at error.log to see why
";
return;
}
Morfit_engine_set_default_rendering_window_title("esc to exit");
Morfit_engine_maximize_default_rendering_window();
ShowCursor(FALSE); // Hide the cursor
DWORD camera=Morfit_camera_get_default_camera();
DWORD man=Morfit_object_get_object_using_name("man");
DWORD track=Morfit_track_get_using_name("tr");
Morfit_object_set_chase_type(man, CHASE_TRACK);
Morfit_object_set_track(man,track);
Morfit_object_set_absolute_speed(man,20);
// nguoi k bi chim duoi dat
double box[2][3];
Morfit_object_get_bounding_box(man,box);
double height = (box[1][2]-box[0][2]);
double up[3]={0,0,height/2};
Morfit_object_set_track_offset(man,up);
while( (GetAsyncKeyState(VK_ESCAPE)&1) ==0 ) {
Morfit_engine_render(NULL,camera);
}
}
2. Di chuyen camera và di chuyen doi tuong
#include "Engine\\Include\\mrft_api.h"
#include <iostream.h>
void main(void)
{
void Move_camera(DWORD camera);
void MoveCar(DWORD car_handle);
int rc = Morfit_engine_load_world ( "bai2.wld", ".", "Bitmaps", USER_DEFINED_BEHAVIOR);
if(rc==VR_ERROR) {
cout << "Ban da bi loi khi load the gioi rui !!!
";
cout << "look at error.log to see why
";
return;
}
Morfit_engine_set_default_rendering_window_title("To move the camera, use arrow keys, 'f', 'b' <ESC> - Exit");
Morfit_engine_maximize_default_rendering_window();
ShowCursor(FALSE); // Hide the cursor
DWORD camera=Morfit_camera_get_default_camera();
Morfit_camera_set_chase_type(camera,NO_CHASE);
DWORD car=Morfit_object_get_object_using_name("mycar_3");
Morfit_object_set_direction(car,-1,0,0);
while( (GetAsyncKeyState(VK_ESCAPE)==0)) { // Loop until escape is pressed
MoveCar(car);
Move_camera(camera);
Morfit_engine_render(NULL,camera);
}
}
void Move_camera(DWORD camera)
{
double x,y,z;
//Gets camera's location coordinates
Morfit_camera_get_location(camera, &x,&y,&z);
if(GetAsyncKeyState('T') < 0) // move camera up
z +=25;
if(GetAsyncKeyState('G') < 0) // move camera down
z -=25;
if(GetAsyncKeyState('F') < 0) // move camera right
y +=25;
if(GetAsyncKeyState('H') < 0) // move camera left
y -=25;
if(GetAsyncKeyState('B') < 0) // move camera back
x +=25;
if(GetAsyncKeyState('F') < 0) // move camera forward
x -=25;
Morfit_camera_set_location(camera, x, y, z);
return;
}
void MoveCar(DWORD car_handle)
{
const int speed = 20;
if (GetAsyncKeyState(VK_UP)<0)
Morfit_object_move(car_handle,OBJECT_SPACE,-speed,0,0);
if (GetAsyncKeyState(VK_DOWN)<0)
Morfit_object_move(car_handle,OBJECT_SPACE,speed,0,0);
if (GetAsyncKeyState(VK_LEFT)<0)
Morfit_object_move(car_handle,OBJECT_SPACE,0,-speed,0);
if (GetAsyncKeyState(VK_RIGHT)<0)
Morfit_object_move(car_handle,OBJECT_SPACE,0,speed,0);
if (GetAsyncKeyState(VK_SPACE)<0)
Morfit_object_rotate_z(car_handle,90,OBJECT_SPACE);
return;
}
3. Chuyen camera (2 xe, 2 track, 2 camera moi xe mot track mot camera)
#include "Engine\\Include\\mrft_api.h"
#include <iostream.h>
void main(void)
{
DWORD MoveCamera();
int rc=Morfit_engine_load_world("bai4.wld",".","Bitmaps",USER_DEFINED_BEHAVIOR);
if(rc==VR_ERROR) {
cout << "Failed to load world, aborting
";
cout << "look at error.log to see why
";
return;
}
Morfit_engine_set_default_rendering_window_title("An phim 'C' de chuyen camera va esc to exit");
Morfit_engine_maximize_default_rendering_window();
ShowCursor(FALSE); // Hide the cursor
DWORD camera;
while( (GetAsyncKeyState(VK_ESCAPE)&1) ==0 ) {
camera = MoveCamera();
Morfit_engine_render(NULL,camera);
}
}
DWORD MoveCamera()
{
static DWORD camera = Morfit_camera_get_default_camera();
static DWORD object_handle = Morfit_object_get_first_object();
enum movement_mode {Move, RotateX, RotateY, RotateZ, Bank,HeadAngle, Tilt, Zoom};
static movement_mode mode=Move;
const speed = 50;
if (GetAsyncKeyState('C')<0)
{
camera=Morfit_camera_get_next_camera(camera);
if (camera==NULL) camera=Morfit_camera_get_first_camera();
mode = Move;
}
return camera;
}
4. Va chạm của các quả bóng (các quả bóng để động)
#include "Engine\\Include\\mrft_api.h"
#include<iostream.h>
void main()
{
void init(DWORD ball);
void restart_stopped_balls(DWORD ball[10]);
int rc=Morfit_engine_load_world("qua bong.wld",".","Bitmaps",USER_DEFINED_BEHAVIOR);
if(rc==VR_ERROR) {
cout << "Failed to load world, aborting
";
cout << "look at error.log to see why
";
return;
}
Morfit_engine_set_default_rendering_window_title("Va cham giua cac qua bong");
Morfit_engine_maximize_default_rendering_window();
ShowCursor(FALSE);
DWORD camera=Morfit_camera_get_default_camera();
DWORD ball[10];
ball[0]=Morfit_object_get_object_using_name("ball1");
ball[1]=Morfit_object_get_object_using_name("ball2");
ball[2]=Morfit_object_get_object_using_name("ball3");
ball[3]=Morfit_object_get_object_using_name("ball4");
ball[4]=Morfit_object_get_object_using_name("ball5");
ball[5]=Morfit_object_get_object_using_name("ball6");
ball[6]=Morfit_object_get_object_using_name("ball7");
ball[7]=Morfit_object_get_object_using_name("ball8");
ball[8]=Morfit_object_get_object_using_name("ball9");
ball[9]=Morfit_object_get_object_using_name("ball10");
for(int i=0;i<10;i++)
init(ball[i]);
while ((GetAsyncKeyState(VK_ESCAPE)&1)==0)
{
restart_stopped_balls(ball);
Morfit_engine_render(NULL,camera);
}
Morfit_engine_close();
exit(0);
}
void init(DWORD ball)
{
Morfit_object_set_chase_type(ball,CHASE_PHYSICS);
double speed[3]={rand(),rand(),rand()};
if(speed[2]<0) speed[2]=-speed[2];
Morfit_object_set_speed(ball,speed);
Morfit_object_set_absolute_speed(ball,rand()*200);
Morfit_object_set_max_speed(ball,150);
Morfit_object_set_friction(ball,0);
Morfit_object_set_elasticity(ball,.7);
double force[3]={0,0,-1};
Morfit_object_set_force(ball,force);
}
void restart_stopped_balls(DWORD ball[10])
{
double speed;
for(int i=0;i<10;i++)
{
speed=Morfit_object_get_absolute_speed(ball[i]);
if (speed<.5)
init(ball[i]);
}
return;
}
5. Tạo sóng
#include<conio.h>
#include<stdio.h>
#include<math.h>
#include<iostream.h>
#include "Engine\\Include\\Mrft_api.h"
#define MAX_POLYS 20
void DrawPolygons();
void AddBitmap();
void AddPoint(double point[3],DWORD poly_handle);
void CreatePolygon(double p1[3],double p2[3],double p3[3]);
void Wave();
void main()
{
//Load an empty world into the engine
int result = Morfit_engine_load_world("song1.wld",".","Bitmaps",
USER_DEFINED_BEHAVIOR | EDITOR_MODE);
if(result==VR_ERROR)
{
cout<<"
Failed to load world, aborting
";
return;
}
Morfit_engine_set_resolution(640,480,16);
Morfit_engine_hide_log_window(); //Hide the window with the progress bar
Morfit_engine_maximize_default_rendering_window();
Morfit_engine_set_default_rendering_window_title("Console Samples: Wave Sample Press ESC to end");
ShowCursor(FALSE);
Morfit_engine_set_perspective_correction_accuracy(0);
Morfit_engine_set_picture_quality(2000*2000);
DWORD camera = Morfit_camera_get_default_camera();
Morfit_camera_set_location(camera,5000,2500,500);
Morfit_camera_set_direction(camera,-1,0,0);
DrawPolygons();
AddBitmap();
//The main loop
while( (GetAsyncKeyState(VK_ESCAPE)&1) ==0 )
{
Wave();
Morfit_engine_render(NULL,camera);
}
Morfit_engine_close();
}
void DrawPolygons()
{
double p1[3],p2[3],p3[3],p4[3];
//initialize points
p1[0] = 100; p1[1] = 100; p1[2] = 0;
p2[0] = 400; p2[1] = 100; p2[2] = 0;
p3[0] = 400; p3[1] = 400; p3[2] = 0;
p4[0] = 100; p4[1] = 400; p4[2] = 0;
for(int row = 0;row < MAX_POLYS;row++)
{
for(int col = 0;col < MAX_POLYS;col++)
{
CreatePolygon(p1,p3,p2);//(add the points clockwise
CreatePolygon(p1,p4,p3); // to make the polygons visible)
//increment the y coordinate by 300
p1[1] += 300;
p2[1] += 300;
p3[1] += 300;
p4[1] += 300;
}
//increment the x coord. by 300, and reinitialize y to first column
p1[0] += 300; p1[1] = 100;
p2[0] += 300; p2[1] = 100;
p3[0] += 300; p3[1] = 400;
p4[0] += 300; p4[1] = 400;
}
}
void CreatePolygon(double p1[], double p2[], double p3[])
{
//create the polygon
DWORD polygon_handle = Morfit_polygon_create();
if (!polygon_handle)
return;
//add 3 points to the polygon
AddPoint(p1,polygon_handle);
AddPoint(p2,polygon_handle);
AddPoint(p3,polygon_handle);
//actually draw the polygon on the screen
if (OK != Morfit_engine_add_polygon(polygon_handle))
return;
}
void AddPoint(double point[3],DWORD poly_handle)
{
double location[6];
DWORD point_handle;
//fill location with values and add the point
location[0] = point[0];
location[1] = point[1];
location[2] = point[2];
location[3] = 0;
location[4] = 0;
location[5] = 100;
point_handle = Morfit_polygon_add_point(poly_handle,location);
if(!point_handle)
return;
}
void AddBitmap()
{
DWORD bitmap_handle = Morfit_bitmap_load("Bitmaps\\water1",-1 );
if(!bitmap_handle)
return;
//Add bitmap
int res = Morfit_group_wrap_a_bitmap(NULL,bitmap_handle,1,1);
Morfit_engine_set_atmospheric_effect(80,80,110);
}
void Wave()
{
DWORD time = GetTickCount();
double coords[3];
for(DWORD poly=Morfit_polygon_get_first_polygon();poly!=NULL;
poly = Morfit_polygon_get_next(poly))
{
for(DWORD point=Morfit_polygon_get_first_point(poly);point!=NULL;
point = Morfit_point_get_next_point(point))
{
Morfit_point_get_xyz(point,coords);
coords[2] = sin(coords[0]+ coords[1] +(double)time/300)*50;
Morfit_point_set_xyz(point,coords);
}
}
}
6. Va cham oto va nha
#include "Engine\Include\mrft_api.h"
#include <iostream.h>
void main(void)
{
void MoveCar(DWORD car_handle,double half_car_length);
int rc=Morfit_engine_load_world("house_car.wld",".","Bitmaps",USER_DEFINED_BEHAVIOR);
if(rc==VR_ERROR)
{
}
Morfit_engine_set_default_rendering_window_title("Doi tuong va cham <esc> to exit");
Morfit_engine_maximize_default_rendering_window();
DWORD camera=Morfit_camera_get_default_camera();
DWORD car=Morfit_object_get_object_using_name("mycar");
Morfit_object_set_direction(car,-1,0,0);
double box[2][3];
Morfit_object_get_bounding_box(car, box);
double half_car_length=(box[1][0]-box[0][0])/2;
while( (GetAsyncKeyState(VK_ESCAPE)&1) ==0 ) {
MoveCar(car,half_car_length);
Morfit_engine_render(NULL,camera);
}
}
void MoveCar(DWORD car_handle, double half_car_length)
{
if ((GetAsyncKeyState(VK_LEFT)<0) ==1 )
{
Morfit_object_rotate_z(car_handle,10,OBJECT_SPACE);
}
if ((GetAsyncKeyState(VK_RIGHT)<0) ==1 )
{
Morfit_object_rotate_z(car_handle,-10,OBJECT_SPACE);
}
if ((GetAsyncKeyState(VK_SPACE)<0) ==1 )
{
const int speed = 20;
double x,y,z;
double dir_x,dir_y,dir_z;
double front_of_car[3];
double ahead_of_car[3];
Morfit_object_get_location(car_handle,&x,&y,&z);
Morfit_object_get_direction(car_handle,&dir_x,&dir_y,&dir_z);
front_of_car[0]=x+half_car_length*dir_x;
front_of_car[1]=y+half_car_length*dir_y;
front_of_car[2]=z+half_car_length*dir_z;
ahead_of_car[0]=front_of_car[0]+speed*dir_x;
ahead_of_car[1]=front_of_car[1]+speed*dir_y;
ahead_of_car[2]=front_of_car[2]+speed*dir_z;
DWORD intersecting_polygon;
DWORD intersecting_object;
double intersection_point[3];
if (Morfit_object_is_movement_possible(car_handle, front_of_car,ahead_of_car,&intersecting_polygon,intersection_point,&intersecting_object))
Morfit_object_move(car_handle,OBJECT_SPACE,-speed,0,0);
}
return;
}
Bạn đang đọc truyện trên: AzTruyen.Top