Subversion Repositories Kolibri OS

Rev

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