Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1.    ; DATA AREA  ************************************
  2.  
  3.         i3              dw      3
  4.         i256            dw      256
  5.         i255d           dd      255
  6.         dot_max         dd      1.0      ; dot product max and min
  7.         dot_min         dd      0.0
  8.         env_const       dd      1.05
  9.         correct_tex     dw      255
  10.         tex_x_div2      dw      TEX_X  / 2
  11.         tex_y_div2      dw      TEX_Y  / 2
  12.         xobs            dw      0 ;SIZE_X / 2 ;200 ;observer  = camera
  13.         yobs            dw      0 ;SIZE_Y / 2 ;200 ;coordinates
  14.         zobs            dw      -500
  15.         size_x          dw      SIZE_X
  16.         size_y          dw      SIZE_Y
  17.  
  18.         angle_counter dw 0
  19.         piD180        dd 0.017453292519943295769236907684886
  20.         piD128        dd 0.024544
  21.         const6        dw 6,6,6,6
  22.         x_offset      dw SIZE_X / 2
  23.         y_offset      dw SIZE_Y / 2
  24.         z_offset      dw 0
  25.         rsscale       dd 175.0           ; next real scale
  26.         vect_x        dw SIZE_X / 2
  27.         vect_y        dw SIZE_Y / 2
  28.         vect_z        dw 0
  29.         angle_x       dw 0
  30.         angle_y       dw 0
  31.         angle_z       dw 0
  32.  
  33.  
  34.         menu:
  35.                db 2                ; button number  = index
  36.                db 'rotary    '     ; label
  37.                db 3                ; max flag  + 1 , if = 255, no flag
  38.  r_flag        db 1                ; flag
  39.                dd axl_f            ; offset to flags description
  40.  
  41.                db 3
  42.                db 'shd. model'
  43.                db 11
  44.  dr_flag       db 0
  45.                dd shd_f
  46.  
  47.                db 4
  48.                db 'speed     '
  49.                db 2
  50.  speed_flag    db 0
  51.                dd spd_f
  52.  
  53.                db 5
  54.                db 'zoom out  '
  55.                db 255
  56.                db ?
  57.                dd ?
  58.  
  59.                db 6
  60.                db 'zoom in   '
  61.                db 255
  62.                db ?
  63.                dd ?
  64.  
  65.                db 7
  66.                db 'catmull   '
  67.                db 2
  68. catmull_flag   db 1
  69.                dd onoff_f
  70.  
  71.                db 8
  72.                db 'culling   '
  73.                db 2
  74. culling_flag   db 1
  75.                dd onoff_f
  76.  
  77.                db 9
  78.                db 'rand.light'
  79.                db 255
  80.                db ?
  81.                dd ?
  82.  
  83.                db 10
  84.                db 'blur      '
  85.                db 6
  86. blur_flag      db 0
  87.                dd blur_f
  88.  
  89.                db 11
  90.                db 'mirror x  '
  91.                db 2
  92. mirr_x_flag    db 0
  93.                dd onoff_f
  94.  
  95.                db 12
  96.                db 'mirror y  '
  97.                db 2
  98. mirr_y_flag    db 0
  99.                dd onoff_f
  100.  
  101.                db 13
  102.                db 'mirror z  '
  103.                db 2
  104. mirr_z_flag    db 0
  105.                dd onoff_f
  106.  
  107.                db 14
  108.                db 'xchg      '
  109.                db 4
  110. xchg_flag      db 0
  111.                dd xchg_f
  112.  
  113.                db 15
  114.                db 'emboss    '
  115.                db 2
  116. emboss_flag    db 0
  117.                dd onoff_f
  118.  
  119.                db 16
  120.                db 'fire      '
  121.                db 3
  122. fire_flag      db 0
  123.                dd blur_f
  124.  
  125.                db 17
  126.                db 'move      '
  127.                db 2
  128. move_flag      db 0
  129.                dd move_f
  130.  
  131.                   db 18
  132.                   db 'generate  '
  133.                   db 6
  134. generator_flag    db 0
  135.                   dd blur_f
  136.  
  137.                   db 19
  138.                   db 'bumps     '
  139.                   db 2
  140. bumps_flag        db 0
  141.                   dd bumps_f
  142.  
  143.                   db 20
  144.                   db 'bumps deep'
  145.                   db 4
  146. bumps_deep_flag   db 3
  147.                   dd bumps_d_f
  148.  
  149. ;                  db 21
  150. ;                  db 'light No. '
  151. ;                  db 3
  152. ;light_no_flag     db 0
  153. ;                  dd bumps_d_f
  154.  
  155. ;                db 22
  156. ;                db 'light comp'
  157. ;                db 3
  158. ;light_comp_flag db 0
  159. ;                dd light_component_f
  160.  
  161. ;;                db 23
  162. ;;                db 'col. comp'
  163. ;;                db 3
  164. ;;color_comp_flag db 0
  165. ;;                dd color_component_f
  166.  
  167.  
  168.                db -1       ; end mark
  169.  
  170.  
  171. flags:             ; flags description
  172.  shd_f:
  173.     db 'flat'
  174.     db 'grd '
  175.     db 'env '
  176.     db 'bump'
  177.     db 'tex '
  178.     db 'pos '
  179.     db 'dots'
  180.     db 'txgr'
  181.     db '2tex'
  182.     db 'btex'
  183.     db 'cenv'
  184.  spd_f:
  185.     db 'idle'
  186.     db 'full'
  187.  axl_f:
  188.     db ' y  '
  189.     db 'x+y '
  190.     db ' x  '
  191.  onoff_f:
  192.     db 'off '
  193.     db 'on  '
  194. ; light_component_f:
  195. ;    db 'norm '                ; diffuse   |
  196. ;    db 'min'                  ; specular  |  or sth. like this
  197. ;    db 'max '                 ; emmisive  |
  198.  
  199. ;; color_component_f:
  200. ;;    db ' r  '
  201. ;;    db ' g  '
  202. ;;    db ' b  '
  203.  
  204.           blur_f:              ; blur, fire
  205.             db 'off '
  206. bumps_d_f:  db ' 1  '
  207.             db ' 2  '
  208.             db ' 3  '
  209.             db ' 4  '
  210.             db ' 5  '
  211.  
  212.  xchg_f:
  213.     db 'no  '
  214.     db 'x<>y'
  215.     db 'z<>x'
  216.     db 'y<>z'
  217.  move_f:
  218.     db 'obj '
  219.     db 'camr'
  220. ;    db 'lght'
  221.  bumps_f:
  222.     db 'rand'
  223.     db 'tex '
  224. ;    db 'cscl'
  225. base_vector:
  226.     labelvector:
  227.         db   'add vector'
  228.     labelvectorend:
  229.     labelyminus:
  230.         db   'y -'
  231.     labelyminusend:
  232.     labelzplus:
  233.         db   'z +'
  234.     labelzplusend:
  235.     labelxminus:
  236.         db   'x -'
  237.     labelxminusend:
  238.     labelxplus:
  239.         db   'x +'
  240.     labelxplusend:
  241.     labelzminus:
  242.         db   'z -'
  243.     labelzminusend:
  244.     labelyplus:
  245.         db   'y +'
  246.     labelyplusend:
  247.  
  248. ;navigation_size = $ - labelvector
  249. ;        db   'set color '
  250. ;        db   'r -'
  251. ;        db   'g +'
  252. ;        db   'b -'
  253. ;        db   'b +'
  254. ;        db   'g -'
  255. ;        db   'r +'
  256.  
  257.     labelt:
  258.         db   'DEUS CARITAS EST'
  259.       if Ext=MMX
  260.         db   ' (MMX)'
  261.       end if
  262.       if Ext=SSE
  263.         db   ' (SSE)'
  264.       end if
  265.         db   ' 0.053'
  266.     labellen:
  267.         STRdata db '-1        '
  268.  
  269.     all_lights_size dw lightsend-lights
  270.  
  271. if USE_LFN
  272.  
  273.         file_info:
  274.                 dd      0
  275.                 dd      0
  276.                 dd      0
  277.          fsize  dd      0 ;180000 ; sizeof(workarea)
  278.          fptr   dd      0 ;workarea
  279.         file_name:
  280.                 db      '/rd/1/3d/teapot.3ds',0
  281.  
  282. else
  283.  
  284.         file_info:
  285.                 dd 0
  286.                 dd 0
  287.          fsize  dd 1
  288.                 dd workarea
  289.                 dd hash_table
  290.         file_name:
  291.                 db   '/rd/1/teapot.3ds',0
  292. end if
  293.  
  294. I_END:
  295.  
  296.       rb 256
  297.  
  298. ;=============================================
  299. lights:
  300.      .light_vector        dd      0.0,0.0,-1.0   ; x,y,z  Z cooficient of vector must be negative
  301.      .orginal_color_r     db      1              ;  +12
  302.      .orginal_color_g     db      255              ;
  303.      .orginal_color_b     db      1              ;  +14
  304.      .min_color_r         db      1              ;
  305.      .min_color_g         db      1              ;  +16
  306.      .min_color_b         db      1              ;
  307.      .max_color_r         db      255            ;
  308.      .max_color_g         db      255            ;
  309.      .max_color_b         db      255            ;
  310.      .shine               db      24             ;  +21
  311.  ;    LIGHT_SIZE equ ($-lights)
  312.  
  313.         dd      -0.5,-0.5,-1.0   ; x,y,z ;  .light_vector
  314.         db      5                ; .orginal_color_r
  315.         db      1                ; .orginal_color_g
  316.         db      135              ; .orginal_color_b
  317.         db      19               ; .min_color_r
  318.         db      19               ; .min_color_g
  319.         db      19               ; .min_color_b
  320.         db      255              ; .max_color_r
  321.         db      255              ; .max_color_g
  322.         db      255              ; .max_color_b
  323.         db      16               ; .shine
  324.  
  325.         dd      0.5,0.5,-1.0    ; x,y,z ;  .light_vector
  326.         db      135             ; .orginal_color_r
  327.         db      1               ; .orginal_color_g
  328.         db      1               ; .orginal_color_b
  329.         db      19              ; .min_color_r
  330.         db      19              ; .min_color_g
  331.         db      19              ; .min_color_b
  332.         db      255             ; .max_color_r
  333.         db      255             ; .max_color_g
  334.         db      20              ; .max_color_b
  335.         db      16              ; .shine
  336. ;        ALL_LIGHTS_SIZE equ ($ - lights)
  337. ;#all_lights_size dw ($ - lights) ;ALL_LIGHTS_SIZE
  338. ;===============================================
  339.  
  340. lightsend:
  341.  
  342. if USE_LFN = 0
  343. hash_table rb 4096
  344. SourceFile:
  345. workarea   rb 180000
  346. else
  347. SourceFile:
  348. workarea   rb 180
  349. end if
  350. EndFile   dd ?
  351. align 8
  352.         sinbeta dd      ?;+32
  353.         cosbeta dd      ?
  354.  
  355.         xsub    dw      ?
  356.         zsub    dw      ?;+40
  357.         ysub    dw      ?
  358.  
  359.         xx1     dw      ?
  360.         yy1     dw      ?
  361.         zz1     dw      ?;+48    xx1 + 4
  362.         xx2     dw      ?
  363.         yy2     dw      ?
  364.         zz2     dw      ?      ; xx1 + 10
  365.         xx3     dw      ?;+56
  366.         yy3     dw      ?
  367.         zz3     dw      ?      ; xx1 + 16
  368.         scale   dd      ?                 ; help scale variable
  369.    ;==
  370.         triangles_count_var     dw ?
  371.         points_count_var        dw ?
  372.         triangles_ptr           dd ?
  373.         triangles_w_z_ptr       dd ?
  374.         triangles_normals_ptr   dd ?
  375.         points_normals_ptr      dd ?
  376.         points_normals_rot_ptr  dd ?
  377.         points_ptr              dd ?
  378.         points_rotated_ptr      dd ?
  379.         points_translated_ptr   dd ?
  380.         screen_ptr              dd ?
  381.         Zbuffer_ptr             dd ?
  382.  
  383.    ;===
  384.  
  385.         point_index1        dw ?   ;-\
  386.         point_index2        dw ?   ;  }  don't change order
  387.         point_index3        dw ?   ;-/
  388.         temp_col            dw ?
  389.         high                dd ?
  390.         rand_seed           dw ?
  391. align 8
  392.         buffer  dq      ?
  393.         err     dd      ?
  394.         drr     dd      ?
  395.         xx      dd      ?
  396.         yy      dd      ?
  397.         xst     dd      ?
  398.         yst     dd      ?
  399. ;        screen_ptr      dd     ?
  400. ;        Zbuffer_ptr     dd     ?
  401.  
  402.         matrix  rb 36
  403.         cos_tab rd 360
  404.         sin_tab rd 360
  405.  
  406. align 16
  407.  
  408. if USE_LFN = 0
  409.      points:
  410.         rw (EndFile-SourceFile)/12*3
  411.         points_count = ($-points)/6
  412.      triangles:
  413.         rw  (EndFile-SourceFile)/12*3
  414.         triangles_count = ($-triangles)/6
  415. align 16
  416.         real_points rd points_count*3 + 1
  417. align 16
  418.         rotated_points_r rd points_count*3 + 1
  419. align 16
  420.         points_rotated rw points_count*3 + 2 ;means translated
  421. align 16
  422.         triangles_normals rb triangles_count * 12 ;
  423. align 16
  424.         point_normals rb points_count * 12  ;one 3dvector - triple float dword x,y,z
  425. align 16
  426.         point_normals_rotated rb points_count * 12
  427. align 16
  428.         triangles_normals_rotated rb triangles_count * 12
  429.  
  430. else
  431.     points_count = 180000/6*3
  432.     triangles_count = 180000 / 6  ;($-triangles)/6
  433. end if
  434. align 16
  435.         label trizdd dword
  436.         label trizdq qword
  437.         triangles_with_z rw triangles_count*4 + 2 ; triangles triple dw + z position
  438. align 16
  439.         vectors rb 24
  440. ;align 16
  441. ;        points_color rb 6*points_count    ; each color as word
  442. ;        sorted_triangles rw triangles_count*3 + 2
  443. align 16
  444.         bumpmap         rb      TEXTURE_SIZE + 1
  445. align 16
  446.         bumpmap2        rb      TEXTURE_SIZE + 1
  447. align 16
  448.         envmap          rb      (TEXTURE_SIZE +1) * 3
  449. align 16
  450.         envmap_cub      rb      TEX_X * 3
  451. align 16
  452.         texmap          rb      (TEXTURE_SIZE +1) * 3
  453. align 16
  454.         color_map       rb      (TEXTURE_SIZE +1) * 3
  455. align 16
  456.         tex_points      rb      points_count * 4  ; bump_map  and texture coords
  457.                                 ; each point word x, word y
  458. align 16
  459.   ;      SourceFile:             ; source file temporally in screen area
  460.   ;      workarea        dd      ?
  461.  
  462.     ;    screen          rb      SIZE_X * SIZE_Y * 3   ; screen buffer
  463. ;align 16
  464.      ;   Z_buffer        rb      SIZE_X * SIZE_Y * 4
  465.         I_Param         rb      256
  466.         memStack        rb      4000 ;memory area for stack
  467. align  16
  468. screen: