Rev 6513 | Rev 7610 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6513 | Rev 6889 | ||
---|---|---|---|
1 | ; |
1 | ; |
2 | ; áâàãªâãàë ¨ äãªæ¨¨ ¤«ï à¨á®¢ ¨ï 3d ®¡ê¥ªâ®¢ |
2 | ; áâàãªâãàë ¨ äãªæ¨¨ ¤«ï à¨á®¢ ¨ï 3d ®¡ê¥ªâ®¢ |
3 | ; |
3 | ; |
4 | 4 | ||
5 | offs_zbuf_pbuf equ 24 ;const. from 'zbuffer.inc' |
5 | offs_zbuf_pbuf equ 24 ;const. from 'zbuffer.inc' |
6 | 6 | ||
7 | struct obj_3d |
7 | struct obj_3d |
8 | poi_data dd ? ;㪠§ â¥«ì ª®®à¤¨ âë ¢¥àè¨ |
8 | poi_data dd ? ;㪠§ â¥«ì ª®®à¤¨ âë ¢¥àè¨ |
9 | poi_count dd ? ;ª®««¨ç¥á⢮ ¢¥àè¨ |
9 | poi_count dd ? ;ª®««¨ç¥á⢮ ¢¥àè¨ |
10 | tri_data dd ? ;㪠§ â¥«ì ¤ ë¥ âà¥ã£®«ì¨ª®¢ |
10 | tri_data dd ? ;㪠§ â¥«ì ¤ ë¥ âà¥ã£®«ì¨ª®¢ |
11 | tri_count dd ? ;ª®««¨ç¥á⢮ âà¥ã£®«ì¨ª®¢ |
11 | tri_count dd ? ;ª®««¨ç¥á⢮ âà¥ã£®«ì¨ª®¢ |
12 | normals_poi_data dd ? ;¤ ë¥ ®à¬ «¥© ª â®çª ¬ |
12 | normals_poi_data dd ? ;¤ ë¥ ®à¬ «¥© ª â®çª ¬ |
13 | normals_poi_count dd ? ;ª®««¨ç¥á⢮ ®à¬ «¥© ª â®çª ¬ |
13 | normals_poi_count dd ? ;ª®««¨ç¥á⢮ ®à¬ «¥© ª â®çª ¬ |
14 | normals_tri_data dd ? ;¤ ë¥ ®à¬ «¥© ª £à ï¬ |
14 | normals_tri_data dd ? ;¤ ë¥ ®à¬ «¥© ª £à ï¬ |
15 | normals_tri_count dd ? ;ª®««¨ç¥á⢮ ®à¬ «¥© ª £à ï¬ |
15 | normals_tri_count dd ? ;ª®««¨ç¥á⢮ ®à¬ «¥© ª £à ï¬ |
16 | x_max dd ? |
16 | x_max dd ? |
17 | x_min dd ? |
17 | x_min dd ? |
18 | x_centr dd ? |
18 | x_centr dd ? |
19 | x_scale dd ? |
19 | x_scale dd ? |
20 | y_max dd ? |
20 | y_max dd ? |
21 | y_min dd ? |
21 | y_min dd ? |
22 | y_centr dd ? |
22 | y_centr dd ? |
23 | y_scale dd ? |
23 | y_scale dd ? |
24 | z_max dd ? |
24 | z_max dd ? |
25 | z_min dd ? |
25 | z_min dd ? |
26 | z_centr dd ? |
26 | z_centr dd ? |
27 | z_scale dd ? |
27 | z_scale dd ? |
28 | mat1_data dd ? ;¤ ë¥ 1-£® ¬ â¥à¨ « ¢ ®¡ê¥ªâ¥ |
28 | mat1_data dd ? ;¤ ë¥ 1-£® ¬ â¥à¨ « ¢ ®¡ê¥ªâ¥ |
29 | ends |
29 | ends |
30 | - | ||
31 | offs_obj_poi_data equ 0 ;㪠§ â¥«ì ª®®à¤¨ âë ¢¥àè¨ |
- | |
32 | offs_obj_poi_count equ 4 ;ª®««¨ç¥á⢮ ¢¥àè¨ |
- | |
33 | offs_obj_tri_data equ 8 ;㪠§ â¥«ì ¤ ë¥ âà¥ã£®«ì¨ª®¢ |
- | |
34 | offs_obj_tri_count equ 12 ;ª®««¨ç¥á⢮ âà¥ã£®«ì¨ª®¢ |
- | |
35 | offs_obj_normals_poi_data equ 16 |
- | |
36 | offs_obj_normals_poi_count equ 20 |
- | |
37 | offs_obj_normals_tri_data equ 24 |
- | |
38 | offs_obj_normals_tri_count equ 28 |
- | |
39 | offs_obj_x_max equ 32 |
- | |
40 | offs_obj_x_min equ 36 |
- | |
41 | offs_obj_x_centr equ 40 |
- | |
42 | offs_obj_x_scale equ 44 |
- | |
43 | offs_obj_y_max equ 48 |
- | |
44 | offs_obj_y_min equ 52 |
- | |
45 | offs_obj_y_centr equ 56 |
- | |
46 | offs_obj_y_scale equ 60 |
- | |
47 | offs_obj_z_max equ 64 |
- | |
48 | offs_obj_z_min equ 68 |
- | |
49 | offs_obj_z_centr equ 72 |
- | |
50 | offs_obj_z_scale equ 76 |
- | |
51 | offs_obj_mat1_data equ 80 |
- | |
52 | 30 | ||
53 | struct material |
31 | struct material |
54 | name dd ? |
32 | name dd ? |
55 | col_ambient dd ? ;梥⠬ â¥à¨ « |
33 | col_ambient dd ? ;梥⠬ â¥à¨ « |
56 | col_diffuse dd ? |
34 | col_diffuse dd ? |
57 | col_specular dd ? |
35 | col_specular dd ? |
58 | ends |
36 | ends |
59 | - | ||
60 | offs_mat_name equ 0 |
- | |
61 | offs_mat_col_ambient equ 4 |
- | |
62 | offs_mat_col_diffuse equ 8 |
- | |
63 | offs_mat_col_specular equ 12 |
- | |
64 | 37 | ||
65 | bit_vertexes equ 0 |
38 | bit_vertexes equ 0 |
66 | bit_faces equ 1 ;£à ¨ à¨áãîâáï ª®âãà ¬¨ |
39 | bit_faces equ 1 ;£à ¨ à¨áãîâáï ª®âãà ¬¨ |
67 | bit_faces_fill equ 2 ;£à ¨ á § «¨¢ª®© |
40 | bit_faces_fill equ 2 ;£à ¨ á § «¨¢ª®© |
68 | bit_light equ 3 |
41 | bit_light equ 3 |
69 | bit_faces_mat equ 4 ;£à ¨ á 梥⮬ ¬ â¥à¨ « |
42 | bit_faces_mat equ 4 ;£à ¨ á 梥⮬ ¬ â¥à¨ « |
70 | bit_smooth equ 5 ;£à ¨ ᮠᣫ ¦¨¢ ¨¥¬ |
43 | bit_smooth equ 5 ;£à ¨ ᮠᣫ ¦¨¢ ¨¥¬ |
71 | 44 | ||
72 | ini_name db 'info3ds.ini',0 |
45 | ini_name db 'info3ds.ini',0 |
73 | ini_sec_w3d db 'Window 3d',0 |
46 | ini_sec_w3d db 'Window 3d',0 |
74 | key_dv db 'draw_vertices',0 |
47 | key_dv db 'draw_vertices',0 |
75 | key_df db 'draw_faces',0 |
48 | key_df db 'draw_faces',0 |
76 | key_dff db 'draw_faces_fill',0 |
49 | key_dff db 'draw_faces_fill',0 |
77 | key_dfm db 'draw_faces_material',0 |
50 | key_dfm db 'draw_faces_material',0 |
78 | key_dl db 'draw_light',0 |
51 | key_dl db 'draw_light',0 |
79 | key_ds db 'draw_smooth',0 |
52 | key_ds db 'draw_smooth',0 |
80 | key_ox db 'col_ox',0 |
53 | key_ox db 'col_ox',0 |
81 | key_oy db 'col_oy',0 |
54 | key_oy db 'col_oy',0 |
82 | key_oz db 'col_oz',0 |
55 | key_oz db 'col_oz',0 |
83 | key_bk db 'col_bkgnd',0 |
56 | key_bk db 'col_bkgnd',0 |
84 | key_vert db 'col_vertices',0 |
57 | key_vert db 'col_vertices',0 |
85 | key_face db 'col_faces',0 |
58 | key_face db 'col_faces',0 |
86 | key_select db 'col_select',0 |
59 | key_select db 'col_select',0 |
- | 60 | ||
- | 61 | txt_err_save_img_file: |
|
- | 62 | if lang eq ru |
|
- | 63 | db '¥ ¬®£ã á®åà ¨âì ä ©«.',0 |
|
- | 64 | else |
|
- | 65 | db 'Can',39,'t save file.',0 |
|
- | 66 | end if |
|
87 | 67 | ||
- | 68 | align 4 |
|
- | 69 | rad_c dd 150 ;¤«ï ¢ëç¨á«¥¨ï à ¤¨ãá |
|
88 | 70 | png_data dd ? |
|
89 | rad_c dd 150 ;¤«ï ¢ëç¨á«¥¨ï à ¤¨ãá |
71 | png_size dd ? |
90 | 72 | ||
91 | align 4 |
73 | align 4 |
92 | proc hex_in_str, buf:dword,val:dword,zif:dword |
74 | proc hex_in_str, buf:dword,val:dword,zif:dword |
93 | pushad |
75 | pushad |
94 | mov edi,dword[buf] |
76 | mov edi,dword[buf] |
95 | mov ecx,dword[zif] |
77 | mov ecx,dword[zif] |
96 | add edi,ecx |
78 | add edi,ecx |
97 | dec edi |
79 | dec edi |
98 | mov ebx,dword[val] |
80 | mov ebx,dword[val] |
99 | 81 | ||
100 | .cycle: |
82 | .cycle: |
101 | mov al,bl |
83 | mov al,bl |
102 | and al,0xf |
84 | and al,0xf |
103 | cmp al,10 |
85 | cmp al,10 |
104 | jl @f |
86 | jl @f |
105 | add al,'a'-'0'-10 |
87 | add al,'a'-'0'-10 |
106 | @@: |
88 | @@: |
107 | add al,'0' |
89 | add al,'0' |
108 | mov byte[edi],al |
90 | mov byte[edi],al |
109 | dec edi |
91 | dec edi |
110 | shr ebx,4 |
92 | shr ebx,4 |
111 | loop .cycle |
93 | loop .cycle |
112 | popad |
94 | popad |
113 | ret |
95 | ret |
114 | endp |
96 | endp |
115 | 97 | ||
116 | ;ãáâ ®¢ª ¢á¥å ®á®¢ëå ¯¥à¥¬¥ëå ¯® 㬮«ç ¨î |
98 | ;ãáâ ®¢ª ¢á¥å ®á®¢ëå ¯¥à¥¬¥ëå ¯® 㬮«ç ¨î |
117 | align 4 |
99 | align 4 |
118 | proc obj_clear_param uses edi, o_data:dword |
100 | proc obj_clear_param uses edi, o_data:dword |
119 | mov edi,[o_data] |
101 | mov edi,[o_data] |
120 | ;®¡ã«¥¨¥ 㪠§ ⥫¥© ¤ ë¥ ®¡ê¥ªâ®¢ |
102 | ;®¡ã«¥¨¥ 㪠§ ⥫¥© ¤ ë¥ ®¡ê¥ªâ®¢ |
121 | mov dword[edi+offs_obj_poi_data],0 |
103 | mov dword[edi+obj_3d.poi_data],0 |
122 | mov dword[edi+offs_obj_poi_count],0 |
104 | mov dword[edi+obj_3d.poi_count],0 |
123 | mov dword[edi+offs_obj_tri_data],0 |
105 | mov dword[edi+obj_3d.tri_data],0 |
124 | mov dword[edi+offs_obj_tri_count],0 |
106 | mov dword[edi+obj_3d.tri_count],0 |
125 | mov dword[edi+offs_obj_normals_tri_count],0 |
107 | mov dword[edi+obj_3d.normals_tri_count],0 |
126 | mov dword[edi+offs_obj_normals_poi_count],0 |
108 | mov dword[edi+obj_3d.normals_poi_count],0 |
127 | mov dword[edi+offs_obj_mat1_data],0 |
109 | mov dword[edi+obj_3d.mat1_data],0 |
128 | cmp dword[edi+offs_obj_normals_tri_data],0 |
110 | cmp dword[edi+obj_3d.normals_tri_data],0 |
129 | je @f |
111 | je @f |
130 | stdcall mem.Free,[edi+offs_obj_normals_tri_data] |
112 | stdcall mem.Free,[edi+obj_3d.normals_tri_data] |
131 | mov dword[edi+offs_obj_normals_tri_data],0 |
113 | mov dword[edi+obj_3d.normals_tri_data],0 |
132 | @@: |
114 | @@: |
133 | cmp dword[edi+offs_obj_normals_poi_data],0 |
115 | cmp dword[edi+obj_3d.normals_poi_data],0 |
134 | je @f |
116 | je @f |
135 | stdcall mem.Free,[edi+offs_obj_normals_poi_data] |
117 | stdcall mem.Free,[edi+obj_3d.normals_poi_data] |
136 | mov dword[edi+offs_obj_normals_poi_data],0 |
118 | mov dword[edi+obj_3d.normals_poi_data],0 |
137 | @@: |
119 | @@: |
138 | ret |
120 | ret |
139 | endp |
121 | endp |
140 | 122 | ||
141 | ;¯®¨áª ¤ ëå |
123 | ;¯®¨áª ¤ ëå |
142 | ;input: |
124 | ;input: |
143 | ;eax - ⥪ã騩 㧥« |
125 | ;eax - ⥪ã騩 㧥« |
144 | ;output: |
126 | ;output: |
145 | ;eax - áâàãªâãà ⥪ã饣® 㧫 (¨«¨ 0 ¯à¨ ¥ã¤ ç¥) |
127 | ;eax - áâàãªâãà ⥪ã饣® 㧫 (¨«¨ 0 ¯à¨ ¥ã¤ ç¥) |
146 | align 4 |
128 | align 4 |
147 | proc found_block_data uses ebx ecx edx, tlist:dword |
129 | proc found_block_data uses ebx ecx edx, tlist:dword |
148 | mov edx,[tlist] |
130 | mov edx,[tlist] |
149 | mov ecx,eax |
131 | mov ecx,eax |
150 | stdcall [tl_node_poi_get_info], edx,0 |
132 | stdcall [tl_node_poi_get_info], edx,0 |
151 | @@: |
133 | @@: |
152 | mov ebx,eax |
134 | mov ebx,eax |
153 | stdcall [tl_node_poi_get_data], edx,ebx |
135 | stdcall [tl_node_poi_get_data], edx,ebx |
154 | cmp eax,ecx |
136 | cmp eax,ecx |
155 | je @f ;¥á«¨ ¯®¯ «¨ ¢ë¡à ë© ã§¥« |
137 | je @f ;¥á«¨ ¯®¯ «¨ ¢ë¡à ë© ã§¥« |
156 | stdcall [tl_node_poi_get_next_info], edx,ebx |
138 | stdcall [tl_node_poi_get_next_info], edx,ebx |
157 | cmp eax,0 |
139 | cmp eax,0 |
158 | jne @b |
140 | jne @b |
159 | jmp .end |
141 | jmp .end |
160 | @@: |
142 | @@: |
161 | mov eax,ebx |
143 | mov eax,ebx |
162 | .end: |
144 | .end: |
163 | ret |
145 | ret |
164 | endp |
146 | endp |
165 | 147 | ||
166 | ;ãáâ ®¢ª à §¬¥à®¢ ®¡ê¥ªâ |
148 | ;ãáâ ®¢ª à §¬¥à®¢ ®¡ê¥ªâ |
167 | align 4 |
149 | align 4 |
168 | proc obj_set_sizes uses eax ebx esi edi, o_data:dword |
150 | proc obj_set_sizes uses eax ebx esi edi, o_data:dword |
169 | mov edi,[o_data] |
151 | mov edi,[o_data] |
170 | cmp dword[edi+offs_obj_poi_count],0 |
152 | cmp dword[edi+obj_3d.poi_count],0 |
171 | je .end |
153 | je .end |
172 | finit |
154 | finit |
173 | mov eax,[edi+offs_obj_poi_data] |
155 | mov eax,[edi+obj_3d.poi_data] |
174 | mov ebx,dword[eax] |
156 | mov ebx,dword[eax] |
175 | mov [edi+offs_obj_x_min],ebx |
157 | mov [edi+obj_3d.x_min],ebx |
176 | mov [edi+offs_obj_x_max],ebx |
158 | mov [edi+obj_3d.x_max],ebx |
177 | mov ebx,dword[eax+4] |
159 | mov ebx,dword[eax+4] |
178 | mov [edi+offs_obj_y_min],ebx |
160 | mov [edi+obj_3d.y_min],ebx |
179 | mov [edi+offs_obj_y_max],ebx |
161 | mov [edi+obj_3d.y_max],ebx |
180 | mov ebx,dword[eax+8] |
162 | mov ebx,dword[eax+8] |
181 | mov [edi+offs_obj_z_min],ebx |
163 | mov [edi+obj_3d.z_min],ebx |
182 | mov [edi+offs_obj_z_max],ebx |
164 | mov [edi+obj_3d.z_max],ebx |
183 | 165 | ||
184 | mov ebx,[edi+offs_obj_poi_data] |
166 | mov ebx,[edi+obj_3d.poi_data] |
185 | mov esi,[edi+offs_obj_poi_count] |
167 | mov esi,[edi+obj_3d.poi_count] |
186 | align 4 |
168 | align 4 |
187 | .cycle_0: ;à ¡®â á ª®®à¤¨ ⮩ x |
169 | .cycle_0: ;à ¡®â á ª®®à¤¨ ⮩ x |
188 | fld dword[ebx] |
170 | fld dword[ebx] |
189 | fld dword[edi+offs_obj_x_min] |
171 | fld dword[edi+obj_3d.x_min] |
190 | fcomp |
172 | fcomp |
191 | fstsw ax |
173 | fstsw ax |
192 | sahf |
174 | sahf |
193 | jb @f |
175 | jb @f |
194 | mov eax,[ebx] |
176 | mov eax,[ebx] |
195 | mov [edi+offs_obj_x_min],eax |
177 | mov [edi+obj_3d.x_min],eax |
196 | ffree st0 |
178 | ffree st0 |
197 | fincstp |
179 | fincstp |
198 | jmp .next_x |
180 | jmp .next_x |
199 | @@: |
181 | @@: |
200 | fld dword[edi+offs_obj_x_max] |
182 | fld dword[edi+obj_3d.x_max] |
201 | fcompp |
183 | fcompp |
202 | fstsw ax |
184 | fstsw ax |
203 | sahf |
185 | sahf |
204 | ja .next_x |
186 | ja .next_x |
205 | mov eax,[ebx] |
187 | mov eax,[ebx] |
206 | mov [edi+offs_obj_x_max],eax |
188 | mov [edi+obj_3d.x_max],eax |
207 | .next_x: |
189 | .next_x: |
208 | 190 | ||
209 | add ebx,12 |
191 | add ebx,12 |
210 | dec esi |
192 | dec esi |
211 | jnz .cycle_0 |
193 | jnz .cycle_0 |
212 | 194 | ||
213 | fld1 |
195 | fld1 |
214 | fld dword[edi+offs_obj_x_max] |
196 | fld dword[edi+obj_3d.x_max] |
215 | fsub dword[edi+offs_obj_x_min] |
197 | fsub dword[edi+obj_3d.x_min] |
216 | fst dword[edi+offs_obj_x_centr] |
198 | fst dword[edi+obj_3d.x_centr] |
217 | fdivp ;1/size.x |
199 | fdivp ;1/size.x |
218 | fstp dword[edi+offs_obj_x_scale] |
200 | fstp dword[edi+obj_3d.x_scale] |
219 | 201 | ||
220 | fld dword[edi+offs_obj_x_centr] |
202 | fld dword[edi+obj_3d.x_centr] |
221 | fld1 |
203 | fld1 |
222 | fld1 |
204 | fld1 |
223 | faddp |
205 | faddp |
224 | fdivp ;centr.x = size.x/2 |
206 | fdivp ;centr.x = size.x/2 |
225 | fadd dword[edi+offs_obj_x_min] |
207 | fadd dword[edi+obj_3d.x_min] |
226 | fchs |
208 | fchs |
227 | fstp dword[edi+offs_obj_x_centr] |
209 | fstp dword[edi+obj_3d.x_centr] |
228 | 210 | ||
229 | mov ebx,[edi+offs_obj_poi_data] |
211 | mov ebx,[edi+obj_3d.poi_data] |
230 | mov esi,[edi+offs_obj_poi_count] |
212 | mov esi,[edi+obj_3d.poi_count] |
231 | align 4 |
213 | align 4 |
232 | .cycle_1: ;à ¡®â á ª®®à¤¨ ⮩ y |
214 | .cycle_1: ;à ¡®â á ª®®à¤¨ ⮩ y |
233 | fld dword[ebx+4] |
215 | fld dword[ebx+4] |
234 | fld dword[edi+offs_obj_y_min] |
216 | fld dword[edi+obj_3d.y_min] |
235 | fcomp |
217 | fcomp |
236 | fstsw ax |
218 | fstsw ax |
237 | sahf |
219 | sahf |
238 | jb @f |
220 | jb @f |
239 | mov eax,[ebx+4] |
221 | mov eax,[ebx+4] |
240 | mov [edi+offs_obj_y_min],eax |
222 | mov [edi+obj_3d.y_min],eax |
241 | ffree st0 |
223 | ffree st0 |
242 | fincstp |
224 | fincstp |
243 | jmp .next_y |
225 | jmp .next_y |
244 | @@: |
226 | @@: |
245 | fld dword[edi+offs_obj_y_max] |
227 | fld dword[edi+obj_3d.y_max] |
246 | fcompp |
228 | fcompp |
247 | fstsw ax |
229 | fstsw ax |
248 | sahf |
230 | sahf |
249 | ja .next_y |
231 | ja .next_y |
250 | mov eax,[ebx+4] |
232 | mov eax,[ebx+4] |
251 | mov [edi+offs_obj_y_max],eax |
233 | mov [edi+obj_3d.y_max],eax |
252 | .next_y: |
234 | .next_y: |
253 | 235 | ||
254 | add ebx,12 |
236 | add ebx,12 |
255 | dec esi |
237 | dec esi |
256 | jnz .cycle_1 |
238 | jnz .cycle_1 |
257 | 239 | ||
258 | fld1 |
240 | fld1 |
259 | fld dword[edi+offs_obj_y_max] |
241 | fld dword[edi+obj_3d.y_max] |
260 | fsub dword[edi+offs_obj_y_min] |
242 | fsub dword[edi+obj_3d.y_min] |
261 | fst dword[edi+offs_obj_y_centr] |
243 | fst dword[edi+obj_3d.y_centr] |
262 | fdivp ;1/size.y |
244 | fdivp ;1/size.y |
263 | fstp dword[edi+offs_obj_y_scale] |
245 | fstp dword[edi+obj_3d.y_scale] |
264 | 246 | ||
265 | fld dword[edi+offs_obj_y_centr] |
247 | fld dword[edi+obj_3d.y_centr] |
266 | fld1 |
248 | fld1 |
267 | fld1 |
249 | fld1 |
268 | faddp |
250 | faddp |
269 | fdivp ;centr.y = size.y/2 |
251 | fdivp ;centr.y = size.y/2 |
270 | fadd dword[edi+offs_obj_y_min] |
252 | fadd dword[edi+obj_3d.y_min] |
271 | fchs |
253 | fchs |
272 | fstp dword[edi+offs_obj_y_centr] |
254 | fstp dword[edi+obj_3d.y_centr] |
273 | 255 | ||
274 | mov ebx,[edi+offs_obj_poi_data] |
256 | mov ebx,[edi+obj_3d.poi_data] |
275 | mov esi,[edi+offs_obj_poi_count] |
257 | mov esi,[edi+obj_3d.poi_count] |
276 | align 4 |
258 | align 4 |
277 | .cycle_2: ;à ¡®â á ª®®à¤¨ ⮩ z |
259 | .cycle_2: ;à ¡®â á ª®®à¤¨ ⮩ z |
278 | fld dword[ebx+8] |
260 | fld dword[ebx+8] |
279 | fld dword[edi+offs_obj_z_min] |
261 | fld dword[edi+obj_3d.z_min] |
280 | fcomp |
262 | fcomp |
281 | fstsw ax |
263 | fstsw ax |
282 | sahf |
264 | sahf |
283 | jb @f |
265 | jb @f |
284 | mov eax,[ebx+8] |
266 | mov eax,[ebx+8] |
285 | mov [edi+offs_obj_z_min],eax |
267 | mov [edi+obj_3d.z_min],eax |
286 | ffree st0 |
268 | ffree st0 |
287 | fincstp |
269 | fincstp |
288 | jmp .next_z |
270 | jmp .next_z |
289 | @@: |
271 | @@: |
290 | fld dword[edi+offs_obj_z_max] |
272 | fld dword[edi+obj_3d.z_max] |
291 | fcompp |
273 | fcompp |
292 | fstsw ax |
274 | fstsw ax |
293 | sahf |
275 | sahf |
294 | ja .next_z |
276 | ja .next_z |
295 | mov eax,[ebx+8] |
277 | mov eax,[ebx+8] |
296 | mov [edi+offs_obj_z_max],eax |
278 | mov [edi+obj_3d.z_max],eax |
297 | .next_z: |
279 | .next_z: |
298 | 280 | ||
299 | add ebx,12 |
281 | add ebx,12 |
300 | dec esi |
282 | dec esi |
301 | jnz .cycle_2 |
283 | jnz .cycle_2 |
302 | 284 | ||
303 | fld1 |
285 | fld1 |
304 | fld dword[edi+offs_obj_z_max] |
286 | fld dword[edi+obj_3d.z_max] |
305 | fsub dword[edi+offs_obj_z_min] |
287 | fsub dword[edi+obj_3d.z_min] |
306 | fst dword[edi+offs_obj_z_centr] |
288 | fst dword[edi+obj_3d.z_centr] |
307 | fdivp ;1/size.z |
289 | fdivp ;1/size.z |
308 | fstp dword[edi+offs_obj_z_scale] |
290 | fstp dword[edi+obj_3d.z_scale] |
309 | 291 | ||
310 | fld dword[edi+offs_obj_z_centr] |
292 | fld dword[edi+obj_3d.z_centr] |
311 | fld1 |
293 | fld1 |
312 | fld1 |
294 | fld1 |
313 | faddp |
295 | faddp |
314 | fdivp ;centr.z = size.z/2 |
296 | fdivp ;centr.z = size.z/2 |
315 | fadd dword[edi+offs_obj_z_min] |
297 | fadd dword[edi+obj_3d.z_min] |
316 | fchs |
298 | fchs |
317 | fstp dword[edi+offs_obj_z_centr] |
299 | fstp dword[edi+obj_3d.z_centr] |
318 | 300 | ||
319 | ; 室¨¬ à ¤¨ãá ¤«ï áä¥àë |
301 | ; 室¨¬ à ¤¨ãá ¤«ï áä¥àë |
320 | fld dword[edi+offs_obj_x_max] |
302 | fld dword[edi+obj_3d.x_max] |
321 | fsub dword[edi+offs_obj_x_min] |
303 | fsub dword[edi+obj_3d.x_min] |
322 | fld dword[edi+offs_obj_y_max] |
304 | fld dword[edi+obj_3d.y_max] |
323 | fsub dword[edi+offs_obj_y_min] |
305 | fsub dword[edi+obj_3d.y_min] |
324 | faddp |
306 | faddp |
325 | fild dword[rad_c] |
307 | fild dword[rad_c] |
326 | fdivp ;radius=(size.x+size.y)/rad_c |
308 | fdivp ;radius=(size.x+size.y)/rad_c |
327 | fstp dword[sph_radius] |
309 | fstp dword[sph_radius] |
328 | 310 | ||
329 | ;¤¥« ¥¬ ®¤¨ ª®¢ë© ¬ áèâ ¡ ¯® ®áï¬ x ¨ y, çâ®-¡ë ¥ àãè «¨áì ¯à®¯®à樨 ¨§®¡à ¦¥¨ï |
311 | ;¤¥« ¥¬ ®¤¨ ª®¢ë© ¬ áèâ ¡ ¯® ®áï¬ x ¨ y, çâ®-¡ë ¥ àãè «¨áì ¯à®¯®à樨 ¨§®¡à ¦¥¨ï |
330 | fld dword[edi+offs_obj_y_scale] |
312 | fld dword[edi+obj_3d.y_scale] |
331 | fdiv dword[ratio] ;¯à¨¢¥¤¥¨¥ ¬ áèâ ¡ ¯® ®á¨ y ãç¨âë¢ ï çâ® ¯® ¢ëá®â¥ íªà ¬¥ìè¥ |
313 | fdiv dword[ratio] ;¯à¨¢¥¤¥¨¥ ¬ áèâ ¡ ¯® ®á¨ y ãç¨âë¢ ï çâ® ¯® ¢ëá®â¥ íªà ¬¥ìè¥ |
332 | fcomp dword[edi+offs_obj_x_scale] |
314 | fcomp dword[edi+obj_3d.x_scale] |
333 | fstsw ax |
315 | fstsw ax |
334 | sahf |
316 | sahf |
335 | jb @f |
317 | jb @f |
336 | ;ᦠ⨥ ¬ áèâ ¡ ¯® y |
318 | ;ᦠ⨥ ¬ áèâ ¡ ¯® y |
337 | fld dword[edi+offs_obj_x_scale] |
319 | fld dword[edi+obj_3d.x_scale] |
338 | fmul dword[ratio] |
320 | fmul dword[ratio] |
339 | fstp dword[edi+offs_obj_y_scale] ;¬ áèâ ¡ ¯® ®á¨ y = ¬ áèâ ¡ ¯® ®á¨ x |
321 | fstp dword[edi+obj_3d.y_scale] ;¬ áèâ ¡ ¯® ®á¨ y = ¬ áèâ ¡ ¯® ®á¨ x |
340 | jmp .end |
322 | jmp .end |
341 | @@: |
323 | @@: |
342 | ;ᦠ⨥ ¬ áèâ ¡ ¯® x >...< |
324 | ;ᦠ⨥ ¬ áèâ ¡ ¯® x >...< |
343 | fld dword[edi+offs_obj_x_scale] |
325 | fld dword[edi+obj_3d.x_scale] |
344 | fdiv dword[ratio] |
326 | fdiv dword[ratio] |
345 | fstp dword[edi+offs_obj_x_scale] |
327 | fstp dword[edi+obj_3d.x_scale] |
346 | .end: |
328 | .end: |
347 | ret |
329 | ret |
348 | endp |
330 | endp |
349 | 331 | ||
350 | ;description: |
332 | ;description: |
351 | ; ¢ëç¨á«¥¨¥ ®à¬ «¥© ¤«ï £à ¥© ¯® 3-¬ ¢¥àè¨ ¬ |
333 | ; ¢ëç¨á«¥¨¥ ®à¬ «¥© ¤«ï £à ¥© ¯® 3-¬ ¢¥àè¨ ¬ |
352 | ; â ª¦¥ ®à¬ «¥© ¤«ï ᣫ ¦¨¢ ¨ï ª ¢¥àè¨ ¬ |
334 | ; â ª¦¥ ®à¬ «¥© ¤«ï ᣫ ¦¨¢ ¨ï ª ¢¥àè¨ ¬ |
353 | align 4 |
335 | align 4 |
354 | proc obj_set_normals, o_data:dword |
336 | proc obj_set_normals, o_data:dword |
355 | locals |
337 | locals |
356 | tbl1 rd 9 ;ebp-72 |
338 | tbl1 rd 9 ;ebp-72 |
357 | tbl2 rd 9 ;ebp-36 |
339 | tbl2 rd 9 ;ebp-36 |
358 | endl |
340 | endl |
359 | pushad |
341 | pushad |
360 | mov ecx,[o_data] |
342 | mov ecx,[o_data] |
361 | cmp dword[ecx+offs_obj_poi_count],0 |
343 | cmp dword[ecx+obj_3d.poi_count],0 |
362 | je .end |
344 | je .end |
363 | mov eax,[ecx+offs_obj_tri_count] |
345 | mov eax,[ecx+obj_3d.tri_count] |
364 | mov [ecx+offs_obj_normals_tri_count],eax ; ª ¦¤ë© âà¥ã£®«ì¨ª 1 ®à¬ «ì |
346 | mov [ecx+obj_3d.normals_tri_count],eax ; ª ¦¤ë© âà¥ã£®«ì¨ª 1 ®à¬ «ì |
365 | cmp eax,0 |
347 | cmp eax,0 |
366 | je .end |
348 | je .end |
367 | finit |
349 | finit |
368 | imul eax,12 |
350 | imul eax,12 |
369 | stdcall mem.Alloc, eax |
351 | stdcall mem.Alloc, eax |
370 | mov [ecx+offs_obj_normals_tri_data],eax |
352 | mov [ecx+obj_3d.normals_tri_data],eax |
371 | 353 | ||
372 | mov edx,[ecx+offs_obj_tri_data] |
354 | mov edx,[ecx+obj_3d.tri_data] |
373 | mov ebx,[ecx+offs_obj_tri_count] |
355 | mov ebx,[ecx+obj_3d.tri_count] |
374 | mov ecx,[ecx+offs_obj_poi_data] |
356 | mov ecx,[ecx+obj_3d.poi_data] |
375 | align 4 |
357 | align 4 |
376 | @@: |
358 | @@: |
377 | mov edi,ebp |
359 | mov edi,ebp |
378 | sub edi,36 ;tbl2 |
360 | sub edi,36 ;tbl2 |
379 | movzx esi,word[edx] ;1-ï ¢¥àè¨ |
361 | movzx esi,word[edx] ;1-ï ¢¥àè¨ |
380 | imul esi,12 |
362 | imul esi,12 |
381 | add esi,ecx |
363 | add esi,ecx |
382 | movsd |
364 | movsd |
383 | movsd |
365 | movsd |
384 | movsd |
366 | movsd |
385 | movzx esi,word[edx+2] ;2-ï ¢¥àè¨ |
367 | movzx esi,word[edx+2] ;2-ï ¢¥àè¨ |
386 | imul esi,12 |
368 | imul esi,12 |
387 | add esi,ecx |
369 | add esi,ecx |
388 | movsd |
370 | movsd |
389 | movsd |
371 | movsd |
390 | movsd |
372 | movsd |
391 | movzx esi,word[edx+4] ;3-ï ¢¥àè¨ |
373 | movzx esi,word[edx+4] ;3-ï ¢¥àè¨ |
392 | imul esi,12 |
374 | imul esi,12 |
393 | add esi,ecx |
375 | add esi,ecx |
394 | movsd |
376 | movsd |
395 | movsd |
377 | movsd |
396 | movsd |
378 | movsd |
397 | 379 | ||
398 | mov esi,ebp |
380 | mov esi,ebp |
399 | sub esi,72 ;tbl1 |
381 | sub esi,72 ;tbl1 |
400 | sub edi,36 ;tbl2 |
382 | sub edi,36 ;tbl2 |
401 | ;v1 <-> v2 |
383 | ;v1 <-> v2 |
402 | fld dword[edi+12] |
384 | fld dword[edi+12] |
403 | fsub dword[edi] |
385 | fsub dword[edi] |
404 | fstp dword[esi] ;(x2-x1) |
386 | fstp dword[esi] ;(x2-x1) |
405 | fld dword[edi+16] |
387 | fld dword[edi+16] |
406 | fsub dword[edi+4] |
388 | fsub dword[edi+4] |
407 | fstp dword[esi+4] ;(y2-y1) |
389 | fstp dword[esi+4] ;(y2-y1) |
408 | fld dword[edi+20] |
390 | fld dword[edi+20] |
409 | fsub dword[edi+8] |
391 | fsub dword[edi+8] |
410 | fstp dword[esi+8] ;(z2-z1) |
392 | fstp dword[esi+8] ;(z2-z1) |
411 | ;v2 <-> v3 |
393 | ;v2 <-> v3 |
412 | fld dword[edi+12] |
394 | fld dword[edi+12] |
413 | fsub dword[edi+24] |
395 | fsub dword[edi+24] |
414 | fstp dword[esi+12] ;(x2-x3) |
396 | fstp dword[esi+12] ;(x2-x3) |
415 | fld dword[edi+16] |
397 | fld dword[edi+16] |
416 | fsub dword[edi+28] |
398 | fsub dword[edi+28] |
417 | fstp dword[esi+16] ;(y2-y3) |
399 | fstp dword[esi+16] ;(y2-y3) |
418 | fld dword[edi+20] |
400 | fld dword[edi+20] |
419 | fsub dword[edi+32] |
401 | fsub dword[edi+32] |
420 | fstp dword[esi+20] ;(z2-z3) |
402 | fstp dword[esi+20] ;(z2-z3) |
421 | ;v3 <-> v1 |
403 | ;v3 <-> v1 |
422 | fld dword[edi+24] |
404 | fld dword[edi+24] |
423 | fsub dword[edi] |
405 | fsub dword[edi] |
424 | fstp dword[esi+24] ;(x3-x1) |
406 | fstp dword[esi+24] ;(x3-x1) |
425 | fld dword[edi+28] |
407 | fld dword[edi+28] |
426 | fsub dword[edi+4] |
408 | fsub dword[edi+4] |
427 | fstp dword[esi+28] ;(y3-y1) |
409 | fstp dword[esi+28] ;(y3-y1) |
428 | fld dword[edi+32] |
410 | fld dword[edi+32] |
429 | fsub dword[edi+8] |
411 | fsub dword[edi+8] |
430 | fstp dword[esi+32] ;(z3-z1) |
412 | fstp dword[esi+32] ;(z3-z1) |
431 | 413 | ||
432 | ;A = (y2-y1) * (z3-z1) - (z2-z1) * (y3-y1) |
414 | ;A = (y2-y1) * (z3-z1) - (z2-z1) * (y3-y1) |
433 | fld dword[esi+4] |
415 | fld dword[esi+4] |
434 | fmul dword[esi+32] |
416 | fmul dword[esi+32] |
435 | fld dword[esi+8] |
417 | fld dword[esi+8] |
436 | fmul dword[esi+28] |
418 | fmul dword[esi+28] |
437 | fsubp |
419 | fsubp |
438 | fstp dword[eax] ;set normal.a |
420 | fstp dword[eax] ;set normal.a |
439 | 421 | ||
440 | ;B = (z2-z1) * (x3-x1) - (x2-x1) * (z3-z1) |
422 | ;B = (z2-z1) * (x3-x1) - (x2-x1) * (z3-z1) |
441 | fld dword[esi+8] |
423 | fld dword[esi+8] |
442 | fmul dword[esi+24] |
424 | fmul dword[esi+24] |
443 | fld dword[esi] |
425 | fld dword[esi] |
444 | fmul dword[esi+32] |
426 | fmul dword[esi+32] |
445 | fsubp |
427 | fsubp |
446 | fstp dword[eax+4] ;set normal.b |
428 | fstp dword[eax+4] ;set normal.b |
447 | 429 | ||
448 | ;C = (x2-x1) * (y3-y1) - (y2-y1) * (x3-x1) |
430 | ;C = (x2-x1) * (y3-y1) - (y2-y1) * (x3-x1) |
449 | fld dword[esi] |
431 | fld dword[esi] |
450 | fmul dword[esi+28] |
432 | fmul dword[esi+28] |
451 | fld dword[esi+4] |
433 | fld dword[esi+4] |
452 | fmul dword[esi+24] |
434 | fmul dword[esi+24] |
453 | fsubp |
435 | fsubp |
454 | fstp dword[eax+8] ;set normal.c |
436 | fstp dword[eax+8] ;set normal.c |
455 | 437 | ||
456 | stdcall V3_Norm,eax |
438 | stdcall V3_Norm,eax |
457 | 439 | ||
458 | add edx,8 ;à §¬¥à âà¥ã£®«ì¨ª = (3 ¢¥àè¨ë (¯® 2¡) + ᢮©á⢠(2¡)) |
440 | add edx,8 ;à §¬¥à âà¥ã£®«ì¨ª = (3 ¢¥àè¨ë (¯® 2¡) + ᢮©á⢠(2¡)) |
459 | add eax,12 |
441 | add eax,12 |
460 | dec ebx |
442 | dec ebx |
461 | jnz @b |
443 | jnz @b |
462 | 444 | ||
463 | ;®à¬ «¨ ª ¢¥àè¨ ¬ |
445 | ;®à¬ «¨ ª ¢¥àè¨ ¬ |
464 | mov ebx,[o_data] |
446 | mov ebx,[o_data] |
465 | mov ecx,[ebx+offs_obj_poi_count] |
447 | mov ecx,[ebx+obj_3d.poi_count] |
466 | mov [ebx+offs_obj_normals_poi_count],ecx |
448 | mov [ebx+obj_3d.normals_poi_count],ecx |
467 | cmp ecx,0 |
449 | cmp ecx,0 |
468 | je .end |
450 | je .end |
469 | imul ecx,12 |
451 | imul ecx,12 |
470 | stdcall mem.Alloc,ecx |
452 | stdcall mem.Alloc,ecx |
471 | mov [ebx+offs_obj_normals_poi_data],eax |
453 | mov [ebx+obj_3d.normals_poi_data],eax |
472 | 454 | ||
473 | mov edi,eax |
455 | mov edi,eax |
474 | mov eax,0.0 |
456 | mov eax,0.0 |
475 | shr ecx,2 |
457 | shr ecx,2 |
476 | rep stosd ;®ç¨á⪠0-¬¨ float |
458 | rep stosd ;®ç¨á⪠0-¬¨ float |
477 | 459 | ||
478 | mov edx,[ebx+offs_obj_tri_count] |
460 | mov edx,[ebx+obj_3d.tri_count] |
479 | mov edi,[ebx+offs_obj_tri_data] |
461 | mov edi,[ebx+obj_3d.tri_data] |
480 | mov eax,[ebx+offs_obj_normals_tri_data] |
462 | mov eax,[ebx+obj_3d.normals_tri_data] |
481 | mov ecx,[ebx+offs_obj_poi_data] |
463 | mov ecx,[ebx+obj_3d.poi_data] |
482 | mov ebx,[ebx+offs_obj_normals_poi_data] |
464 | mov ebx,[ebx+obj_3d.normals_poi_data] |
483 | align 4 |
465 | align 4 |
484 | .cycle_0: ;¯® £à ï¬ |
466 | .cycle_0: ;¯® £à ï¬ |
485 | movzx esi,word[edi] ;1-ï ¢¥àè¨ |
467 | movzx esi,word[edi] ;1-ï ¢¥àè¨ |
486 | imul esi,12 |
468 | imul esi,12 |
487 | add esi,ecx |
469 | add esi,ecx |
488 | push esi |
470 | push esi |
489 | movzx esi,word[edi+2] ;2-ï ¢¥àè¨ |
471 | movzx esi,word[edi+2] ;2-ï ¢¥àè¨ |
490 | imul esi,12 |
472 | imul esi,12 |
491 | add esi,ecx |
473 | add esi,ecx |
492 | push esi |
474 | push esi |
493 | movzx esi,word[edi+4] ;3-ï ¢¥àè¨ |
475 | movzx esi,word[edi+4] ;3-ï ¢¥àè¨ |
494 | imul esi,12 |
476 | imul esi,12 |
495 | add esi,ecx |
477 | add esi,ecx |
496 | push esi |
478 | push esi |
497 | 479 | ||
498 | movzx esi,word[edi] ;1-ï ¢¥àè¨ |
480 | movzx esi,word[edi] ;1-ï ¢¥àè¨ |
499 | imul esi,12 |
481 | imul esi,12 |
500 | add esi,ebx |
482 | add esi,ebx |
501 | push esi |
483 | push esi |
502 | movzx esi,word[edi+2] ;2-ï ¢¥àè¨ |
484 | movzx esi,word[edi+2] ;2-ï ¢¥àè¨ |
503 | imul esi,12 |
485 | imul esi,12 |
504 | add esi,ebx |
486 | add esi,ebx |
505 | push esi |
487 | push esi |
506 | movzx esi,word[edi+4] ;3-ï ¢¥àè¨ |
488 | movzx esi,word[edi+4] ;3-ï ¢¥àè¨ |
507 | imul esi,12 |
489 | imul esi,12 |
508 | add esi,ebx |
490 | add esi,ebx |
509 | push esi |
491 | push esi |
510 | 492 | ||
511 | stdcall poi_normal_add,eax |
493 | stdcall poi_normal_add,eax |
512 | 494 | ||
513 | add edi,8 |
495 | add edi,8 |
514 | add eax,12 |
496 | add eax,12 |
515 | dec edx |
497 | dec edx |
516 | jnz .cycle_0 |
498 | jnz .cycle_0 |
517 | .cycle_0_end: |
499 | .cycle_0_end: |
518 | .end: |
500 | .end: |
519 | popad |
501 | popad |
520 | ret |
502 | ret |
521 | endp |
503 | endp |
522 | 504 | ||
523 | ;input: |
505 | ;input: |
524 | ; norm_tr - 㪠§ â¥«ì ®à¬ «ì ª £à ¨ |
506 | ; norm_tr - 㪠§ â¥«ì ®à¬ «ì ª £à ¨ |
525 | ; n1, n2, n3 - 㪠§ ⥫¨ ®à¬ «¨ ¢¥àè¨ |
507 | ; n1, n2, n3 - 㪠§ ⥫¨ ®à¬ «¨ ¢¥àè¨ |
526 | ; c1, c2, c3 - 㪠§ ⥫¨ ª®®à¤¨ âë ¢¥àè¨ |
508 | ; c1, c2, c3 - 㪠§ ⥫¨ ª®®à¤¨ âë ¢¥àè¨ |
527 | align 4 |
509 | align 4 |
528 | proc poi_normal_add uses eax ebx,\ |
510 | proc poi_normal_add uses eax ebx,\ |
529 | norm_tr:dword, n1:dword, n2:dword, n3:dword, c1:dword, c2:dword, c3:dword |
511 | norm_tr:dword, n1:dword, n2:dword, n3:dword, c1:dword, c2:dword, c3:dword |
530 | 512 | ||
531 | mov ebx,[norm_tr] |
513 | mov ebx,[norm_tr] |
532 | 514 | ||
533 | mov eax,[n1] |
515 | mov eax,[n1] |
534 | fld dword[eax] |
516 | fld dword[eax] |
535 | fadd dword[ebx] |
517 | fadd dword[ebx] |
536 | fstp dword[eax] |
518 | fstp dword[eax] |
537 | fld dword[eax+4] |
519 | fld dword[eax+4] |
538 | fadd dword[ebx+4] |
520 | fadd dword[ebx+4] |
539 | fstp dword[eax+4] |
521 | fstp dword[eax+4] |
540 | fld dword[eax+8] |
522 | fld dword[eax+8] |
541 | fadd dword[ebx+8] |
523 | fadd dword[ebx+8] |
542 | fstp dword[eax+8] |
524 | fstp dword[eax+8] |
543 | 525 | ||
544 | mov eax,[n2] |
526 | mov eax,[n2] |
545 | fld dword[eax] |
527 | fld dword[eax] |
546 | fadd dword[ebx] |
528 | fadd dword[ebx] |
547 | fstp dword[eax] |
529 | fstp dword[eax] |
548 | fld dword[eax+4] |
530 | fld dword[eax+4] |
549 | fadd dword[ebx+4] |
531 | fadd dword[ebx+4] |
550 | fstp dword[eax+4] |
532 | fstp dword[eax+4] |
551 | fld dword[eax+8] |
533 | fld dword[eax+8] |
552 | fadd dword[ebx+8] |
534 | fadd dword[ebx+8] |
553 | fstp dword[eax+8] |
535 | fstp dword[eax+8] |
554 | 536 | ||
555 | mov eax,[n3] |
537 | mov eax,[n3] |
556 | fld dword[eax] |
538 | fld dword[eax] |
557 | fadd dword[ebx] |
539 | fadd dword[ebx] |
558 | fstp dword[eax] |
540 | fstp dword[eax] |
559 | fld dword[eax+4] |
541 | fld dword[eax+4] |
560 | fadd dword[ebx+4] |
542 | fadd dword[ebx+4] |
561 | fstp dword[eax+4] |
543 | fstp dword[eax+4] |
562 | fld dword[eax+8] |
544 | fld dword[eax+8] |
563 | fadd dword[ebx+8] |
545 | fadd dword[ebx+8] |
564 | fstp dword[eax+8] |
546 | fstp dword[eax+8] |
565 | 547 | ||
566 | ret |
548 | ret |
567 | endp |
549 | endp |
568 | 550 | ||
569 | ;description: |
551 | ;description: |
570 | ; normalize vector |
552 | ; normalize vector |
571 | align 4 |
553 | align 4 |
572 | proc V3_Norm uses eax ebx, a:dword |
554 | proc V3_Norm uses eax ebx, a:dword |
573 | mov ebx,[a] |
555 | mov ebx,[a] |
574 | fld dword[ebx] |
556 | fld dword[ebx] |
575 | fmul st0,st0 |
557 | fmul st0,st0 |
576 | fld dword[ebx+4] |
558 | fld dword[ebx+4] |
577 | fmul st0,st0 |
559 | fmul st0,st0 |
578 | faddp |
560 | faddp |
579 | fld dword[ebx+8] |
561 | fld dword[ebx+8] |
580 | fmul st0,st0 |
562 | fmul st0,st0 |
581 | faddp |
563 | faddp |
582 | fsqrt ;st0 = sqrt(a.X^2 +a.Y^2 +a.Z^2) |
564 | fsqrt ;st0 = sqrt(a.X^2 +a.Y^2 +a.Z^2) |
583 | ftst |
565 | ftst |
584 | fstsw ax |
566 | fstsw ax |
585 | sahf |
567 | sahf |
586 | je .r1 ;if (sqrt(...)==0) return 1 |
568 | je .r1 ;if (sqrt(...)==0) return 1 |
587 | fld dword[ebx] ;offs_X = 0 |
569 | fld dword[ebx] ;offs_X = 0 |
588 | fdiv st0,st1 |
570 | fdiv st0,st1 |
589 | fstp dword[ebx] ;a.X/=sqrt(...) |
571 | fstp dword[ebx] ;a.X/=sqrt(...) |
590 | fld dword[ebx+4] |
572 | fld dword[ebx+4] |
591 | fdiv st0,st1 |
573 | fdiv st0,st1 |
592 | fstp dword[ebx+4] ;a.Y/=sqrt(...) |
574 | fstp dword[ebx+4] ;a.Y/=sqrt(...) |
593 | fld dword[ebx+8] |
575 | fld dword[ebx+8] |
594 | fdiv st0,st1 |
576 | fdiv st0,st1 |
595 | fstp dword[ebx+8] ;a.Z/=sqrt(...) |
577 | fstp dword[ebx+8] ;a.Z/=sqrt(...) |
596 | .r1: |
578 | .r1: |
597 | ffree st0 |
579 | ffree st0 |
598 | fincstp |
580 | fincstp |
599 | ret |
581 | ret |
600 | endp |
582 | endp |
601 | 583 | ||
602 | ; áâனª áâàãªâãàë 3d ®¡ê¥ªâ |
584 | ; áâனª áâàãªâãàë 3d ®¡ê¥ªâ |
603 | align 4 |
585 | align 4 |
604 | proc obj_init, o_data:dword |
586 | proc obj_init, o_data:dword |
605 | pushad |
587 | pushad |
606 | mov edi,[o_data] |
588 | mov edi,[o_data] |
607 | stdcall obj_clear_param, edi |
589 | stdcall obj_clear_param, edi |
608 | stdcall [tl_node_get_data],tree1 |
590 | stdcall [tl_node_get_data],tree1 |
609 | xor edx,edx |
591 | xor edx,edx |
610 | cmp eax,0 |
592 | cmp eax,0 |
611 | je .no_points |
593 | je .no_points |
612 | mov ebx,[eax] ;¯®«ãç ¥¬ § 票¥ ᤢ¨£ ¢ë¡à ®£® ¡«®ª |
594 | mov ebx,[eax] ;¯®«ãç ¥¬ § 票¥ ᤢ¨£ ¢ë¡à ®£® ¡«®ª |
613 | add ebx,[open_file_data] |
595 | add ebx,[open_file_data] |
614 | xor ecx,ecx |
596 | xor ecx,ecx |
615 | cmp word[ebx],CHUNK_OBJBLOCK |
597 | cmp word[ebx],CHUNK_OBJBLOCK |
616 | jne @f |
598 | jne @f |
617 | mov ecx,ebx |
599 | mov ecx,ebx |
618 | add ecx,dword[ecx+2] ;£à ¨æ ¡«®ª |
600 | add ecx,dword[ecx+2] ;£à ¨æ ¡«®ª |
619 | push eax edi |
601 | push eax edi |
620 | mov edi,ebx |
602 | mov edi,ebx |
621 | add edi,6 |
603 | add edi,6 |
622 | cld |
604 | cld |
623 | xor al,al |
605 | xor al,al |
624 | repne scasb ;¯à®¯ã᪠¨¬¥¨ ®¡ê¥ªâ |
606 | repne scasb ;¯à®¯ã᪠¨¬¥¨ ®¡ê¥ªâ |
625 | mov ebx,edi |
607 | mov ebx,edi |
626 | pop edi eax |
608 | pop edi eax |
627 | @@: |
609 | @@: |
628 | cmp word[ebx],CHUNK_TRIMESH |
610 | cmp word[ebx],CHUNK_TRIMESH |
629 | jne @f |
611 | jne @f |
630 | mov ecx,ebx |
612 | mov ecx,ebx |
631 | add ecx,dword[ecx+2] ;£à ¨æ ¡«®ª |
613 | add ecx,dword[ecx+2] ;£à ¨æ ¡«®ª |
632 | add ebx,6 |
614 | add ebx,6 |
633 | @@: |
615 | @@: |
634 | cmp word[ebx],CHUNK_VERTLIST |
616 | cmp word[ebx],CHUNK_VERTLIST |
635 | jne .no_points |
617 | jne .no_points |
636 | mov esi,ebx |
618 | mov esi,ebx |
637 | movzx edx,word[ebx+6] ;ª®««¨ç¥á⢮ â®ç¥ª |
619 | movzx edx,word[ebx+6] ;ª®««¨ç¥á⢮ â®ç¥ª |
638 | add ebx,8 |
620 | add ebx,8 |
639 | mov [edi+offs_obj_poi_data],ebx |
621 | mov [edi+obj_3d.poi_data],ebx |
640 | mov [edi+offs_obj_poi_count],edx |
622 | mov [edi+obj_3d.poi_count],edx |
641 | 623 | ||
642 | .cycle_0: ;横« ¤«ï ¯®¨áª âà¥ã£®«ì¨ª®¢ |
624 | .cycle_0: ;横« ¤«ï ¯®¨áª âà¥ã£®«ì¨ª®¢ |
643 | add esi,dword[esi+2] |
625 | add esi,dword[esi+2] |
644 | cmp word[esi],CHUNK_FACELIST |
626 | cmp word[esi],CHUNK_FACELIST |
645 | je @f |
627 | je @f |
646 | cmp ecx,esi |
628 | cmp ecx,esi |
647 | jg .cycle_0 ;¯®ª ¥ ¤®á⨣ãâ £à¨æ áâ à襣® ¡«®ª |
629 | jg .cycle_0 ;¯®ª ¥ ¤®á⨣ãâ £à¨æ áâ à襣® ¡«®ª |
648 | jmp .end_points ;¥á«¨ ¥ 諨 âà¥ã£®«ì¨ª¨ |
630 | jmp .end_points ;¥á«¨ ¥ 諨 âà¥ã£®«ì¨ª¨ |
649 | @@: |
631 | @@: |
650 | ;¥á«¨ 諨 âà¥ã£®«ì¨ª¨ |
632 | ;¥á«¨ 諨 âà¥ã£®«ì¨ª¨ |
651 | movzx edx,word[esi+6] |
633 | movzx edx,word[esi+6] |
652 | mov [edi+offs_obj_tri_count],edx |
634 | mov [edi+obj_3d.tri_count],edx |
653 | add esi,8 ;2+4+2 (chunk+size+count) |
635 | add esi,8 ;2+4+2 (chunk+size+count) |
654 | mov [edi+offs_obj_tri_data],esi |
636 | mov [edi+obj_3d.tri_data],esi |
655 | 637 | ||
656 | ;¯®¨áª ¬ â¥à¨ «®¢ £à ¥© |
638 | ;¯®¨áª ¬ â¥à¨ «®¢ £à ¥© |
657 | shl edx,3 |
639 | shl edx,3 |
658 | add esi,edx |
640 | add esi,edx |
659 | cmp word[esi],CHUNK_FACEMAT |
641 | cmp word[esi],CHUNK_FACEMAT |
660 | jne .end_points |
642 | jne .end_points |
661 | mov [edi+offs_obj_mat1_data],esi |
643 | mov [edi+obj_3d.mat1_data],esi |
662 | .end_points: |
644 | .end_points: |
663 | 645 | ||
664 | stdcall obj_set_sizes, edi |
646 | stdcall obj_set_sizes, edi |
665 | stdcall obj_set_normals, edi |
647 | stdcall obj_set_normals, edi |
666 | if version_edit eq 0 |
648 | if version_edit eq 0 |
667 | stdcall draw_3d, edi |
649 | stdcall draw_3d, edi |
668 | end if |
650 | end if |
669 | .no_points: |
651 | .no_points: |
670 | popad |
652 | popad |
671 | ret |
653 | ret |
672 | endp |
654 | endp |
673 | 655 | ||
674 | ; áâனª ¬ â¥à¨ « |
656 | ; áâனª ¬ â¥à¨ « |
675 | ;input: |
657 | ;input: |
676 | ; m_data - 㪠§ â¥«ì § ¯®«ï¥¬ãî áâàãªâãàã á ¬ â¥à¨ «®¬ |
658 | ; m_data - 㪠§ â¥«ì § ¯®«ï¥¬ãî áâàãªâãàã á ¬ â¥à¨ «®¬ |
677 | ; f_data - 㪠§ â¥«ì ¡«®ª CHUNK_MATERIAL ¨§ ä ©« 3ds |
659 | ; f_data - 㪠§ â¥«ì ¡«®ª CHUNK_MATERIAL ¨§ ä ©« 3ds |
678 | align 4 |
660 | align 4 |
679 | proc mat_init, m_data:dword, f_data:dword |
661 | proc mat_init, m_data:dword, f_data:dword |
680 | pushad |
662 | pushad |
681 | mov edi,[m_data] |
663 | mov edi,[m_data] |
682 | 664 | ||
683 | ;... clear edi ... |
665 | ;... clear edi ... |
684 | mov dword[edi+offs_mat_name],0 |
666 | mov dword[edi+material.name],0 |
685 | mov dword[edi+offs_mat_col_ambient],0 |
667 | mov dword[edi+material.col_ambient],0 |
686 | mov dword[edi+offs_mat_col_diffuse],0 |
668 | mov dword[edi+material.col_diffuse],0 |
687 | mov dword[edi+offs_mat_col_specular],0 |
669 | mov dword[edi+material.col_specular],0 |
688 | 670 | ||
689 | xor edx,edx |
671 | xor edx,edx |
690 | mov ebx,[f_data] |
672 | mov ebx,[f_data] |
691 | xor ecx,ecx |
673 | xor ecx,ecx |
692 | cmp word[ebx],CHUNK_MATERIAL |
674 | cmp word[ebx],CHUNK_MATERIAL |
693 | jne .no_material |
675 | jne .no_material |
694 | mov ecx,ebx |
676 | mov ecx,ebx |
695 | add ecx,dword[ecx+2] ;£à ¨æ ¡«®ª |
677 | add ecx,dword[ecx+2] ;£à ¨æ ¡«®ª |
696 | add ebx,6 |
678 | add ebx,6 |
697 | cmp word[ebx],CHUNK_MATNAME |
679 | cmp word[ebx],CHUNK_MATNAME |
698 | jne .no_material |
680 | jne .no_material |
699 | ;*** (0) *** |
681 | ;*** (0) *** |
700 | mov esi,ebx |
682 | mov esi,ebx |
701 | add ebx,6 |
683 | add ebx,6 |
702 | mov [edi+offs_mat_name],ebx |
684 | mov [edi+material.name],ebx |
703 | sub ebx,6 |
685 | sub ebx,6 |
704 | ;*** (1) *** |
686 | ;*** (1) *** |
705 | .cycle_0: ;横« ¤«ï ¯®¨áª 梥⠬ â¥à¨ « |
687 | .cycle_0: ;横« ¤«ï ¯®¨áª 梥⠬ â¥à¨ « |
706 | add esi,dword[esi+2] |
688 | add esi,dword[esi+2] |
707 | cmp word[esi],0xa010 |
689 | cmp word[esi],0xa010 |
708 | je @f |
690 | je @f |
709 | cmp ecx,esi |
691 | cmp ecx,esi |
710 | jg .cycle_0 ;¯®ª ¥ ¤®á⨣ãâ £à¨æ áâ à襣® ¡«®ª |
692 | jg .cycle_0 ;¯®ª ¥ ¤®á⨣ãâ £à¨æ áâ à襣® ¡«®ª |
711 | jmp .end_material ;¥á«¨ ¥ 諨 梥⠬ â¥à¨ « |
693 | jmp .end_material ;¥á«¨ ¥ 諨 梥⠬ â¥à¨ « |
712 | @@: |
694 | @@: |
713 | ;¥á«¨ 諨 梥⠬ â¥à¨ « |
695 | ;¥á«¨ 諨 梥⠬ â¥à¨ « |
714 | add esi,6 |
696 | add esi,6 |
715 | cmp word[esi],0x0011 |
697 | cmp word[esi],0x0011 |
716 | jne .end_material |
698 | jne .end_material |
717 | add esi,6 |
699 | add esi,6 |
718 | mov dl,byte[esi] |
700 | mov dl,byte[esi] |
719 | mov [edi+offs_mat_col_ambient+2],dl |
701 | mov byte[edi+material.col_ambient+2],dl |
720 | mov dx,word[esi+1] |
702 | mov dx,word[esi+1] |
721 | ror dx,8 |
703 | ror dx,8 |
722 | mov [edi+offs_mat_col_ambient],dx |
704 | mov word[edi+material.col_ambient],dx |
723 | ;*** (2) *** |
705 | ;*** (2) *** |
724 | mov esi,ebx |
706 | mov esi,ebx |
725 | .cycle_1: ;横« ¤«ï ¯®¨áª 梥⠬ â¥à¨ « |
707 | .cycle_1: ;横« ¤«ï ¯®¨áª 梥⠬ â¥à¨ « |
726 | add esi,dword[esi+2] |
708 | add esi,dword[esi+2] |
727 | cmp word[esi],0xa020 |
709 | cmp word[esi],0xa020 |
728 | je @f |
710 | je @f |
729 | cmp ecx,esi |
711 | cmp ecx,esi |
730 | jg .cycle_1 ;¯®ª ¥ ¤®á⨣ãâ £à¨æ áâ à襣® ¡«®ª |
712 | jg .cycle_1 ;¯®ª ¥ ¤®á⨣ãâ £à¨æ áâ à襣® ¡«®ª |
731 | jmp .end_material ;¥á«¨ ¥ 諨 梥⠬ â¥à¨ « |
713 | jmp .end_material ;¥á«¨ ¥ 諨 梥⠬ â¥à¨ « |
732 | @@: |
714 | @@: |
733 | ;¥á«¨ 諨 梥⠬ â¥à¨ « |
715 | ;¥á«¨ 諨 梥⠬ â¥à¨ « |
734 | add esi,6 |
716 | add esi,6 |
735 | cmp word[esi],0x0011 |
717 | cmp word[esi],0x0011 |
736 | jne .end_material |
718 | jne .end_material |
737 | add esi,6 |
719 | add esi,6 |
738 | mov dl,byte[esi] |
720 | mov dl,byte[esi] |
739 | mov [edi+offs_mat_col_diffuse+2],dl |
721 | mov byte[edi+material.col_diffuse+2],dl |
740 | mov dx,word[esi+1] |
722 | mov dx,word[esi+1] |
741 | ror dx,8 |
723 | ror dx,8 |
742 | mov [edi+offs_mat_col_diffuse],dx |
724 | mov word[edi+material.col_diffuse],dx |
743 | ;*** (3) *** |
725 | ;*** (3) *** |
744 | mov esi,ebx |
726 | mov esi,ebx |
745 | .cycle_2: ;横« ¤«ï ¯®¨áª 梥⠬ â¥à¨ « |
727 | .cycle_2: ;横« ¤«ï ¯®¨áª 梥⠬ â¥à¨ « |
746 | add esi,dword[esi+2] |
728 | add esi,dword[esi+2] |
747 | cmp word[esi],0xa030 |
729 | cmp word[esi],0xa030 |
748 | je @f |
730 | je @f |
749 | cmp ecx,esi |
731 | cmp ecx,esi |
750 | jg .cycle_2 ;¯®ª ¥ ¤®á⨣ãâ £à¨æ áâ à襣® ¡«®ª |
732 | jg .cycle_2 ;¯®ª ¥ ¤®á⨣ãâ £à¨æ áâ à襣® ¡«®ª |
751 | jmp .end_material ;¥á«¨ ¥ 諨 梥⠬ â¥à¨ « |
733 | jmp .end_material ;¥á«¨ ¥ 諨 梥⠬ â¥à¨ « |
752 | @@: |
734 | @@: |
753 | ;¥á«¨ 諨 梥⠬ â¥à¨ « |
735 | ;¥á«¨ 諨 梥⠬ â¥à¨ « |
754 | add esi,6 |
736 | add esi,6 |
755 | cmp word[esi],0x0011 |
737 | cmp word[esi],0x0011 |
756 | jne .end_material |
738 | jne .end_material |
757 | add esi,6 |
739 | add esi,6 |
758 | mov dl,byte[esi] |
740 | mov dl,byte[esi] |
759 | mov [edi+offs_mat_col_specular+2],dl |
741 | mov byte[edi+material.col_specular+2],dl |
760 | mov dx,word[esi+1] |
742 | mov dx,word[esi+1] |
761 | ror dx,8 |
743 | ror dx,8 |
762 | mov [edi+offs_mat_col_specular],dx |
744 | mov word[edi+material.col_specular],dx |
763 | 745 | ||
764 | .end_material: |
746 | .end_material: |
765 | .no_material: |
747 | .no_material: |
766 | popad |
748 | popad |
767 | ret |
749 | ret |
768 | endp |
750 | endp |
769 | 751 | ||
770 | align 4 |
752 | align 4 |
771 | proc buf_draw_beg uses eax, buf:dword |
753 | proc buf_draw_beg uses eax, buf:dword |
772 | mov eax,[buf] |
754 | mov eax,[buf] |
773 | stdcall [buf2d_clear], eax, [eax+16] ;ç¨á⨬ ¡ãä¥à |
755 | stdcall [buf2d_clear], eax, [eax+16] ;ç¨á⨬ ¡ãä¥à |
774 | stdcall [buf2d_draw_text], eax, buf_1,txt_open_3ds,5,5,0xff |
756 | stdcall [buf2d_draw_text], eax, buf_1,txt_open_3ds,5,5,0xff |
775 | stdcall [buf2d_draw_text], eax, buf_1,openfile_path,5,15,0xff |
757 | stdcall [buf2d_draw_text], eax, buf_1,openfile_path,5,15,0xff |
776 | cmp dword[level_stack],FILE_ERROR_CHUNK_SIZE ;¢®§¬®¦ ®è¨¡ª ä ©« |
758 | cmp dword[level_stack],FILE_ERROR_CHUNK_SIZE ;¢®§¬®¦ ®è¨¡ª ä ©« |
777 | jne @f |
759 | jne @f |
778 | stdcall [buf2d_draw_text], eax, buf_1,txt_3ds_err_sizes,5,25,0xff0000 |
760 | stdcall [buf2d_draw_text], eax, buf_1,txt_3ds_err_sizes,5,25,0xff0000 |
779 | @@: |
761 | @@: |
780 | ret |
762 | ret |
781 | endp |
763 | endp |
782 | 764 | ||
783 | ;à¨á®¢ ¨¥ ¬ â¥à¨ « |
765 | ;à¨á®¢ ¨¥ ¬ â¥à¨ « |
784 | align 4 |
766 | align 4 |
785 | proc draw_material uses edi, m_data:dword |
767 | proc draw_material uses edi, m_data:dword |
786 | mov edi,[m_data] |
768 | mov edi,[m_data] |
787 | stdcall buf_draw_beg, buf_ogl |
769 | stdcall buf_draw_beg, buf_ogl |
788 | stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_afff,5,35,0xff |
770 | stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_afff,5,35,0xff |
789 | 771 | ||
790 | stdcall [buf2d_draw_text], buf_ogl,buf_1,[edi+offs_mat_name],15,45,0 ;¨¬ï ¬ â¥à¨ « |
772 | stdcall [buf2d_draw_text], buf_ogl,buf_1,[edi+material.name],15,45,0 ;¨¬ï ¬ â¥à¨ « |
791 | stdcall draw_color, [edi+offs_mat_col_ambient], txt_a010,2,55 ;®ªà㦠î騩 梥â |
773 | stdcall draw_color, [edi+material.col_ambient], txt_a010,2,55 ;®ªà㦠î騩 梥â |
792 | stdcall draw_color, [edi+offs_mat_col_diffuse], txt_a020,2,75 ;¤¨äã§ë© 梥â |
774 | stdcall draw_color, [edi+material.col_diffuse], txt_a020,2,75 ;¤¨äã§ë© 梥â |
793 | stdcall draw_color, [edi+offs_mat_col_specular],txt_a030,2,95 ;§¥àª «ìë© æ¢¥â |
775 | stdcall draw_color, [edi+material.col_specular],txt_a030,2,95 ;§¥àª «ìë© æ¢¥â |
794 | 776 | ||
795 | stdcall [buf2d_draw], buf_ogl |
777 | stdcall [buf2d_draw], buf_ogl |
796 | ret |
778 | ret |
797 | endp |
779 | endp |
798 | 780 | ||
799 | align 4 |
781 | align 4 |
800 | proc draw_color uses eax ebx, color:dword, text:dword, c_x:dword, c_y:dword |
782 | proc draw_color uses eax ebx, color:dword, text:dword, c_x:dword, c_y:dword |
801 | mov eax,[c_x] |
783 | mov eax,[c_x] |
802 | mov ebx,[c_y] |
784 | mov ebx,[c_y] |
803 | ; ¯àאַ㣮«ì¨ª |
785 | ; ¯àאַ㣮«ì¨ª |
804 | inc ebx |
786 | inc ebx |
805 | stdcall [buf2d_filled_rect_by_size], buf_ogl,eax,ebx,30,17,[color] |
787 | stdcall [buf2d_filled_rect_by_size], buf_ogl,eax,ebx,30,17,[color] |
806 | dec ebx |
788 | dec ebx |
807 | stdcall [buf2d_rect_by_size], buf_ogl,eax,ebx,30,19, 0 |
789 | stdcall [buf2d_rect_by_size], buf_ogl,eax,ebx,30,19, 0 |
808 | ; ¯®¤¯¨á¨ |
790 | ; ¯®¤¯¨á¨ |
809 | add eax,33 |
791 | add eax,33 |
810 | stdcall [buf2d_draw_text], buf_ogl, buf_1,[text],eax,ebx,0 |
792 | stdcall [buf2d_draw_text], buf_ogl, buf_1,[text],eax,ebx,0 |
811 | add ebx,10 |
793 | add ebx,10 |
812 | stdcall hex_in_str, buffer,[color],6 |
794 | stdcall hex_in_str, buffer,[color],6 |
813 | mov byte[buffer+6],0 |
795 | mov byte[buffer+6],0 |
814 | stdcall [buf2d_draw_text], buf_ogl, buf_1,buffer,eax,ebx,0 |
796 | stdcall [buf2d_draw_text], buf_ogl, buf_1,buffer,eax,ebx,0 |
815 | ret |
797 | ret |
816 | endp |
798 | endp |
817 | 799 | ||
818 | ;à¨á®¢ ¨¥ â®ç¥ª ¢ 3d |
800 | ;à¨á®¢ ¨¥ â®ç¥ª ¢ 3d |
819 | align 4 |
801 | align 4 |
820 | proc draw_3d uses eax ebx ecx edi, o_data:dword |
802 | proc draw_3d uses eax ebx ecx edi, o_data:dword |
821 | mov edi,[o_data] |
803 | mov edi,[o_data] |
822 | cmp dword[edi+offs_obj_poi_count],2 |
804 | cmp dword[edi+obj_3d.poi_count],2 |
823 | jl .end_f |
805 | jl .end_f |
824 | stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;®ç¨á⨬ ¡ãä¥à 梥⠨ £«ã¡¨ë |
806 | stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;®ç¨á⨬ ¡ãä¥à 梥⠨ £«ã¡¨ë |
825 | stdcall [glPushMatrix] |
807 | stdcall [glPushMatrix] |
826 | bt dword[draw_mode],bit_light |
808 | bt dword[draw_mode],bit_light |
827 | jnc @f |
809 | jnc @f |
828 | call SetLight |
810 | call SetLight |
829 | jmp .end_l |
811 | jmp .end_l |
830 | @@: |
812 | @@: |
831 | stdcall [glDisable],GL_LIGHTING |
813 | stdcall [glDisable],GL_LIGHTING |
832 | .end_l: |
814 | .end_l: |
833 | stdcall [glTranslatef], 0.0,0.0,0.5 ;correct for z |
815 | stdcall [glTranslatef], 0.0,0.0,0.5 ;correct for z |
834 | stdcall [glScalef], [edi+offs_obj_x_scale],[edi+offs_obj_y_scale],[edi+offs_obj_z_scale] |
816 | stdcall [glScalef], [edi+obj_3d.x_scale],[edi+obj_3d.y_scale],[edi+obj_3d.z_scale] |
835 | stdcall [glScalef], 1.0,1.0,0.7 ;correct for z |
817 | stdcall [glScalef], 1.0,1.0,0.7 ;correct for z |
836 | stdcall [glRotatef], [angle_z],0.0,0.0,1.0 |
818 | stdcall [glRotatef], [angle_z],0.0,0.0,1.0 |
837 | stdcall [glRotatef], [angle_y],0.0,1.0,0.0 |
819 | stdcall [glRotatef], [angle_y],0.0,1.0,0.0 |
838 | stdcall [glRotatef], [angle_x],1.0,0.0,0.0 |
820 | stdcall [glRotatef], [angle_x],1.0,0.0,0.0 |
839 | stdcall [glTranslatef], [edi+offs_obj_x_centr],[edi+offs_obj_y_centr],[edi+offs_obj_z_centr] |
821 | stdcall [glTranslatef], [edi+obj_3d.x_centr],[edi+obj_3d.y_centr],[edi+obj_3d.z_centr] |
840 | 822 | ||
841 | if version_edit eq 0 |
823 | if version_edit eq 0 |
842 | ;à¨á®¢ ¨¥ £à ¥© á ¨á¯®«ì§®¢ ¨¥¬ 梥⮢ ¬ â¥à¨ «®¢ |
824 | ;à¨á®¢ ¨¥ £à ¥© á ¨á¯®«ì§®¢ ¨¥¬ 梥⮢ ¬ â¥à¨ «®¢ |
843 | bt dword[draw_mode],bit_faces_mat |
825 | bt dword[draw_mode],bit_faces_mat |
844 | jnc @f |
826 | jnc @f |
845 | mov eax,[edi+offs_obj_mat1_data] |
827 | mov eax,[edi+obj_3d.mat1_data] |
846 | .b_found: |
828 | .b_found: |
847 | cmp eax,0 |
829 | cmp eax,0 |
848 | je .end_points |
830 | je .end_points |
849 | mov ebx,eax |
831 | mov ebx,eax |
850 | stdcall get_mat_color, eax |
832 | stdcall get_mat_color, eax |
851 | stdcall draw_3d_faces_color, edi,ebx,eax |
833 | stdcall draw_3d_faces_color, edi,ebx,eax |
852 | stdcall found_mat_faces, ebx |
834 | stdcall found_mat_faces, ebx |
853 | jmp .b_found |
835 | jmp .b_found |
854 | @@: |
836 | @@: |
855 | end if |
837 | end if |
856 | 838 | ||
857 | ;à¨á®¢ ¨¥ £à ¥© ¡¥§ 梥⮢ ¬ â¥à¨ «®¢ |
839 | ;à¨á®¢ ¨¥ £à ¥© ¡¥§ 梥⮢ ¬ â¥à¨ «®¢ |
858 | bt dword[draw_mode],bit_faces |
840 | bt dword[draw_mode],bit_faces |
859 | jnc .end_triangles |
841 | jnc .end_triangles |
860 | cmp dword[edi+offs_obj_tri_count],0 |
842 | cmp dword[edi+obj_3d.tri_count],0 |
861 | je .end_triangles |
843 | je .end_triangles |
862 | cmp dword[edi+offs_obj_poi_count],0 |
844 | cmp dword[edi+obj_3d.poi_count],0 |
863 | je .end_triangles |
845 | je .end_triangles |
864 | bt dword[draw_mode],bit_faces_fill |
846 | bt dword[draw_mode],bit_faces_fill |
865 | jc @f |
847 | jc @f |
866 | push GL_LINE |
848 | push GL_LINE |
867 | jmp .end_0 |
849 | jmp .end_0 |
868 | @@: |
850 | @@: |
869 | push GL_FILL |
851 | push GL_FILL |
870 | .end_0: |
852 | .end_0: |
871 | stdcall [glPolygonMode], GL_FRONT_AND_BACK ;mode - 㦥 ¢ á⥪¥ |
853 | stdcall [glPolygonMode], GL_FRONT_AND_BACK ;mode - 㦥 ¢ á⥪¥ |
872 | stdcall [glColor3ub],[color_face+2],[color_face+1],[color_face] |
854 | stdcall [glColor3ub],[color_face+2],[color_face+1],[color_face] |
873 | 855 | ||
874 | bt dword[draw_mode],bit_smooth |
856 | bt dword[draw_mode],bit_smooth |
875 | jnc .triangles_flat |
857 | jnc .triangles_flat |
876 | bt dword[draw_mode],bit_light |
858 | bt dword[draw_mode],bit_light |
877 | jnc .triangles_flat |
859 | jnc .triangles_flat |
878 | ;triangles smooth |
860 | ;triangles smooth |
879 | stdcall [glBegin],GL_TRIANGLES |
861 | stdcall [glBegin],GL_TRIANGLES |
880 | mov eax,[edi+offs_obj_tri_data] |
862 | mov eax,[edi+obj_3d.tri_data] |
881 | mov ecx,[edi+offs_obj_tri_count] |
863 | mov ecx,[edi+obj_3d.tri_count] |
882 | mov edx,[edi+offs_obj_normals_tri_data] |
864 | mov edx,[edi+obj_3d.normals_tri_data] |
883 | align 4 |
865 | align 4 |
884 | @@: |
866 | @@: |
885 | movzx ebx,word[eax] ;1-ï ¢¥àè¨ |
867 | movzx ebx,word[eax] ;1-ï ¢¥àè¨ |
886 | imul ebx,12 |
868 | imul ebx,12 |
887 | add ebx,[edi+offs_obj_normals_poi_data] |
869 | add ebx,[edi+obj_3d.normals_poi_data] |
888 | stdcall [glNormal3fv], ebx |
870 | stdcall [glNormal3fv], ebx |
889 | sub ebx,[edi+offs_obj_normals_poi_data] |
871 | sub ebx,[edi+obj_3d.normals_poi_data] |
890 | add ebx,[edi+offs_obj_poi_data] |
872 | add ebx,[edi+obj_3d.poi_data] |
891 | stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8] |
873 | stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8] |
892 | movzx ebx,word[eax+2] ;2-ï ¢¥àè¨ |
874 | movzx ebx,word[eax+2] ;2-ï ¢¥àè¨ |
893 | imul ebx,12 |
875 | imul ebx,12 |
894 | add ebx,[edi+offs_obj_normals_poi_data] |
876 | add ebx,[edi+obj_3d.normals_poi_data] |
895 | stdcall [glNormal3fv], ebx |
877 | stdcall [glNormal3fv], ebx |
896 | sub ebx,[edi+offs_obj_normals_poi_data] |
878 | sub ebx,[edi+obj_3d.normals_poi_data] |
897 | add ebx,[edi+offs_obj_poi_data] |
879 | add ebx,[edi+obj_3d.poi_data] |
898 | stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8] |
880 | stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8] |
899 | movzx ebx,word[eax+4] ;3-ï ¢¥àè¨ |
881 | movzx ebx,word[eax+4] ;3-ï ¢¥àè¨ |
900 | imul ebx,12 |
882 | imul ebx,12 |
901 | add ebx,[edi+offs_obj_normals_poi_data] |
883 | add ebx,[edi+obj_3d.normals_poi_data] |
902 | stdcall [glNormal3fv], ebx |
884 | stdcall [glNormal3fv], ebx |
903 | sub ebx,[edi+offs_obj_normals_poi_data] |
885 | sub ebx,[edi+obj_3d.normals_poi_data] |
904 | add ebx,[edi+offs_obj_poi_data] |
886 | add ebx,[edi+obj_3d.poi_data] |
905 | stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8] |
887 | stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8] |
906 | add eax,8 ;à §¬¥à âà¥ã£®«ì¨ª = (3 ¢¥àè¨ë (¯® 2¡) + ᢮©á⢠(2¡)) |
888 | add eax,8 ;à §¬¥à âà¥ã£®«ì¨ª = (3 ¢¥àè¨ë (¯® 2¡) + ᢮©á⢠(2¡)) |
907 | dec ecx |
889 | dec ecx |
908 | jnz @b |
890 | jnz @b |
909 | stdcall [glEnd] |
891 | stdcall [glEnd] |
910 | jmp .end_points |
892 | jmp .end_points |
911 | 893 | ||
912 | .triangles_flat: |
894 | .triangles_flat: |
913 | stdcall [glBegin],GL_TRIANGLES |
895 | stdcall [glBegin],GL_TRIANGLES |
914 | mov eax,[edi+offs_obj_tri_data] |
896 | mov eax,[edi+obj_3d.tri_data] |
915 | mov ecx,[edi+offs_obj_tri_count] |
897 | mov ecx,[edi+obj_3d.tri_count] |
916 | mov edx,[edi+offs_obj_normals_tri_data] |
898 | mov edx,[edi+obj_3d.normals_tri_data] |
917 | align 4 |
899 | align 4 |
918 | @@: |
900 | @@: |
919 | ; |
901 | ; |
920 | bt dword[draw_mode],bit_light |
902 | bt dword[draw_mode],bit_light |
921 | jnc .norm1 |
903 | jnc .norm1 |
922 | stdcall [glNormal3fv], edx |
904 | stdcall [glNormal3fv], edx |
923 | add edx,12 |
905 | add edx,12 |
924 | .norm1: |
906 | .norm1: |
925 | movzx ebx,word[eax] ;1-ï ¢¥àè¨ |
907 | movzx ebx,word[eax] ;1-ï ¢¥àè¨ |
926 | imul ebx,12 |
908 | imul ebx,12 |
927 | add ebx,[edi+offs_obj_poi_data] |
909 | add ebx,[edi+obj_3d.poi_data] |
928 | stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8] |
910 | stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8] |
929 | movzx ebx,word[eax+2] ;2-ï ¢¥àè¨ |
911 | movzx ebx,word[eax+2] ;2-ï ¢¥àè¨ |
930 | imul ebx,12 |
912 | imul ebx,12 |
931 | add ebx,[edi+offs_obj_poi_data] |
913 | add ebx,[edi+obj_3d.poi_data] |
932 | stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8] |
914 | stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8] |
933 | movzx ebx,word[eax+4] ;3-ï ¢¥àè¨ |
915 | movzx ebx,word[eax+4] ;3-ï ¢¥àè¨ |
934 | imul ebx,12 |
916 | imul ebx,12 |
935 | add ebx,[edi+offs_obj_poi_data] |
917 | add ebx,[edi+obj_3d.poi_data] |
936 | stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8] |
918 | stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8] |
937 | add eax,8 ;à §¬¥à âà¥ã£®«ì¨ª = (3 ¢¥àè¨ë (¯® 2¡) + ᢮©á⢠(2¡)) |
919 | add eax,8 ;à §¬¥à âà¥ã£®«ì¨ª = (3 ¢¥àè¨ë (¯® 2¡) + ᢮©á⢠(2¡)) |
938 | dec ecx |
920 | dec ecx |
939 | jnz @b |
921 | jnz @b |
940 | stdcall [glEnd] |
922 | stdcall [glEnd] |
941 | jmp .end_points |
923 | jmp .end_points |
942 | .end_triangles: |
924 | .end_triangles: |
943 | 925 | ||
944 | ;à¨á®¢ ¨¥ â®ç¥ª |
926 | ;à¨á®¢ ¨¥ â®ç¥ª |
945 | bt dword[draw_mode],bit_vertexes |
927 | bt dword[draw_mode],bit_vertexes |
946 | jnc .end_points |
928 | jnc .end_points |
947 | stdcall [glColor3ub],[color_vert+2],[color_vert+1],[color_vert] |
929 | stdcall [glColor3ub],[color_vert+2],[color_vert+1],[color_vert] |
948 | stdcall [glBegin],GL_POINTS |
930 | stdcall [glBegin],GL_POINTS |
949 | mov eax,[edi+offs_obj_poi_data] |
931 | mov eax,[edi+obj_3d.poi_data] |
950 | mov ebx,[edi+offs_obj_poi_count] |
932 | mov ebx,[edi+obj_3d.poi_count] |
951 | mov edx,[edi+offs_obj_normals_poi_data] |
933 | mov edx,[edi+obj_3d.normals_poi_data] |
952 | align 4 |
934 | align 4 |
953 | @@: |
935 | @@: |
954 | bt dword[draw_mode],bit_light |
936 | bt dword[draw_mode],bit_light |
955 | jnc .norm0 |
937 | jnc .norm0 |
956 | stdcall [glNormal3fv], edx |
938 | stdcall [glNormal3fv], edx |
957 | add edx,12 |
939 | add edx,12 |
958 | .norm0: |
940 | .norm0: |
959 | stdcall [glVertex3f], [eax],[eax+4],[eax+8] |
941 | stdcall [glVertex3f], [eax],[eax+4],[eax+8] |
960 | add eax,12 |
942 | add eax,12 |
961 | dec ebx |
943 | dec ebx |
962 | jnz @b |
944 | jnz @b |
963 | stdcall [glEnd] |
945 | stdcall [glEnd] |
964 | .end_points: |
946 | .end_points: |
965 | 947 | ||
966 | if version_edit eq 1 |
948 | if version_edit eq 1 |
967 | ;à¨á®¢ ¨¥ ªâ¨¢®© â®çª¨ |
949 | ;à¨á®¢ ¨¥ ªâ¨¢®© â®çª¨ |
968 | stdcall [tl_node_get_data],tree3 |
950 | stdcall [tl_node_get_data],tree3 |
969 | cmp eax,0 |
951 | cmp eax,0 |
970 | je @f |
952 | je @f |
971 | ;¢ë¤¥«¥¨¥ ªâ¨¢®© â®çª¨ |
953 | ;¢ë¤¥«¥¨¥ ªâ¨¢®© â®çª¨ |
972 | mov eax,[eax] |
954 | mov eax,[eax] |
973 | 955 | ||
974 | stdcall [glBegin],GL_LINES |
956 | stdcall [glBegin],GL_LINES |
975 | stdcall [glColor3ub], [color_ox+2],[color_ox+1],[color_ox] |
957 | stdcall [glColor3ub], [color_ox+2],[color_ox+1],[color_ox] |
976 | stdcall [glVertex3f], [edi+offs_obj_x_min],[eax+4],[eax+8] |
958 | stdcall [glVertex3f], [edi+obj_3d.x_min],[eax+4],[eax+8] |
977 | stdcall [glVertex3f], [edi+offs_obj_x_max],[eax+4],[eax+8] |
959 | stdcall [glVertex3f], [edi+obj_3d.x_max],[eax+4],[eax+8] |
978 | stdcall [glColor3ub], [color_oy+2],[color_oy+1],[color_oy] |
960 | stdcall [glColor3ub], [color_oy+2],[color_oy+1],[color_oy] |
979 | stdcall [glVertex3f], [eax],[edi+offs_obj_y_min],[eax+8] |
961 | stdcall [glVertex3f], [eax],[edi+obj_3d.y_min],[eax+8] |
980 | stdcall [glVertex3f], [eax],[edi+offs_obj_y_max],[eax+8] |
962 | stdcall [glVertex3f], [eax],[edi+obj_3d.y_max],[eax+8] |
981 | stdcall [glColor3ub], [color_oz+2],[color_oz+1],[color_oz] |
963 | stdcall [glColor3ub], [color_oz+2],[color_oz+1],[color_oz] |
982 | stdcall [glVertex3f], [eax],[eax+4],[edi+offs_obj_z_min] |
964 | stdcall [glVertex3f], [eax],[eax+4],[edi+obj_3d.z_min] |
983 | stdcall [glVertex3f], [eax],[eax+4],[edi+offs_obj_z_max] |
965 | stdcall [glVertex3f], [eax],[eax+4],[edi+obj_3d.z_max] |
984 | stdcall [glEnd] |
966 | stdcall [glEnd] |
985 | 967 | ||
986 | stdcall [glColor3ub],[color_select+2],[color_select+1],[color_select] |
968 | stdcall [glColor3ub],[color_select+2],[color_select+1],[color_select] |
987 | stdcall [glPushMatrix] |
969 | stdcall [glPushMatrix] |
988 | stdcall [glTranslatef], [eax],[eax+4],[eax+8] |
970 | stdcall [glTranslatef], [eax],[eax+4],[eax+8] |
989 | stdcall [gluSphere], [qObj], [sph_radius], 8,8 |
971 | stdcall [gluSphere], [qObj], [sph_radius], 8,8 |
990 | stdcall [glPopMatrix] |
972 | stdcall [glPopMatrix] |
991 | @@: |
973 | @@: |
992 | 974 | ||
993 | ;à¨á®¢ ¨¥ ¢ë¤¥«¥ëå â®ç¥ª |
975 | ;à¨á®¢ ¨¥ ¢ë¤¥«¥ëå â®ç¥ª |
994 | cmp dword[obj_poi_sel_c],0 |
976 | cmp dword[obj_poi_sel_c],0 |
995 | je .end_select |
977 | je .end_select |
996 | mov ecx,dword[obj_poi_sel_c] |
978 | mov ecx,dword[obj_poi_sel_c] |
997 | stdcall [glColor3ub],[color_select+2],[color_select+1],[color_select] |
979 | stdcall [glColor3ub],[color_select+2],[color_select+1],[color_select] |
998 | stdcall dword[tl_node_poi_get_info], tree3,0 |
980 | stdcall dword[tl_node_poi_get_info], tree3,0 |
999 | align 4 |
981 | align 4 |
1000 | @@: |
982 | @@: |
1001 | cmp eax,0 |
983 | cmp eax,0 |
1002 | je .end_select |
984 | je .end_select |
1003 | mov ebx,eax |
985 | mov ebx,eax |
1004 | cmp word[ebx],ID_ICON_POINT_SEL |
986 | cmp word[ebx],ID_ICON_POINT_SEL |
1005 | jne .next_sel |
987 | jne .next_sel |
1006 | stdcall [tl_node_poi_get_data], tree3,ebx |
988 | stdcall [tl_node_poi_get_data], tree3,ebx |
1007 | mov eax,[eax] |
989 | mov eax,[eax] |
1008 | stdcall [glPushMatrix] |
990 | stdcall [glPushMatrix] |
1009 | stdcall [glTranslatef], [eax],[eax+4],[eax+8] |
991 | stdcall [glTranslatef], [eax],[eax+4],[eax+8] |
1010 | stdcall [gluSphere], [qObj], [sph_radius], 4,4 |
992 | stdcall [gluSphere], [qObj], [sph_radius], 4,4 |
1011 | stdcall [glPopMatrix] |
993 | stdcall [glPopMatrix] |
1012 | dec ecx |
994 | dec ecx |
1013 | jz .end_select |
995 | jz .end_select |
1014 | .next_sel: |
996 | .next_sel: |
1015 | stdcall dword[tl_node_poi_get_next_info], tree3,ebx |
997 | stdcall dword[tl_node_poi_get_next_info], tree3,ebx |
1016 | jmp @b |
998 | jmp @b |
1017 | .end_select: |
999 | .end_select: |
1018 | end if |
1000 | end if |
1019 | 1001 | ||
1020 | stdcall [glPopMatrix] |
1002 | stdcall [glPopMatrix] |
1021 | if version_edit eq 1 |
1003 | if version_edit eq 1 |
1022 | cmp dword[obj_poi_sel_c],0 |
1004 | cmp dword[obj_poi_sel_c],0 |
1023 | je @f |
1005 | je @f |
1024 | stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_select_vert,5,3,[color_select] |
1006 | stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_select_vert,5,3,[color_select] |
1025 | @@: |
1007 | @@: |
1026 | end if |
1008 | end if |
1027 | stdcall [kosglSwapBuffers] |
1009 | stdcall [kosglSwapBuffers] |
1028 | .end_f: |
1010 | .end_f: |
1029 | ret |
1011 | ret |
1030 | endp |
1012 | endp |
1031 | 1013 | ||
1032 | align 4 |
1014 | align 4 |
1033 | SetLight: |
1015 | SetLight: |
1034 | stdcall [glLightfv], GL_LIGHT0, GL_POSITION, light_position |
1016 | stdcall [glLightfv], GL_LIGHT0, GL_POSITION, light_position |
1035 | stdcall [glLightfv], GL_LIGHT0, GL_SPOT_DIRECTION, light_dir |
1017 | stdcall [glLightfv], GL_LIGHT0, GL_SPOT_DIRECTION, light_dir |
1036 | 1018 | ||
1037 | stdcall [glLightfv], GL_LIGHT0, GL_DIFFUSE, white_light |
1019 | stdcall [glLightfv], GL_LIGHT0, GL_DIFFUSE, white_light |
1038 | stdcall [glLightfv], GL_LIGHT0, GL_SPECULAR, white_light |
1020 | stdcall [glLightfv], GL_LIGHT0, GL_SPECULAR, white_light |
1039 | 1021 | ||
1040 | stdcall [glEnable], GL_COLOR_MATERIAL |
1022 | stdcall [glEnable], GL_COLOR_MATERIAL |
1041 | stdcall [glColorMaterial], GL_FRONT, GL_AMBIENT_AND_DIFFUSE |
1023 | stdcall [glColorMaterial], GL_FRONT, GL_AMBIENT_AND_DIFFUSE |
1042 | stdcall [glMaterialfv], GL_FRONT, GL_SPECULAR, mat_specular |
1024 | stdcall [glMaterialfv], GL_FRONT, GL_SPECULAR, mat_specular |
1043 | stdcall [glMaterialf], GL_FRONT, GL_SHININESS, mat_shininess |
1025 | stdcall [glMaterialf], GL_FRONT, GL_SHININESS, mat_shininess |
1044 | stdcall [glLightModelfv], GL_LIGHT_MODEL_AMBIENT, lmodel_ambient |
1026 | stdcall [glLightModelfv], GL_LIGHT_MODEL_AMBIENT, lmodel_ambient |
1045 | 1027 | ||
1046 | stdcall [glEnable],GL_LIGHTING |
1028 | stdcall [glEnable],GL_LIGHTING |
1047 | stdcall [glEnable],GL_LIGHT0 |
1029 | stdcall [glEnable],GL_LIGHT0 |
1048 | ret |
1030 | ret |
1049 | 1031 | ||
1050 | ;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ¨ï ¢¥àè¨ |
1032 | ;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ¨ï ¢¥àè¨ |
1051 | align 4 |
1033 | align 4 |
1052 | mnu_vertexes_on: |
1034 | mnu_vertexes_on: |
1053 | or dword[draw_mode], 1 shl bit_vertexes |
1035 | or dword[draw_mode], 1 shl bit_vertexes |
1054 | and dword[draw_mode], not ((1 shl bit_faces)+(1 shl bit_faces_mat)) ;¢ëª«îç ¥¬ ०¨¬ë à¨á®¢ ¨ï, ª®â®àë¥ ¬®£ãâ ¬¥è âì |
1036 | and dword[draw_mode], not ((1 shl bit_faces)+(1 shl bit_faces_mat)) ;¢ëª«îç ¥¬ ०¨¬ë à¨á®¢ ¨ï, ª®â®àë¥ ¬®£ãâ ¬¥è âì |
1055 | call update_obj |
1037 | call update_obj |
1056 | ret |
1038 | ret |
1057 | 1039 | ||
1058 | ;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ¨ï ª ઠáëå £à ¥© |
1040 | ;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ¨ï ª ઠáëå £à ¥© |
1059 | align 4 |
1041 | align 4 |
1060 | mnu_edges_on: |
1042 | mnu_edges_on: |
1061 | or dword[draw_mode], 1 shl bit_faces |
1043 | or dword[draw_mode], 1 shl bit_faces |
1062 | and dword[draw_mode], not ((1 shl bit_vertexes)+(1 shl bit_faces_fill)+(1 shl bit_faces_mat)) |
1044 | and dword[draw_mode], not ((1 shl bit_vertexes)+(1 shl bit_faces_fill)+(1 shl bit_faces_mat)) |
1063 | call update_obj |
1045 | call update_obj |
1064 | ret |
1046 | ret |
1065 | 1047 | ||
1066 | ;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ¨ï ᯫ®èëå £à ¥© |
1048 | ;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ¨ï ᯫ®èëå £à ¥© |
1067 | align 4 |
1049 | align 4 |
1068 | mnu_faces_on: |
1050 | mnu_faces_on: |
1069 | or dword[draw_mode], (1 shl bit_faces)+(1 shl bit_faces_fill) |
1051 | or dword[draw_mode], (1 shl bit_faces)+(1 shl bit_faces_fill) |
1070 | and dword[draw_mode], not ((1 shl bit_vertexes)+(1 shl bit_faces_mat)) |
1052 | and dword[draw_mode], not ((1 shl bit_vertexes)+(1 shl bit_faces_mat)) |
1071 | call update_obj |
1053 | call update_obj |
1072 | ret |
1054 | ret |
1073 | 1055 | ||
1074 | ;¢ª«îç ¥¬ ¨«¨ ®âª«îç ¥¬ ®á¢¥é¥¨¥ |
1056 | ;¢ª«îç ¥¬ ¨«¨ ®âª«îç ¥¬ ®á¢¥é¥¨¥ |
1075 | align 4 |
1057 | align 4 |
1076 | mnu_light_on_off: |
1058 | mnu_light_on_off: |
1077 | xor dword[draw_mode], 1 shl bit_light |
1059 | xor dword[draw_mode], 1 shl bit_light |
1078 | call update_obj |
1060 | call update_obj |
1079 | ret |
1061 | ret |
1080 | 1062 | ||
1081 | align 4 |
1063 | align 4 |
1082 | mnu_smooth_on_off: |
1064 | mnu_smooth_on_off: |
1083 | xor dword[draw_mode], 1 shl bit_smooth |
1065 | xor dword[draw_mode], 1 shl bit_smooth |
1084 | call update_obj |
1066 | call update_obj |
1085 | ret |
1067 | ret |
1086 | 1068 | ||
1087 | align 4 |
1069 | align 4 |
1088 | mnu_reset_settings: |
1070 | mnu_reset_settings: |
1089 | mov dword[angle_x],0.0 |
1071 | mov dword[angle_x],0.0 |
1090 | mov dword[angle_y],0.0 |
1072 | mov dword[angle_y],0.0 |
1091 | mov dword[angle_z],0.0 |
1073 | mov dword[angle_z],0.0 |
1092 | m2m dword[draw_mode],dword[def_dr_mode] |
1074 | m2m dword[draw_mode],dword[def_dr_mode] |
1093 | call update_obj |
1075 | call update_obj |
1094 | ret |
1076 | ret |
- | 1077 | ||
- | 1078 | align 4 |
|
- | 1079 | mnu_make_scrshot: |
|
- | 1080 | pushad |
|
- | 1081 | copy_path open_dialog_name,communication_area_default_path,file_name,0 |
|
- | 1082 | mov [OpenDialog_data.type],1 |
|
- | 1083 | stdcall [OpenDialog_Start],OpenDialog_data |
|
- | 1084 | cmp [OpenDialog_data.status],2 |
|
- | 1085 | je .end_save_file |
|
- | 1086 | ;ª®¤ ¯à¨ 㤠箬 ®âªàë⨨ ¤¨ «®£ |
|
- | 1087 | mov dword[png_data],0 |
|
- | 1088 | ||
- | 1089 | ;create image struct |
|
- | 1090 | stdcall [img_create], [buf_ogl.w], [buf_ogl.h], Image.bpp24 |
|
- | 1091 | mov ebx,eax |
|
- | 1092 | test eax,eax |
|
- | 1093 | jz @f |
|
- | 1094 | ;copy foto to image buffer |
|
- | 1095 | mov edi,[eax+Image.Data] |
|
- | 1096 | mov esi,[buf_ogl] |
|
- | 1097 | mov ecx,[buf_ogl.w] |
|
- | 1098 | mov edx,[buf_ogl.h] |
|
- | 1099 | imul ecx,edx |
|
- | 1100 | imul ecx,3 |
|
- | 1101 | shr ecx,2 ;OpenGL buffer align to 4 |
|
- | 1102 | rep movsd |
|
- | 1103 | ||
- | 1104 | ;encode image |
|
- | 1105 | stdcall [img_encode], eax, LIBIMG_FORMAT_PNG, 0 |
|
- | 1106 | test eax,eax |
|
- | 1107 | jz @f |
|
- | 1108 | mov [png_data],eax |
|
- | 1109 | mov [png_size],ecx |
|
- | 1110 | @@: |
|
- | 1111 | stdcall [img_destroy],ebx |
|
- | 1112 | ||
- | 1113 | ; § ¯®«ï¥¬ áâàãªâãàã ¤«ï á®åà ¥¨ï ä ©« |
|
- | 1114 | mov ebx,run_file_70 |
|
- | 1115 | mov dword[ebx],SSF_CREATE_FILE |
|
- | 1116 | mov eax,[png_size] |
|
- | 1117 | mov [ebx+12],eax ;file size |
|
- | 1118 | mov eax,[png_data] |
|
- | 1119 | mov [ebx+16],eax |
|
- | 1120 | mov dword[ebx+FileInfoBlock.FileName], openfile_path |
|
- | 1121 | ||
- | 1122 | mcall SF_FILE,run_file_70 |
|
- | 1123 | test eax,eax |
|
- | 1124 | jnz .save_error |
|
- | 1125 | ;notify_window_run openfile_path |
|
- | 1126 | jmp @f |
|
- | 1127 | .save_error: |
|
- | 1128 | ;á®®¡é¥¨¥ ® ¥ã¤ 箬 á®åà ¥¨¨ |
|
- | 1129 | notify_window_run txt_err_save_img_file |
|
- | 1130 | @@: |
|
- | 1131 | mcall SF_SYS_MISC, SSF_MEM_FREE, [png_data] |
|
- | 1132 | .end_save_file: |
|
- | 1133 | popad |
|
- | 1134 | ret |
|
1095 | 1135 | ||
1096 | if version_edit eq 1 |
1136 | if version_edit eq 1 |
1097 | 1137 | ||
1098 | align 4 |
1138 | align 4 |
1099 | update_obj: |
1139 | update_obj: |
1100 | stdcall draw_3d, o3d |
1140 | stdcall draw_3d, o3d |
1101 | ret |
1141 | ret |
1102 | 1142 | ||
1103 | else |
1143 | else |
1104 | 1144 | ||
1105 | ;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ¨ï ᯫ®èëå £à ¥© |
1145 | ;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ¨ï ᯫ®èëå £à ¥© |
1106 | align 4 |
1146 | align 4 |
1107 | mnu_faces_mat: |
1147 | mnu_faces_mat: |
1108 | or dword[draw_mode], (1 shl bit_faces_mat) |
1148 | or dword[draw_mode], (1 shl bit_faces_mat) |
1109 | call update_obj |
1149 | call update_obj |
1110 | ret |
1150 | ret |
1111 | 1151 | ||
1112 | align 4 |
1152 | align 4 |
1113 | update_obj: |
1153 | update_obj: |
1114 | push eax ebx |
1154 | push eax ebx |
1115 | stdcall [tl_node_get_data],tree1 |
1155 | stdcall [tl_node_get_data],tree1 |
1116 | cmp eax,0 |
1156 | cmp eax,0 |
1117 | je @f |
1157 | je @f |
1118 | mov ebx,dword[eax] ;¯®«ãç ¥¬ § 票¥ ᤢ¨£ ¢ë¡à ®£® ¡«®ª ®â®á¨â¥«ì® ç « ä ©« |
1158 | mov ebx,dword[eax] ;¯®«ãç ¥¬ § 票¥ ᤢ¨£ ¢ë¡à ®£® ¡«®ª ®â®á¨â¥«ì® ç « ä ©« |
1119 | add ebx,dword[open_file_data] ;¯®«ãç ¥¬ § 票¥ ᤢ¨£ ¢ ¯ ¬ï⨠|
1159 | add ebx,dword[open_file_data] ;¯®«ãç ¥¬ § 票¥ ᤢ¨£ ¢ ¯ ¬ï⨠|
1120 | cmp word[ebx],CHUNK_OBJBLOCK |
1160 | cmp word[ebx],CHUNK_OBJBLOCK |
1121 | jne @f |
1161 | jne @f |
1122 | add eax,list_offs_obj3d |
1162 | add eax,list_offs_obj3d |
1123 | stdcall draw_3d,eax |
1163 | stdcall draw_3d,eax |
1124 | @@: |
1164 | @@: |
1125 | pop ebx eax |
1165 | pop ebx eax |
1126 | ret |
1166 | ret |
1127 | 1167 | ||
1128 | ;input: |
1168 | ;input: |
1129 | ; p_mat - 㪠§ â¥«ì ¤ ë¥ ¯à¥¤ë¤ã饣® ¬ â¥à¨ « |
1169 | ; p_mat - 㪠§ â¥«ì ¤ ë¥ ¯à¥¤ë¤ã饣® ¬ â¥à¨ « |
1130 | align 4 |
1170 | align 4 |
1131 | proc found_mat_faces uses ebx, p_mat:dword |
1171 | proc found_mat_faces uses ebx, p_mat:dword |
1132 | mov eax,[p_mat] |
1172 | mov eax,[p_mat] |
1133 | add eax,[eax+2] |
1173 | add eax,[eax+2] |
1134 | cmp word[eax],CHUNK_FACEMAT |
1174 | cmp word[eax],CHUNK_FACEMAT |
1135 | je @f |
1175 | je @f |
1136 | xor eax,eax |
1176 | xor eax,eax |
1137 | @@: |
1177 | @@: |
1138 | ret |
1178 | ret |
1139 | endp |
1179 | endp |
1140 | 1180 | ||
1141 | align 4 |
1181 | align 4 |
1142 | proc get_mat_color uses ebx ecx edx edi esi, p_mat:dword |
1182 | proc get_mat_color uses ebx ecx edx edi esi, p_mat:dword |
1143 | stdcall [tl_node_poi_get_info], tree1,0 |
1183 | stdcall [tl_node_poi_get_info], tree1,0 |
1144 | mov ecx,eax |
1184 | mov ecx,eax |
1145 | .cycle_0: |
1185 | .cycle_0: |
1146 | cmp ecx,0 |
1186 | cmp ecx,0 |
1147 | je .cycle_0_end |
1187 | je .cycle_0_end |
1148 | stdcall [tl_node_poi_get_data], tree1,ecx |
1188 | stdcall [tl_node_poi_get_data], tree1,ecx |
1149 | mov ebx,[eax] ;¯®«ãç ¥¬ § 票¥ ᤢ¨£ ¢ë¡à ®£® ¡«®ª |
1189 | mov ebx,[eax] ;¯®«ãç ¥¬ § 票¥ ᤢ¨£ ¢ë¡à ®£® ¡«®ª |
1150 | add ebx,[open_file_data] |
1190 | add ebx,[open_file_data] |
1151 | cmp word[ebx],CHUNK_MATERIAL |
1191 | cmp word[ebx],CHUNK_MATERIAL |
1152 | jne .end_add_p3 |
1192 | jne .end_add_p3 |
1153 | add eax,list_offs_obj3d |
1193 | add eax,list_offs_obj3d |
1154 | mov esi,[eax+offs_mat_name] |
1194 | mov esi,[eax+material.name] |
1155 | cmp esi,0 |
1195 | cmp esi,0 |
1156 | jne @f |
1196 | jne @f |
1157 | ;init material |
1197 | ;init material |
1158 | stdcall mat_init,eax,ebx |
1198 | stdcall mat_init,eax,ebx |
1159 | mov esi,[eax+offs_mat_name] |
1199 | mov esi,[eax+material.name] |
1160 | @@: |
1200 | @@: |
1161 | mov edi,[p_mat] |
1201 | mov edi,[p_mat] |
1162 | mov eax,5 |
1202 | mov eax,5 |
1163 | add edi,eax |
1203 | add edi,eax |
1164 | align 4 |
1204 | align 4 |
1165 | @@: |
1205 | @@: |
1166 | cmp al,0 |
1206 | cmp al,0 |
1167 | je .found |
1207 | je .found |
1168 | lodsb |
1208 | lodsb |
1169 | inc edi |
1209 | inc edi |
1170 | cmp byte[edi],al |
1210 | cmp byte[edi],al |
1171 | je @b |
1211 | je @b |
1172 | .end_add_p3: |
1212 | .end_add_p3: |
1173 | stdcall [tl_node_poi_get_next_info], tree1,ecx |
1213 | stdcall [tl_node_poi_get_next_info], tree1,ecx |
1174 | mov ecx,eax ;¯¥à¥å®¤¨¬ ª á«¥¤ã饬ã 㧫ã |
1214 | mov ecx,eax ;¯¥à¥å®¤¨¬ ª á«¥¤ã饬ã 㧫ã |
1175 | jmp .cycle_0 |
1215 | jmp .cycle_0 |
1176 | .cycle_0_end: |
1216 | .cycle_0_end: |
1177 | 1217 | ||
1178 | .no_found: |
1218 | .no_found: |
1179 | xor eax,eax |
1219 | xor eax,eax |
1180 | jmp .end_f |
1220 | jmp .end_f |
1181 | .found: |
1221 | .found: |
1182 | stdcall [tl_node_poi_get_data], tree1,ecx |
1222 | stdcall [tl_node_poi_get_data], tree1,ecx |
1183 | add eax,list_offs_obj3d |
1223 | add eax,list_offs_obj3d |
1184 | mov eax,[eax+offs_mat_col_diffuse] |
1224 | mov eax,[eax+material.col_diffuse] |
1185 | .end_f: |
1225 | .end_f: |
1186 | ret |
1226 | ret |
1187 | endp |
1227 | endp |
1188 | 1228 | ||
1189 | align 4 |
1229 | align 4 |
1190 | proc draw_3d_faces_color o_data:dword, p_mat:dword, color:dword |
1230 | proc draw_3d_faces_color o_data:dword, p_mat:dword, color:dword |
1191 | pushad |
1231 | pushad |
1192 | stdcall [glPolygonMode], GL_FRONT_AND_BACK,GL_FILL |
1232 | stdcall [glPolygonMode], GL_FRONT_AND_BACK,GL_FILL |
1193 | stdcall [glColor3ub],[color+2],[color+1],[color] |
1233 | stdcall [glColor3ub],[color+2],[color+1],[color] |
1194 | stdcall [glBegin],GL_TRIANGLES |
1234 | stdcall [glBegin],GL_TRIANGLES |
1195 | mov edi,[o_data] |
1235 | mov edi,[o_data] |
1196 | mov esi,[p_mat] |
1236 | mov esi,[p_mat] |
1197 | add esi,6 |
1237 | add esi,6 |
1198 | @@: |
1238 | @@: |
1199 | lodsb |
1239 | lodsb |
1200 | cmp al,0 |
1240 | cmp al,0 |
1201 | jne @b |
1241 | jne @b |
1202 | movzx ecx,word[esi] ;ecx - ç¨á«® £à ¥© á ¤ ë¬ ¬ â¥à¨ «®¬ |
1242 | movzx ecx,word[esi] ;ecx - ç¨á«® £à ¥© á ¤ ë¬ ¬ â¥à¨ «®¬ |
1203 | mov edx,[edi+offs_obj_poi_data] |
1243 | mov edx,[edi+obj_3d.poi_data] |
1204 | 1244 | ||
1205 | bt dword[draw_mode],bit_smooth |
1245 | bt dword[draw_mode],bit_smooth |
1206 | jnc @f |
1246 | jnc @f |
1207 | bt dword[draw_mode],bit_light |
1247 | bt dword[draw_mode],bit_light |
1208 | jnc @f |
1248 | jnc @f |
1209 | align 4 |
1249 | align 4 |
1210 | .cycle_0: |
1250 | .cycle_0: |
1211 | add esi,2 |
1251 | add esi,2 |
1212 | ;word[esi] - ®¬¥à âà¥ã£®«ì¨ª |
1252 | ;word[esi] - ®¬¥à âà¥ã£®«ì¨ª |
1213 | movzx ebx,word[esi] |
1253 | movzx ebx,word[esi] |
1214 | 1254 | ||
1215 | shl ebx,3 |
1255 | shl ebx,3 |
1216 | add ebx,[edi+offs_obj_tri_data] |
1256 | add ebx,[edi+obj_3d.tri_data] |
1217 | 1257 | ||
1218 | movzx eax,word[ebx] ;1-ï ¢¥àè¨ |
1258 | movzx eax,word[ebx] ;1-ï ¢¥àè¨ |
1219 | imul eax,12 ;float(x,y,z) |
1259 | imul eax,12 ;float(x,y,z) |
1220 | add eax,[edi+offs_obj_normals_poi_data] |
1260 | add eax,[edi+obj_3d.normals_poi_data] |
1221 | stdcall [glNormal3fv], eax |
1261 | stdcall [glNormal3fv], eax |
1222 | sub eax,[edi+offs_obj_normals_poi_data] |
1262 | sub eax,[edi+obj_3d.normals_poi_data] |
1223 | add eax,edx |
1263 | add eax,edx |
1224 | stdcall [glVertex3f], [eax],[eax+4],[eax+8] |
1264 | stdcall [glVertex3f], [eax],[eax+4],[eax+8] |
1225 | 1265 | ||
1226 | movzx eax,word[ebx+2] ;2-ï ¢¥àè¨ |
1266 | movzx eax,word[ebx+2] ;2-ï ¢¥àè¨ |
1227 | imul eax,12 ;float(x,y,z) |
1267 | imul eax,12 ;float(x,y,z) |
1228 | add eax,[edi+offs_obj_normals_poi_data] |
1268 | add eax,[edi+obj_3d.normals_poi_data] |
1229 | stdcall [glNormal3fv], eax |
1269 | stdcall [glNormal3fv], eax |
1230 | sub eax,[edi+offs_obj_normals_poi_data] |
1270 | sub eax,[edi+obj_3d.normals_poi_data] |
1231 | add eax,edx |
1271 | add eax,edx |
1232 | stdcall [glVertex3f], [eax],[eax+4],[eax+8] |
1272 | stdcall [glVertex3f], [eax],[eax+4],[eax+8] |
1233 | 1273 | ||
1234 | movzx eax,word[ebx+4] ;3-ï ¢¥àè¨ |
1274 | movzx eax,word[ebx+4] ;3-ï ¢¥àè¨ |
1235 | imul eax,12 ;float(x,y,z) |
1275 | imul eax,12 ;float(x,y,z) |
1236 | add eax,[edi+offs_obj_normals_poi_data] |
1276 | add eax,[edi+obj_3d.normals_poi_data] |
1237 | stdcall [glNormal3fv], eax |
1277 | stdcall [glNormal3fv], eax |
1238 | sub eax,[edi+offs_obj_normals_poi_data] |
1278 | sub eax,[edi+obj_3d.normals_poi_data] |
1239 | add eax,edx |
1279 | add eax,edx |
1240 | stdcall [glVertex3f], [eax],[eax+4],[eax+8] |
1280 | stdcall [glVertex3f], [eax],[eax+4],[eax+8] |
1241 | 1281 | ||
1242 | dec ecx |
1282 | dec ecx |
1243 | jnz .cycle_0 |
1283 | jnz .cycle_0 |
1244 | stdcall [glEnd] |
1284 | stdcall [glEnd] |
1245 | jmp .end_f |
1285 | jmp .end_f |
1246 | 1286 | ||
1247 | align 4 |
1287 | align 4 |
1248 | @@: |
1288 | @@: |
1249 | add esi,2 |
1289 | add esi,2 |
1250 | ;word[esi] - ®¬¥à âà¥ã£®«ì¨ª |
1290 | ;word[esi] - ®¬¥à âà¥ã£®«ì¨ª |
1251 | movzx ebx,word[esi] |
1291 | movzx ebx,word[esi] |
1252 | ;®à¬ «¨ ¤«ï ®á¢¥é¥¨ï |
1292 | ;®à¬ «¨ ¤«ï ®á¢¥é¥¨ï |
1253 | bt dword[draw_mode],bit_light |
1293 | bt dword[draw_mode],bit_light |
1254 | jnc .norm |
1294 | jnc .norm |
1255 | mov eax,ebx |
1295 | mov eax,ebx |
1256 | imul eax,12 |
1296 | imul eax,12 |
1257 | add eax,[edi+offs_obj_normals_tri_data] |
1297 | add eax,[edi+obj_3d.normals_tri_data] |
1258 | stdcall [glNormal3fv], eax |
1298 | stdcall [glNormal3fv], eax |
1259 | .norm: |
1299 | .norm: |
1260 | 1300 | ||
1261 | shl ebx,3 |
1301 | shl ebx,3 |
1262 | add ebx,[edi+offs_obj_tri_data] |
1302 | add ebx,[edi+obj_3d.tri_data] |
1263 | 1303 | ||
1264 | movzx eax,word[ebx] ;1-ï ¢¥àè¨ |
1304 | movzx eax,word[ebx] ;1-ï ¢¥àè¨ |
1265 | imul eax,12 ;float(x,y,z) |
1305 | imul eax,12 ;float(x,y,z) |
1266 | add eax,edx |
1306 | add eax,edx |
1267 | stdcall [glVertex3f], [eax],[eax+4],[eax+8] |
1307 | stdcall [glVertex3f], [eax],[eax+4],[eax+8] |
1268 | 1308 | ||
1269 | movzx eax,word[ebx+2] ;2-ï ¢¥àè¨ |
1309 | movzx eax,word[ebx+2] ;2-ï ¢¥àè¨ |
1270 | imul eax,12 ;float(x,y,z) |
1310 | imul eax,12 ;float(x,y,z) |
1271 | add eax,edx |
1311 | add eax,edx |
1272 | stdcall [glVertex3f], [eax],[eax+4],[eax+8] |
1312 | stdcall [glVertex3f], [eax],[eax+4],[eax+8] |
1273 | 1313 | ||
1274 | movzx eax,word[ebx+4] ;3-ï ¢¥àè¨ |
1314 | movzx eax,word[ebx+4] ;3-ï ¢¥àè¨ |
1275 | imul eax,12 ;float(x,y,z) |
1315 | imul eax,12 ;float(x,y,z) |
1276 | add eax,edx |
1316 | add eax,edx |
1277 | stdcall [glVertex3f], [eax],[eax+4],[eax+8] |
1317 | stdcall [glVertex3f], [eax],[eax+4],[eax+8] |
1278 | 1318 | ||
1279 | dec ecx |
1319 | dec ecx |
1280 | jnz @b |
1320 | jnz @b |
1281 | stdcall [glEnd] |
1321 | stdcall [glEnd] |
1282 | 1322 | ||
1283 | .end_f: |
1323 | .end_f: |
1284 | popad |
1324 | popad |
1285 | ret |
1325 | ret |
1286 | endp |
1326 | endp |
1287 | 1327 | ||
1288 | end if |
1328 | end if |
1289 | 1329 | ||
1290 | align 4 |
1330 | align 4 |
1291 | draw_mode dd 0 ;०¨¬ à¨á®¢ ¨ï ®¡ê¥ªâ |
1331 | draw_mode dd 0 ;०¨¬ à¨á®¢ ¨ï ®¡ê¥ªâ |
1292 | def_dr_mode dd 0 ;०¨¬ à¨á®¢ ¨ï ¯® 㬮«ç ¨î |
1332 | def_dr_mode dd 0 ;०¨¬ à¨á®¢ ¨ï ¯® 㬮«ç ¨î |
1293 | delt_size dd 3.0 ;¨§¬¥¥¨¥ 㣫®¢ ¯à¨ ¯®¢®à®â å á ª«¨¢¨ âãàë |
1333 | delt_size dd 3.0 ;¨§¬¥¥¨¥ 㣫®¢ ¯à¨ ¯®¢®à®â å á ª«¨¢¨ âãàë |
1294 | mouse_drag dd 0 ;०¨¬ ¯®¢®à®â áæ¥ë ®â ¯¥à¥¬¥é¥¨¨ ªãàá®à ¬ëè¨ |
1334 | mouse_drag dd 0 ;०¨¬ ¯®¢®à®â áæ¥ë ®â ¯¥à¥¬¥é¥¨¨ ªãàá®à ¬ëè¨ |
1295 | mouse_x dd 0 |
1335 | mouse_x dd 0 |
1296 | mouse_y dd 0 |
1336 | mouse_y dd 0 |
1297 | sph_radius dd 0 ;à ¤¨ãá áä¥àë ¤«ï ¢ë¤¥«¥¨ï ªâ¨¢®© â®çª¨->->-> |
1337 | sph_radius dd 0 ;à ¤¨ãá áä¥àë ¤«ï ¢ë¤¥«¥¨ï ªâ¨¢®© â®çª¨->->-> |
1298 | > |
1338 | > |