8 bool r3_start_frame_context(r3s_context
*ctxt
);
13 // create a block, transform and build the box
14 // level is level of subobjects to go down
15 draw_box(int lev
,double s
, grs_bitmap
*bm
)
17 static mxs_vector v
[8];
18 static r3s_point p
[8];
19 static r3s_phandle vlist
[4];
23 r3_set_polygon_context(R3_PL_POLYGON
| R3_PL_TEXTURE
);
50 r3_transform_block(8,p
,v
);
54 for (i
=0; i
< 6; ++i
) {
56 case 0: vlist
[3] = p
+0; vlist
[2] = p
+1; vlist
[1] = p
+2; vlist
[0] = p
+3; break;
57 case 1: vlist
[0] = p
+4; vlist
[1] = p
+5; vlist
[2] = p
+6; vlist
[3] = p
+7; break;
58 case 2: vlist
[3] = p
+3; vlist
[2] = p
+2; vlist
[1] = p
+6; vlist
[0] = p
+7; break;
59 case 3: vlist
[3] = p
+2; vlist
[2] = p
+1; vlist
[1] = p
+5; vlist
[0] = p
+6; break;
60 case 4: vlist
[3] = p
+1; vlist
[2] = p
+0; vlist
[1] = p
+4; vlist
[0] = p
+5; break;
61 case 5: vlist
[3] = p
+0; vlist
[2] = p
+3; vlist
[1] = p
+7; vlist
[0] = p
+4; break;
63 vlist
[0]->grp
.u
= vlist
[3]->grp
.u
= 0;
64 vlist
[1]->grp
.u
= vlist
[2]->grp
.u
= 64;
65 vlist
[0]->grp
.v
= vlist
[1]->grp
.v
= 0;
66 vlist
[2]->grp
.v
= vlist
[3]->grp
.v
= 64;
67 r3_draw_tmap(4,vlist
,bm
);
76 mx_scaleeq_vec(&v
,s
*2);
78 r3_start_object_n(&v
,6.28*cur_time
/(30.0*s
*s
),ax
);
79 // r3_start_object_x(&v,3.14159/4);
80 draw_box(lev
-1,s
*.5, bm
);
89 gr_set_canvas(grd_visible_canvas
);
90 gr_bitmap(&(off_canv
->bm
),0,0);
91 gr_set_canvas(off_canv
);
94 grs_bitmap
*testcore_build_tmap(int shift
, int seed
)
96 grs_bitmap
*us
; // where we will go
97 uchar
*dummy_tm
; // store the damn bitmap
98 int x
, y
; // loop vars
99 int size
, sdown
; // pixel size (not exp), shift down
100 int v
[4]; // the 4 colors to use
102 if (seed
!=0) srand(seed
); // setup colors
103 v
[0]=rand()&0xff; v
[1]=rand()&0xff; v
[2]=rand()&0xff; v
[3]=rand()&0xff;
105 size
=1<<shift
; // we are 2n pixels across
106 (shift
>=4)?sdown
=shift
-3:sdown
=0; // 8 or fewer checkers on the texture
108 dummy_tm
=(uchar
*)Malloc(size
*size
);
109 us
=(grs_bitmap
*)Malloc(sizeof(grs_bitmap
));
110 if ((dummy_tm
==NULL
)||(us
==NULL
)) return NULL
;
111 for (x
=0; x
<size
; x
++)
112 for (y
=0; y
<size
; y
++)
113 dummy_tm
[(x
*size
)+y
]=x
^y
;
114 gr_init_bm(us
,dummy_tm
,BMT_FLAT8
,0,size
,size
);
118 void main(int argc
,char **argv
)
130 // init the mode, make a screen
132 gr_set_mode(GRM_640x480x8
,TRUE
);
133 screen
= gr_alloc_screen(grd_mode_info
[grd_mode
].w
,grd_mode_info
[grd_mode
].h
);
134 gr_set_screen(screen
);
136 ex_startup(EXM_DIVIDE_ERR
);
138 r3_init_defaults(-1,-1,-1,-1);
140 off_canv
= gr_alloc_canvas(BMT_FLAT8
,640,480);
141 gr_set_canvas(off_canv
);
143 // get us our context
144 r3_alloc_context(&con
,0);
147 r3_start_frame_context(&con
);
149 bm
= testcore_build_tmap(6, 0);
153 // need to add to matrix.h rotate transform
155 for (j
=0;j
<100;j
+=.1) {
158 obj
.x
= 1.0 + atoi(argv
[1])/2 + (float)j
/10+2.0;
159 obj
.y
= j
>30?(float)(j
-30)/10:0;
160 obj
.z
= j
>60?(float)(j
-60)/10:0;
163 r3_start_object_z(&obj
,6.28*(float)(j
)/30.0);
165 r3_start_object_y(&obj
,6.28*(float)(j
)/30.0);
167 r3_start_object_x(&obj
,6.28*(float)(j
)/30.0);
169 // set the object frame of reference
170 // r3_start_object(&obj);
177 draw_box(atoi(argv
[1]),1.0, bm
);