Changeset 295 for trunk/thune/gl
- Timestamp:
- 10/06/06 19:34:27 (2 years ago)
- Location:
- trunk/thune/gl
- Files:
-
- 5 modified
Legend:
- Unmodified
- Added
- Removed
-
trunk/thune/gl/draw_list.c
r289 r295 23 23 #include "draw_ops.h" 24 24 #include "gllist.h" 25 #include "math3d.h" 25 26 26 27 #include <ft2build.h> … … 301 302 UCell* val; 302 303 UBlock* blk = ur_blockPtr( ctx->ctx.valBlk ); 303 304 val = blk->ptr.cells + CAM_CTX_VIEWPORT; 304 UCell* ctxCells = blk->ptr.cells; 305 306 val = ctxCells + CAM_CTX_VIEWPORT; 305 307 if( ur_is(val, UT_COORD) && (val->coord.len > 3) ) 306 308 { … … 320 322 // left, right, bottom, top, near, far 321 323 322 fov = number_d( blk->ptr.cells + CAM_CTX_FOV );324 fov = number_d( ctxCells + CAM_CTX_FOV ); 323 325 if( fov > 0.0 ) 324 326 { 325 327 gluPerspective( fov, aspect, 326 number_d( blk->ptr.cells + CAM_CTX_NEAR ),327 number_d( blk->ptr.cells + CAM_CTX_FAR ) );328 number_d( ctxCells + CAM_CTX_NEAR ), 329 number_d( ctxCells + CAM_CTX_FAR ) ); 328 330 } 329 331 else … … 332 334 h *= 0.5; 333 335 glOrtho( -w, w, -h, h, 334 number_d( blk->ptr.cells + CAM_CTX_NEAR ),335 number_d( blk->ptr.cells + CAM_CTX_FAR ) );336 number_d( ctxCells + CAM_CTX_NEAR ), 337 number_d( ctxCells + CAM_CTX_FAR ) ); 336 338 } 337 339 338 340 glMatrixMode( GL_MODELVIEW ); 339 341 340 val = blk->ptr.cells + CAM_CTX_ORIENT; 341 if( ur_is(val, UT_MATRIX) ) 342 { 343 //GLfloat eye[16]; 344 //ur_matrixInverse( eye, arr->ptr.floats ); 345 //glLoadMatrixf( eye ); 346 glLoadIdentity(); 342 val = ctxCells + CAM_CTX_ORIENT; 343 if( ur_is(val, UT_ARRAY) && (ur_arrayDT(val) == UT_DECIMAL) ) 344 { 345 GLfloat eye[16]; 346 UBinary* arr = ur_bin(val); 347 if( arr->used == 16 ) 348 { 349 ur_matrixInverse( eye, arr->ptr.f ); 350 glLoadMatrixf( eye ); 351 } 352 else 353 { 354 glLoadIdentity(); 355 } 347 356 } 348 357 else … … 462 471 463 472 case DOP_CAMERA: 473 { 474 //int ref = ur_selIsAtom(pc) ? ur_sel(pc) : 0; 464 475 ++pc; 465 476 VAL_WORD_OR_PC 466 477 if( ur_is(val, UT_CONTEXT) ) 467 478 dop_camera( val ); 479 } 468 480 break; 469 481 -
trunk/thune/gl/gx.c
r287 r295 31 31 #include "audio.h" 32 32 #include "gllist.h" 33 /*34 33 #include "math3d.h" 35 #include <time.h> 36 */ 34 //#include <time.h> 37 35 38 36 #ifdef __APPLE__ … … 48 46 #define colorU8ToF(n) (((GLfloat) n) / 255.0f) 49 47 48 #define MOUSE_UNSET -9999 49 50 50 51 51 #if 0 … … 53 53 54 54 #define RESTYPE argc 55 56 #define MOUSE_UNSET -999957 55 58 56 … … 220 218 ur_initType(val, UT_LOGIC); 221 219 ur_logic(val) = 1; 222 /* 223 gEnv.prev_mouseX = MOUSE_UNSET; 224 */ 220 221 env->prevMouseX = MOUSE_UNSET; 225 222 break; 226 223 … … 282 279 283 280 case GLV_EVENT_MOTION: 284 val = _appendEvent( env->eventBlk, UR_ATOM_MOUSE_MOVE ); 285 ++val; 286 ur_initType(val, UT_COORD); 287 val->coord.len = 2; 288 val->coord.elem[0] = event->x; 289 val->coord.elem[1] = view->height - event->y - 1; 290 /* 291 { 292 //printf( "KR mouse-move %d %d\n", event->x, event->y ); 293 294 iv[ INPUT_MX ].integer = event->x; 295 iv[ INPUT_MY ].integer = gView->height - event->y - 1; 296 297 if( gEnv.prev_mouseX == MOUSE_UNSET ) 281 { 282 int dx, dy; 283 284 if( env->prevMouseX == MOUSE_UNSET ) 298 285 { 299 printf( "KR mouse reset\n" ); 300 iv[ INPUT_DX ].integer = 0; 301 iv[ INPUT_DY ].integer = 0; 286 printf( "KR mouse-move reset\n" ); 287 dx = dy = 0; 302 288 } 303 289 else 304 290 { 305 iv[ INPUT_DX ].integer = event->x - gEnv.prev_mouseX;306 iv[ INPUT_DY ].integer = gEnv.prev_mouseY - event->y;291 dx = event->x - env->prevMouseX; 292 dy = env->prevMouseY - event->y; 307 293 } 308 309 orEvalBlock( orBLOCKS + blkV->index, blkV->series.it ); 310 gxHandleError(); 311 312 gEnv.prev_mouseX = event->x; 313 gEnv.prev_mouseY = event->y; 314 } 315 */ 294 env->prevMouseX = event->x; 295 env->prevMouseY = event->y; 296 297 val = _appendEvent( env->eventBlk, UR_ATOM_MOUSE_MOVE ); 298 ++val; 299 300 // coord elements: x, y, dx, dy 301 302 ur_initType(val, UT_COORD); 303 val->coord.len = 5; 304 val->coord.elem[0] = event->x; 305 val->coord.elem[1] = view->height - event->y - 1; 306 val->coord.elem[2] = dx; 307 val->coord.elem[3] = dy; 308 val->coord.elem[4] = event->state; 309 } 316 310 break; 317 311 … … 1064 1058 } 1065 1059 UR_S_DROP; 1060 } 1061 1062 1063 // (matrix vec3 -- ) 1064 UR_CALL( uc_look_at ) 1065 { 1066 UCell* prev; 1067 UBinary* bin; 1068 float* right; 1069 float* up; 1070 float* zv; 1071 1072 prev = ur_s_prev(tos); 1073 1074 if( ur_is(prev, UT_ARRAY) && ur_is(tos, UT_VEC3) ) 1075 { 1076 bin = ur_bin( prev ); 1077 1078 right = bin->ptr.f; 1079 up = bin->ptr.f + 4; 1080 zv = bin->ptr.f + 8; 1081 1082 zv[0] = zv[4] - tos->vec3.xyz[0]; 1083 zv[1] = zv[5] - tos->vec3.xyz[1]; 1084 zv[2] = zv[6] - tos->vec3.xyz[2]; 1085 ur_normalize( zv ); 1086 1087 up[0] = 0.0; 1088 up[1] = 1.0; 1089 up[2] = 0.0; 1090 1091 ur_cross( up, zv, right ); 1092 ur_normalize( right ); 1093 1094 // Recompute up to make perpendicular to right & zv. 1095 ur_cross( zv, right, up ); 1096 ur_normalize( up ); 1097 1098 UR_S_DROPN( 2 ); 1099 return; 1100 } 1101 1102 ur_throwErr( UR_ERR_DATATYPE, "look-at expected array! vec3!" ); 1066 1103 } 1067 1104 … … 1770 1807 { uc_load_png, "load-png" }, 1771 1808 { uc_load_wav, "load-wav" }, 1772 { uc_display, "display" } 1809 { uc_display, "display" }, 1810 { uc_look_at, "look-at" } 1773 1811 }; 1774 1812 … … 1819 1857 1820 1858 gxEnv.view = 0; 1859 gxEnv.prevMouseX = MOUSE_UNSET; 1860 gxEnv.prevMouseY = MOUSE_UNSET; 1821 1861 1822 1862 _createFixedAtoms( env ); -
trunk/thune/gl/gx.h
r286 r295 133 133 double view_aspect; 134 134 135 int prevMouseX; 136 int prevMouseY; 137 135 138 UIndex eventBlkHold; 136 139 UBlock* eventBlk; 137 140 138 141 #if 0 139 UAtom atom_joystick;140 UAtom atom_model;141 UAtom atom_solid;142 143 142 UContext input_ctx; 144 143 UCell* input_values; … … 146 145 UIndex widgetCtxN; 147 146 UIndex drawListDialectBlkN; 148 149 int prev_mouseX;150 int prev_mouseY;151 147 152 148 int running; -
trunk/thune/gl/gx.t
r286 r295 15 15 16 16 [ 17 none :orient ation17 none :orient 18 18 none :position 19 19 none :viewport -
trunk/thune/gl/test.t
r287 r295 41 41 ] 42 42 draw-list.compile :bg-list 43 44 45 "data/d7.gx" load draw-list.compile :d7-list 43 46 44 47 … … 73 76 74 77 78 camera [ 79 60.0 :fov 80 1.0 :near 81 9000.0 :far 82 20,20,200,200 :viewport 83 #[1.0 0 0 0 84 0 1.0 0 0 85 0 0 1.0 0 86 0 0 15.0 1.0] :orient 87 88 0.0 :azimuth 89 0.0 :elev 90 15.0 :dist 91 0.0,0.0,0.0 :focal-pnt 92 93 [dx dy /*| ced*/] 94 [ 95 dx 0.5 mul to-rad azimuth add :azimuth 96 dy -0.5 mul to-rad elev add -1.53938 1.53938 limit :elev 97 98 ;["az-el" azimuth to-deg elev to-deg] print 99 100 elev cos dist mul dup /*:ced*/ 101 azimuth cos /*ced*/ mul focal-pnt/1 add :orient/13 102 elev sin dist mul focal-pnt/2 add :orient/14 103 azimuth sin /*ced*/ mul focal-pnt/3 add :orient/15 104 105 orient focal-pnt look-at 106 ] 107 func :turntable 108 ] make :visual-cam 109 75 110 -1,-1 :mouse-pos 76 111 -1,-1 :click-pos 112 113 114 115 116 /* 117 event-handler [ 118 mouse-move [["move:" x y] print] 119 mouse-move left-button [visual-cam/orient dx dy] 120 ] 121 */ 77 122 78 123 [ … … 90 135 dup :area 91 136 dup :ortho-cam/viewport 92 ;ortho-cam 'ortho update-projection 137 138 dup :.t 139 .t/3 2 div :.t/3 140 .t/4 2 div :.t/4 141 .t :visual-cam/viewport 93 142 ] 94 143 … … 96 145 dup :mouse-pos 97 146 ;"move: " prin dup . 147 148 mouse-pos/5 zero? iff ( 149 mouse-pos/3 mouse-pos/4 visual-cam/turntable 150 ) 98 151 ] 99 152 mouse-down [ … … 112 165 113 166 draw-list [ 167 camera visual-cam 168 solid 169 call d7-list 170 114 171 camera ortho-cam 115 172 push … … 124 181 text mouse-pos mouse-pos 125 182 126 ;font fontF127 ;text 0,40 "Ceti Alpha III"183 font fontF 184 text 0,40 "Ceti Alpha III" 128 185 129 186 ;children ['draw get do] iter … … 228 285 229 286 font! ["data/20thfont.ttf" 22] make :fontA 230 ;font! ["data/FederationBold_KR.ttf" 12 256,128] make :fontF287 font! ["data/FederationBold_KR.ttf" 12 256,128] make :fontF 231 288 232 289
