0,0 → 1,468 |
; DATA AREA ************************************ |
|
i3 dw 3 |
i256 dw 256 |
i255d dd 255 |
dot_max dd 1.0 ; dot product max and min |
dot_min dd 0.0 |
env_const dd 1.05 |
correct_tex dw 255 |
tex_x_div2 dw TEX_X / 2 |
tex_y_div2 dw TEX_Y / 2 |
xobs dw 0 ;SIZE_X / 2 ;200 ;observer = camera |
yobs dw 0 ;SIZE_Y / 2 ;200 ;coordinates |
zobs dw -500 |
size_x dw SIZE_X |
size_y dw SIZE_Y |
|
angle_counter dw 0 |
piD180 dd 0.017453292519943295769236907684886 |
piD128 dd 0.024544 |
const6 dw 6,6,6,6 |
x_offset dw SIZE_X / 2 |
y_offset dw SIZE_Y / 2 |
z_offset dw 0 |
rsscale dd 175.0 ; next real scale |
vect_x dw SIZE_X / 2 |
vect_y dw SIZE_Y / 2 |
vect_z dw 0 |
angle_x dw 0 |
angle_y dw 0 |
angle_z dw 0 |
|
|
menu: |
db 2 ; button number = index |
db 'rotary ' ; label |
db 3 ; max flag + 1 , if = 255, no flag |
r_flag db 1 ; flag |
dd axl_f ; offset to flags description |
|
db 3 |
db 'shd. model' |
db 11 |
dr_flag db 0 |
dd shd_f |
|
db 4 |
db 'speed ' |
db 2 |
speed_flag db 0 |
dd spd_f |
|
db 5 |
db 'zoom out ' |
db 255 |
db ? |
dd ? |
|
db 6 |
db 'zoom in ' |
db 255 |
db ? |
dd ? |
|
db 7 |
db 'catmull ' |
db 2 |
catmull_flag db 1 |
dd onoff_f |
|
db 8 |
db 'culling ' |
db 2 |
culling_flag db 1 |
dd onoff_f |
|
db 9 |
db 'rand.light' |
db 255 |
db ? |
dd ? |
|
db 10 |
db 'blur ' |
db 6 |
blur_flag db 0 |
dd blur_f |
|
db 11 |
db 'mirror x ' |
db 2 |
mirr_x_flag db 0 |
dd onoff_f |
|
db 12 |
db 'mirror y ' |
db 2 |
mirr_y_flag db 0 |
dd onoff_f |
|
db 13 |
db 'mirror z ' |
db 2 |
mirr_z_flag db 0 |
dd onoff_f |
|
db 14 |
db 'xchg ' |
db 4 |
xchg_flag db 0 |
dd xchg_f |
|
db 15 |
db 'emboss ' |
db 2 |
emboss_flag db 0 |
dd onoff_f |
|
db 16 |
db 'fire ' |
db 3 |
fire_flag db 0 |
dd blur_f |
|
db 17 |
db 'move ' |
db 2 |
move_flag db 0 |
dd move_f |
|
db 18 |
db 'generate ' |
db 6 |
generator_flag db 0 |
dd blur_f |
|
db 19 |
db 'bumps ' |
db 2 |
bumps_flag db 0 |
dd bumps_f |
|
db 20 |
db 'bumps deep' |
db 4 |
bumps_deep_flag db 3 |
dd bumps_d_f |
|
; db 21 |
; db 'light No. ' |
; db 3 |
;light_no_flag db 0 |
; dd bumps_d_f |
|
; db 22 |
; db 'light comp' |
; db 3 |
;light_comp_flag db 0 |
; dd light_component_f |
|
;; db 23 |
;; db 'col. comp' |
;; db 3 |
;;color_comp_flag db 0 |
;; dd color_component_f |
|
|
db -1 ; end mark |
|
|
flags: ; flags description |
shd_f: |
db 'flat' |
db 'grd ' |
db 'env ' |
db 'bump' |
db 'tex ' |
db 'pos ' |
db 'dots' |
db 'txgr' |
db '2tex' |
db 'btex' |
db 'cenv' |
spd_f: |
db 'idle' |
db 'full' |
axl_f: |
db ' y ' |
db 'x+y ' |
db ' x ' |
onoff_f: |
db 'off ' |
db 'on ' |
; light_component_f: |
; db 'norm ' ; diffuse | |
; db 'min' ; specular | or sth. like this |
; db 'max ' ; emmisive | |
|
;; color_component_f: |
;; db ' r ' |
;; db ' g ' |
;; db ' b ' |
|
blur_f: ; blur, fire |
db 'off ' |
bumps_d_f: db ' 1 ' |
db ' 2 ' |
db ' 3 ' |
db ' 4 ' |
db ' 5 ' |
|
xchg_f: |
db 'no ' |
db 'x<>y' |
db 'z<>x' |
db 'y<>z' |
move_f: |
db 'obj ' |
db 'camr' |
; db 'lght' |
bumps_f: |
db 'rand' |
db 'tex ' |
; db 'cscl' |
base_vector: |
labelvector: |
db 'add vector' |
labelvectorend: |
labelyminus: |
db 'y -' |
labelyminusend: |
labelzplus: |
db 'z +' |
labelzplusend: |
labelxminus: |
db 'x -' |
labelxminusend: |
labelxplus: |
db 'x +' |
labelxplusend: |
labelzminus: |
db 'z -' |
labelzminusend: |
labelyplus: |
db 'y +' |
labelyplusend: |
|
;navigation_size = $ - labelvector |
; db 'set color ' |
; db 'r -' |
; db 'g +' |
; db 'b -' |
; db 'b +' |
; db 'g -' |
; db 'r +' |
|
labelt: |
db 'DEUS CARITAS EST' |
if Ext=MMX |
db ' (MMX)' |
end if |
if Ext=SSE |
db ' (SSE)' |
end if |
db ' 0.053' |
labellen: |
STRdata db '-1 ' |
|
all_lights_size dw lightsend-lights |
|
if USE_LFN |
|
file_info: |
dd 0 |
dd 0 |
dd 0 |
fsize dd 0 ;180000 ; sizeof(workarea) |
fptr dd 0 ;workarea |
file_name: |
db '/rd/1/3d/teapot.3ds',0 |
|
else |
|
file_info: |
dd 0 |
dd 0 |
fsize dd 1 |
dd workarea |
dd hash_table |
file_name: |
db '/rd/1/teapot.3ds',0 |
end if |
|
I_END: |
|
rb 256 |
|
;============================================= |
lights: |
.light_vector dd 0.0,0.0,-1.0 ; x,y,z Z cooficient of vector must be negative |
.orginal_color_r db 1 ; +12 |
.orginal_color_g db 255 ; |
.orginal_color_b db 1 ; +14 |
.min_color_r db 1 ; |
.min_color_g db 1 ; +16 |
.min_color_b db 1 ; |
.max_color_r db 255 ; |
.max_color_g db 255 ; |
.max_color_b db 255 ; |
.shine db 24 ; +21 |
; LIGHT_SIZE equ ($-lights) |
|
dd -0.5,-0.5,-1.0 ; x,y,z ; .light_vector |
db 5 ; .orginal_color_r |
db 1 ; .orginal_color_g |
db 135 ; .orginal_color_b |
db 19 ; .min_color_r |
db 19 ; .min_color_g |
db 19 ; .min_color_b |
db 255 ; .max_color_r |
db 255 ; .max_color_g |
db 255 ; .max_color_b |
db 16 ; .shine |
|
dd 0.5,0.5,-1.0 ; x,y,z ; .light_vector |
db 135 ; .orginal_color_r |
db 1 ; .orginal_color_g |
db 1 ; .orginal_color_b |
db 19 ; .min_color_r |
db 19 ; .min_color_g |
db 19 ; .min_color_b |
db 255 ; .max_color_r |
db 255 ; .max_color_g |
db 20 ; .max_color_b |
db 16 ; .shine |
; ALL_LIGHTS_SIZE equ ($ - lights) |
;#all_lights_size dw ($ - lights) ;ALL_LIGHTS_SIZE |
;=============================================== |
|
lightsend: |
|
if USE_LFN = 0 |
hash_table rb 4096 |
SourceFile: |
workarea rb 180000 |
else |
SourceFile: |
workarea rb 180 |
end if |
EndFile dd ? |
align 8 |
sinbeta dd ?;+32 |
cosbeta dd ? |
|
xsub dw ? |
zsub dw ?;+40 |
ysub dw ? |
|
xx1 dw ? |
yy1 dw ? |
zz1 dw ?;+48 xx1 + 4 |
xx2 dw ? |
yy2 dw ? |
zz2 dw ? ; xx1 + 10 |
xx3 dw ?;+56 |
yy3 dw ? |
zz3 dw ? ; xx1 + 16 |
scale dd ? ; help scale variable |
;== |
triangles_count_var dw ? |
points_count_var dw ? |
triangles_ptr dd ? |
triangles_w_z_ptr dd ? |
triangles_normals_ptr dd ? |
points_normals_ptr dd ? |
points_normals_rot_ptr dd ? |
points_ptr dd ? |
points_rotated_ptr dd ? |
points_translated_ptr dd ? |
screen_ptr dd ? |
Zbuffer_ptr dd ? |
|
;=== |
|
point_index1 dw ? ;-\ |
point_index2 dw ? ; } don't change order |
point_index3 dw ? ;-/ |
temp_col dw ? |
high dd ? |
rand_seed dw ? |
align 8 |
buffer dq ? |
err dd ? |
drr dd ? |
xx dd ? |
yy dd ? |
xst dd ? |
yst dd ? |
; screen_ptr dd ? |
; Zbuffer_ptr dd ? |
|
matrix rb 36 |
cos_tab rd 360 |
sin_tab rd 360 |
|
align 16 |
|
if USE_LFN = 0 |
points: |
rw (EndFile-SourceFile)/12*3 |
points_count = ($-points)/6 |
triangles: |
rw (EndFile-SourceFile)/12*3 |
triangles_count = ($-triangles)/6 |
align 16 |
real_points rd points_count*3 + 1 |
align 16 |
rotated_points_r rd points_count*3 + 1 |
align 16 |
points_rotated rw points_count*3 + 2 ;means translated |
align 16 |
triangles_normals rb triangles_count * 12 ; |
align 16 |
point_normals rb points_count * 12 ;one 3dvector - triple float dword x,y,z |
align 16 |
point_normals_rotated rb points_count * 12 |
align 16 |
triangles_normals_rotated rb triangles_count * 12 |
|
else |
points_count = 180000/6*3 |
triangles_count = 180000 / 6 ;($-triangles)/6 |
end if |
align 16 |
label trizdd dword |
label trizdq qword |
triangles_with_z rw triangles_count*4 + 2 ; triangles triple dw + z position |
align 16 |
vectors rb 24 |
;align 16 |
; points_color rb 6*points_count ; each color as word |
; sorted_triangles rw triangles_count*3 + 2 |
align 16 |
bumpmap rb TEXTURE_SIZE + 1 |
align 16 |
bumpmap2 rb TEXTURE_SIZE + 1 |
align 16 |
envmap rb (TEXTURE_SIZE +1) * 3 |
align 16 |
envmap_cub rb TEX_X * 3 |
align 16 |
texmap rb (TEXTURE_SIZE +1) * 3 |
align 16 |
color_map rb (TEXTURE_SIZE +1) * 3 |
align 16 |
tex_points rb points_count * 4 ; bump_map and texture coords |
; each point word x, word y |
align 16 |
; SourceFile: ; source file temporally in screen area |
; workarea dd ? |
|
; screen rb SIZE_X * SIZE_Y * 3 ; screen buffer |
;align 16 |
; Z_buffer rb SIZE_X * SIZE_Y * 4 |
I_Param rb 256 |
memStack rb 4000 ;memory area for stack |
align 16 |
screen: |