Subversion Repositories Kolibri OS

Rev

Rev 8025 | Blame | Last modification | View Log | Download | RSS feed

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