Subversion Repositories Kolibri OS

Rev

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