Rev 6509 | Rev 6513 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 6509 | Rev 6510 | ||
---|---|---|---|
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 | 30 | ||
31 | offs_obj_poi_data equ 0 ;㪠§ â¥«ì ª®®à¤¨ âë ¢¥àè¨ |
31 | offs_obj_poi_data equ 0 ;㪠§ â¥«ì ª®®à¤¨ âë ¢¥àè¨ |
32 | offs_obj_poi_count equ 4 ;ª®««¨ç¥á⢮ ¢¥àè¨ |
32 | offs_obj_poi_count equ 4 ;ª®««¨ç¥á⢮ ¢¥àè¨ |
33 | offs_obj_tri_data equ 8 ;㪠§ â¥«ì ¤ ë¥ âà¥ã£®«ì¨ª®¢ |
33 | offs_obj_tri_data equ 8 ;㪠§ â¥«ì ¤ ë¥ âà¥ã£®«ì¨ª®¢ |
34 | offs_obj_tri_count equ 12 ;ª®««¨ç¥á⢮ âà¥ã£®«ì¨ª®¢ |
34 | offs_obj_tri_count equ 12 ;ª®««¨ç¥á⢮ âà¥ã£®«ì¨ª®¢ |
35 | offs_obj_normals_poi_data equ 16 |
35 | offs_obj_normals_poi_data equ 16 |
36 | offs_obj_normals_poi_count equ 20 |
36 | offs_obj_normals_poi_count equ 20 |
37 | offs_obj_normals_tri_data equ 24 |
37 | offs_obj_normals_tri_data equ 24 |
38 | offs_obj_normals_tri_count equ 28 |
38 | offs_obj_normals_tri_count equ 28 |
39 | offs_obj_x_max equ 32 |
39 | offs_obj_x_max equ 32 |
40 | offs_obj_x_min equ 36 |
40 | offs_obj_x_min equ 36 |
41 | offs_obj_x_centr equ 40 |
41 | offs_obj_x_centr equ 40 |
42 | offs_obj_x_scale equ 44 |
42 | offs_obj_x_scale equ 44 |
43 | offs_obj_y_max equ 48 |
43 | offs_obj_y_max equ 48 |
44 | offs_obj_y_min equ 52 |
44 | offs_obj_y_min equ 52 |
45 | offs_obj_y_centr equ 56 |
45 | offs_obj_y_centr equ 56 |
46 | offs_obj_y_scale equ 60 |
46 | offs_obj_y_scale equ 60 |
47 | offs_obj_z_max equ 64 |
47 | offs_obj_z_max equ 64 |
48 | offs_obj_z_min equ 68 |
48 | offs_obj_z_min equ 68 |
49 | offs_obj_z_centr equ 72 |
49 | offs_obj_z_centr equ 72 |
50 | offs_obj_z_scale equ 76 |
50 | offs_obj_z_scale equ 76 |
51 | offs_obj_mat1_data equ 80 |
51 | offs_obj_mat1_data equ 80 |
52 | 52 | ||
53 | struct material |
53 | struct material |
54 | name dd ? |
54 | name dd ? |
55 | col_ambient dd ? ;梥⠬ â¥à¨ « |
55 | col_ambient dd ? ;梥⠬ â¥à¨ « |
56 | col_diffuse dd ? |
56 | col_diffuse dd ? |
57 | col_specular dd ? |
57 | col_specular dd ? |
58 | ends |
58 | ends |
59 | 59 | ||
60 | offs_mat_name equ 0 |
60 | offs_mat_name equ 0 |
61 | offs_mat_col_ambient equ 4 |
61 | offs_mat_col_ambient equ 4 |
62 | offs_mat_col_diffuse equ 8 |
62 | offs_mat_col_diffuse equ 8 |
63 | offs_mat_col_specular equ 12 |
63 | offs_mat_col_specular equ 12 |
64 | 64 | ||
65 | bit_vertexes equ 0 |
65 | bit_vertexes equ 0 |
66 | bit_faces equ 1 |
66 | bit_faces equ 1 |
67 | bit_faces_fill equ 2 |
67 | bit_faces_fill equ 2 |
68 | bit_light equ 3 |
68 | bit_light equ 3 |
69 | bit_faces_mat equ 4 |
69 | bit_faces_mat equ 4 |
70 | 70 | ||
71 | ini_name db 'info3ds.ini',0 |
71 | ini_name db 'info3ds.ini',0 |
72 | ini_sec_w3d db 'Window 3d',0 |
72 | ini_sec_w3d db 'Window 3d',0 |
73 | key_dv db 'draw_vertices',0 |
73 | key_dv db 'draw_vertices',0 |
74 | key_df db 'draw_faces',0 |
74 | key_df db 'draw_faces',0 |
75 | key_dff db 'draw_faces_fill',0 |
75 | key_dff db 'draw_faces_fill',0 |
76 | key_dl db 'draw_light',0 |
76 | key_dl db 'draw_light',0 |
77 | key_ox db 'col_ox',0 |
77 | key_ox db 'col_ox',0 |
78 | key_oy db 'col_oy',0 |
78 | key_oy db 'col_oy',0 |
79 | key_oz db 'col_oz',0 |
79 | key_oz db 'col_oz',0 |
80 | key_bk db 'col_bkgnd',0 |
80 | key_bk db 'col_bkgnd',0 |
81 | key_vert db 'col_vertices',0 |
81 | key_vert db 'col_vertices',0 |
82 | key_face db 'col_faces',0 |
82 | key_face db 'col_faces',0 |
83 | key_select db 'col_select',0 |
83 | key_select db 'col_select',0 |
84 | 84 | ||
85 | 85 | ||
86 | rad_c dd 150 ;¤«ï ¢ëç¨á«¥¨ï à ¤¨ãá |
86 | rad_c dd 150 ;¤«ï ¢ëç¨á«¥¨ï à ¤¨ãá |
87 | 87 | ||
88 | align 4 |
88 | align 4 |
89 | proc hex_in_str, buf:dword,val:dword,zif:dword |
89 | proc hex_in_str, buf:dword,val:dword,zif:dword |
90 | pushad |
90 | pushad |
91 | mov edi,dword[buf] |
91 | mov edi,dword[buf] |
92 | mov ecx,dword[zif] |
92 | mov ecx,dword[zif] |
93 | add edi,ecx |
93 | add edi,ecx |
94 | dec edi |
94 | dec edi |
95 | mov ebx,dword[val] |
95 | mov ebx,dword[val] |
96 | 96 | ||
97 | .cycle: |
97 | .cycle: |
98 | mov al,bl |
98 | mov al,bl |
99 | and al,0xf |
99 | and al,0xf |
100 | cmp al,10 |
100 | cmp al,10 |
101 | jl @f |
101 | jl @f |
102 | add al,'a'-'0'-10 |
102 | add al,'a'-'0'-10 |
103 | @@: |
103 | @@: |
104 | add al,'0' |
104 | add al,'0' |
105 | mov byte[edi],al |
105 | mov byte[edi],al |
106 | dec edi |
106 | dec edi |
107 | shr ebx,4 |
107 | shr ebx,4 |
108 | loop .cycle |
108 | loop .cycle |
109 | popad |
109 | popad |
110 | ret |
110 | ret |
111 | endp |
111 | endp |
112 | 112 | ||
113 | ;ãáâ ®¢ª ¢á¥å ®á®¢ëå ¯¥à¥¬¥ëå ¯® 㬮«ç ¨î |
113 | ;ãáâ ®¢ª ¢á¥å ®á®¢ëå ¯¥à¥¬¥ëå ¯® 㬮«ç ¨î |
114 | align 4 |
114 | align 4 |
115 | proc obj_clear_param uses edi, o_data:dword |
115 | proc obj_clear_param uses edi, o_data:dword |
116 | mov edi,[o_data] |
116 | mov edi,[o_data] |
117 | ;®¡ã«¥¨¥ 㪠§ ⥫¥© ¤ ë¥ ®¡ê¥ªâ®¢ |
117 | ;®¡ã«¥¨¥ 㪠§ ⥫¥© ¤ ë¥ ®¡ê¥ªâ®¢ |
118 | mov dword[edi+offs_obj_poi_data],0 |
118 | mov dword[edi+offs_obj_poi_data],0 |
119 | mov dword[edi+offs_obj_poi_count],0 |
119 | mov dword[edi+offs_obj_poi_count],0 |
120 | mov dword[edi+offs_obj_tri_data],0 |
120 | mov dword[edi+offs_obj_tri_data],0 |
121 | mov dword[edi+offs_obj_tri_count],0 |
121 | mov dword[edi+offs_obj_tri_count],0 |
122 | mov dword[edi+offs_obj_normals_tri_count],0 |
122 | mov dword[edi+offs_obj_normals_tri_count],0 |
123 | mov dword[edi+offs_obj_normals_poi_count],0 |
123 | mov dword[edi+offs_obj_normals_poi_count],0 |
124 | mov dword[edi+offs_obj_mat1_data],0 |
124 | mov dword[edi+offs_obj_mat1_data],0 |
125 | cmp dword[edi+offs_obj_normals_tri_data],0 |
125 | cmp dword[edi+offs_obj_normals_tri_data],0 |
126 | je @f |
126 | je @f |
127 | stdcall mem.Free,[edi+offs_obj_normals_tri_data] |
127 | stdcall mem.Free,[edi+offs_obj_normals_tri_data] |
128 | mov dword[edi+offs_obj_normals_tri_data],0 |
128 | mov dword[edi+offs_obj_normals_tri_data],0 |
129 | @@: |
129 | @@: |
130 | cmp dword[edi+offs_obj_normals_poi_data],0 |
130 | cmp dword[edi+offs_obj_normals_poi_data],0 |
131 | je @f |
131 | je @f |
132 | stdcall mem.Free,[edi+offs_obj_normals_poi_data] |
132 | stdcall mem.Free,[edi+offs_obj_normals_poi_data] |
133 | mov dword[edi+offs_obj_normals_poi_data],0 |
133 | mov dword[edi+offs_obj_normals_poi_data],0 |
134 | @@: |
134 | @@: |
135 | ret |
135 | ret |
136 | endp |
136 | endp |
137 | 137 | ||
138 | ;¯®¨áª ¤ ëå |
138 | ;¯®¨áª ¤ ëå |
139 | ;input: |
139 | ;input: |
140 | ;eax - ⥪ã騩 㧥« |
140 | ;eax - ⥪ã騩 㧥« |
141 | ;output: |
141 | ;output: |
142 | ;eax - áâàãªâãà ⥪ã饣® 㧫 (¨«¨ 0 ¯à¨ ¥ã¤ ç¥) |
142 | ;eax - áâàãªâãà ⥪ã饣® 㧫 (¨«¨ 0 ¯à¨ ¥ã¤ ç¥) |
143 | align 4 |
143 | align 4 |
144 | proc found_block_data uses ebx ecx edx, tlist:dword |
144 | proc found_block_data uses ebx ecx edx, tlist:dword |
145 | mov edx,[tlist] |
145 | mov edx,[tlist] |
146 | mov ecx,eax |
146 | mov ecx,eax |
147 | stdcall [tl_node_poi_get_info], edx,0 |
147 | stdcall [tl_node_poi_get_info], edx,0 |
148 | @@: |
148 | @@: |
149 | mov ebx,eax |
149 | mov ebx,eax |
150 | stdcall [tl_node_poi_get_data], edx,ebx |
150 | stdcall [tl_node_poi_get_data], edx,ebx |
151 | cmp eax,ecx |
151 | cmp eax,ecx |
152 | je @f ;¥á«¨ ¯®¯ «¨ ¢ë¡à ë© ã§¥« |
152 | je @f ;¥á«¨ ¯®¯ «¨ ¢ë¡à ë© ã§¥« |
153 | stdcall [tl_node_poi_get_next_info], edx,ebx |
153 | stdcall [tl_node_poi_get_next_info], edx,ebx |
154 | cmp eax,0 |
154 | cmp eax,0 |
155 | jne @b |
155 | jne @b |
156 | jmp .end |
156 | jmp .end |
157 | @@: |
157 | @@: |
158 | mov eax,ebx |
158 | mov eax,ebx |
159 | .end: |
159 | .end: |
160 | ret |
160 | ret |
161 | endp |
161 | endp |
162 | 162 | ||
163 | ;ãáâ ®¢ª à §¬¥à®¢ ®¡ê¥ªâ |
163 | ;ãáâ ®¢ª à §¬¥à®¢ ®¡ê¥ªâ |
164 | align 4 |
164 | align 4 |
165 | proc obj_set_sizes uses eax ebx esi edi, o_data:dword |
165 | proc obj_set_sizes uses eax ebx esi edi, o_data:dword |
166 | mov edi,[o_data] |
166 | mov edi,[o_data] |
167 | cmp dword[edi+offs_obj_poi_count],0 |
167 | cmp dword[edi+offs_obj_poi_count],0 |
168 | je .end |
168 | je .end |
169 | finit |
169 | finit |
170 | mov eax,[edi+offs_obj_poi_data] |
170 | mov eax,[edi+offs_obj_poi_data] |
171 | mov ebx,dword[eax] |
171 | mov ebx,dword[eax] |
172 | mov [edi+offs_obj_x_min],ebx |
172 | mov [edi+offs_obj_x_min],ebx |
173 | mov [edi+offs_obj_x_max],ebx |
173 | mov [edi+offs_obj_x_max],ebx |
174 | mov ebx,dword[eax+4] |
174 | mov ebx,dword[eax+4] |
175 | mov [edi+offs_obj_y_min],ebx |
175 | mov [edi+offs_obj_y_min],ebx |
176 | mov [edi+offs_obj_y_max],ebx |
176 | mov [edi+offs_obj_y_max],ebx |
177 | mov ebx,dword[eax+8] |
177 | mov ebx,dword[eax+8] |
178 | mov [edi+offs_obj_z_min],ebx |
178 | mov [edi+offs_obj_z_min],ebx |
179 | mov [edi+offs_obj_z_max],ebx |
179 | mov [edi+offs_obj_z_max],ebx |
180 | 180 | ||
181 | mov ebx,[edi+offs_obj_poi_data] |
181 | mov ebx,[edi+offs_obj_poi_data] |
182 | mov esi,[edi+offs_obj_poi_count] |
182 | mov esi,[edi+offs_obj_poi_count] |
183 | align 4 |
183 | align 4 |
184 | .cycle_0: ;à ¡®â á ª®®à¤¨ ⮩ x |
184 | .cycle_0: ;à ¡®â á ª®®à¤¨ ⮩ x |
185 | fld dword[ebx] |
185 | fld dword[ebx] |
186 | fld dword[edi+offs_obj_x_min] |
186 | fld dword[edi+offs_obj_x_min] |
187 | fcomp |
187 | fcomp |
188 | fstsw ax |
188 | fstsw ax |
189 | sahf |
189 | sahf |
190 | jb @f |
190 | jb @f |
191 | mov eax,[ebx] |
191 | mov eax,[ebx] |
192 | mov [edi+offs_obj_x_min],eax |
192 | mov [edi+offs_obj_x_min],eax |
193 | ffree st0 |
193 | ffree st0 |
194 | fincstp |
194 | fincstp |
195 | jmp .next_x |
195 | jmp .next_x |
196 | @@: |
196 | @@: |
197 | fld dword[edi+offs_obj_x_max] |
197 | fld dword[edi+offs_obj_x_max] |
198 | fcompp |
198 | fcompp |
199 | fstsw ax |
199 | fstsw ax |
200 | sahf |
200 | sahf |
201 | ja .next_x |
201 | ja .next_x |
202 | mov eax,[ebx] |
202 | mov eax,[ebx] |
203 | mov [edi+offs_obj_x_max],eax |
203 | mov [edi+offs_obj_x_max],eax |
204 | .next_x: |
204 | .next_x: |
205 | 205 | ||
206 | add ebx,12 |
206 | add ebx,12 |
207 | dec esi |
207 | dec esi |
208 | jnz .cycle_0 |
208 | jnz .cycle_0 |
209 | 209 | ||
210 | fld1 |
210 | fld1 |
211 | fld dword[edi+offs_obj_x_max] |
211 | fld dword[edi+offs_obj_x_max] |
212 | fsub dword[edi+offs_obj_x_min] |
212 | fsub dword[edi+offs_obj_x_min] |
213 | fst dword[edi+offs_obj_x_centr] |
213 | fst dword[edi+offs_obj_x_centr] |
214 | fdivp ;1/size.x |
214 | fdivp ;1/size.x |
215 | fstp dword[edi+offs_obj_x_scale] |
215 | fstp dword[edi+offs_obj_x_scale] |
216 | 216 | ||
217 | fld dword[edi+offs_obj_x_centr] |
217 | fld dword[edi+offs_obj_x_centr] |
218 | fld1 |
218 | fld1 |
219 | fld1 |
219 | fld1 |
220 | faddp |
220 | faddp |
221 | fdivp ;centr.x = size.x/2 |
221 | fdivp ;centr.x = size.x/2 |
222 | fadd dword[edi+offs_obj_x_min] |
222 | fadd dword[edi+offs_obj_x_min] |
223 | fchs |
223 | fchs |
224 | fstp dword[edi+offs_obj_x_centr] |
224 | fstp dword[edi+offs_obj_x_centr] |
225 | 225 | ||
226 | mov ebx,[edi+offs_obj_poi_data] |
226 | mov ebx,[edi+offs_obj_poi_data] |
227 | mov esi,[edi+offs_obj_poi_count] |
227 | mov esi,[edi+offs_obj_poi_count] |
228 | align 4 |
228 | align 4 |
229 | .cycle_1: ;à ¡®â á ª®®à¤¨ ⮩ y |
229 | .cycle_1: ;à ¡®â á ª®®à¤¨ ⮩ y |
230 | fld dword[ebx+4] |
230 | fld dword[ebx+4] |
231 | fld dword[edi+offs_obj_y_min] |
231 | fld dword[edi+offs_obj_y_min] |
232 | fcomp |
232 | fcomp |
233 | fstsw ax |
233 | fstsw ax |
234 | sahf |
234 | sahf |
235 | jb @f |
235 | jb @f |
236 | mov eax,[ebx+4] |
236 | mov eax,[ebx+4] |
237 | mov [edi+offs_obj_y_min],eax |
237 | mov [edi+offs_obj_y_min],eax |
238 | ffree st0 |
238 | ffree st0 |
239 | fincstp |
239 | fincstp |
240 | jmp .next_y |
240 | jmp .next_y |
241 | @@: |
241 | @@: |
242 | fld dword[edi+offs_obj_y_max] |
242 | fld dword[edi+offs_obj_y_max] |
243 | fcompp |
243 | fcompp |
244 | fstsw ax |
244 | fstsw ax |
245 | sahf |
245 | sahf |
246 | ja .next_y |
246 | ja .next_y |
247 | mov eax,[ebx+4] |
247 | mov eax,[ebx+4] |
248 | mov [edi+offs_obj_y_max],eax |
248 | mov [edi+offs_obj_y_max],eax |
249 | .next_y: |
249 | .next_y: |
250 | 250 | ||
251 | add ebx,12 |
251 | add ebx,12 |
252 | dec esi |
252 | dec esi |
253 | jnz .cycle_1 |
253 | jnz .cycle_1 |
254 | 254 | ||
255 | fld1 |
255 | fld1 |
256 | fld dword[edi+offs_obj_y_max] |
256 | fld dword[edi+offs_obj_y_max] |
257 | fsub dword[edi+offs_obj_y_min] |
257 | fsub dword[edi+offs_obj_y_min] |
258 | fst dword[edi+offs_obj_y_centr] |
258 | fst dword[edi+offs_obj_y_centr] |
259 | fdivp ;1/size.y |
259 | fdivp ;1/size.y |
260 | fstp dword[edi+offs_obj_y_scale] |
260 | fstp dword[edi+offs_obj_y_scale] |
261 | 261 | ||
262 | fld dword[edi+offs_obj_y_centr] |
262 | fld dword[edi+offs_obj_y_centr] |
263 | fld1 |
263 | fld1 |
264 | fld1 |
264 | fld1 |
265 | faddp |
265 | faddp |
266 | fdivp ;centr.y = size.y/2 |
266 | fdivp ;centr.y = size.y/2 |
267 | fadd dword[edi+offs_obj_y_min] |
267 | fadd dword[edi+offs_obj_y_min] |
268 | fchs |
268 | fchs |
269 | fstp dword[edi+offs_obj_y_centr] |
269 | fstp dword[edi+offs_obj_y_centr] |
270 | 270 | ||
271 | mov ebx,[edi+offs_obj_poi_data] |
271 | mov ebx,[edi+offs_obj_poi_data] |
272 | mov esi,[edi+offs_obj_poi_count] |
272 | mov esi,[edi+offs_obj_poi_count] |
273 | align 4 |
273 | align 4 |
274 | .cycle_2: ;à ¡®â á ª®®à¤¨ ⮩ z |
274 | .cycle_2: ;à ¡®â á ª®®à¤¨ ⮩ z |
275 | fld dword[ebx+8] |
275 | fld dword[ebx+8] |
276 | fld dword[edi+offs_obj_z_min] |
276 | fld dword[edi+offs_obj_z_min] |
277 | fcomp |
277 | fcomp |
278 | fstsw ax |
278 | fstsw ax |
279 | sahf |
279 | sahf |
280 | jb @f |
280 | jb @f |
281 | mov eax,[ebx+8] |
281 | mov eax,[ebx+8] |
282 | mov [edi+offs_obj_z_min],eax |
282 | mov [edi+offs_obj_z_min],eax |
283 | ffree st0 |
283 | ffree st0 |
284 | fincstp |
284 | fincstp |
285 | jmp .next_z |
285 | jmp .next_z |
286 | @@: |
286 | @@: |
287 | fld dword[edi+offs_obj_z_max] |
287 | fld dword[edi+offs_obj_z_max] |
288 | fcompp |
288 | fcompp |
289 | fstsw ax |
289 | fstsw ax |
290 | sahf |
290 | sahf |
291 | ja .next_z |
291 | ja .next_z |
292 | mov eax,[ebx+8] |
292 | mov eax,[ebx+8] |
293 | mov [edi+offs_obj_z_max],eax |
293 | mov [edi+offs_obj_z_max],eax |
294 | .next_z: |
294 | .next_z: |
295 | 295 | ||
296 | add ebx,12 |
296 | add ebx,12 |
297 | dec esi |
297 | dec esi |
298 | jnz .cycle_2 |
298 | jnz .cycle_2 |
299 | 299 | ||
300 | fld1 |
300 | fld1 |
301 | fld dword[edi+offs_obj_z_max] |
301 | fld dword[edi+offs_obj_z_max] |
302 | fsub dword[edi+offs_obj_z_min] |
302 | fsub dword[edi+offs_obj_z_min] |
303 | fst dword[edi+offs_obj_z_centr] |
303 | fst dword[edi+offs_obj_z_centr] |
304 | fdivp ;1/size.z |
304 | fdivp ;1/size.z |
305 | fstp dword[edi+offs_obj_z_scale] |
305 | fstp dword[edi+offs_obj_z_scale] |
306 | 306 | ||
307 | fld dword[edi+offs_obj_z_centr] |
307 | fld dword[edi+offs_obj_z_centr] |
308 | fld1 |
308 | fld1 |
309 | fld1 |
309 | fld1 |
310 | faddp |
310 | faddp |
311 | fdivp ;centr.z = size.z/2 |
311 | fdivp ;centr.z = size.z/2 |
312 | fadd dword[edi+offs_obj_z_min] |
312 | fadd dword[edi+offs_obj_z_min] |
313 | fchs |
313 | fchs |
314 | fstp dword[edi+offs_obj_z_centr] |
314 | fstp dword[edi+offs_obj_z_centr] |
315 | 315 | ||
316 | ; 室¨¬ à ¤¨ãá ¤«ï áä¥àë |
316 | ; 室¨¬ à ¤¨ãá ¤«ï áä¥àë |
317 | fld dword[edi+offs_obj_x_max] |
317 | fld dword[edi+offs_obj_x_max] |
318 | fsub dword[edi+offs_obj_x_min] |
318 | fsub dword[edi+offs_obj_x_min] |
319 | fld dword[edi+offs_obj_y_max] |
319 | fld dword[edi+offs_obj_y_max] |
320 | fsub dword[edi+offs_obj_y_min] |
320 | fsub dword[edi+offs_obj_y_min] |
321 | faddp |
321 | faddp |
322 | fild dword[rad_c] |
322 | fild dword[rad_c] |
323 | fdivp ;radius=(size.x+size.y)/rad_c |
323 | fdivp ;radius=(size.x+size.y)/rad_c |
324 | fstp dword[sph_radius] |
324 | fstp dword[sph_radius] |
325 | 325 | ||
326 | ;¤¥« ¥¬ ®¤¨ ª®¢ë© ¬ áèâ ¡ ¯® ®áï¬ x ¨ y, çâ®-¡ë ¥ àãè «¨áì ¯à®¯®à樨 ¨§®¡à ¦¥¨ï |
326 | ;¤¥« ¥¬ ®¤¨ ª®¢ë© ¬ áèâ ¡ ¯® ®áï¬ x ¨ y, çâ®-¡ë ¥ àãè «¨áì ¯à®¯®à樨 ¨§®¡à ¦¥¨ï |
327 | fld dword[edi+offs_obj_y_scale] |
327 | fld dword[edi+offs_obj_y_scale] |
328 | fdiv dword[ratio] ;¯à¨¢¥¤¥¨¥ ¬ áèâ ¡ ¯® ®á¨ y ãç¨âë¢ ï çâ® ¯® ¢ëá®â¥ íªà ¬¥ìè¥ |
328 | fdiv dword[ratio] ;¯à¨¢¥¤¥¨¥ ¬ áèâ ¡ ¯® ®á¨ y ãç¨âë¢ ï çâ® ¯® ¢ëá®â¥ íªà ¬¥ìè¥ |
329 | fcomp dword[edi+offs_obj_x_scale] |
329 | fcomp dword[edi+offs_obj_x_scale] |
330 | fstsw ax |
330 | fstsw ax |
331 | sahf |
331 | sahf |
332 | jb @f |
332 | jb @f |
333 | ;ᦠ⨥ ¬ áèâ ¡ ¯® y |
333 | ;ᦠ⨥ ¬ áèâ ¡ ¯® y |
334 | fld dword[edi+offs_obj_x_scale] |
334 | fld dword[edi+offs_obj_x_scale] |
335 | fmul dword[ratio] |
335 | fmul dword[ratio] |
336 | fstp dword[edi+offs_obj_y_scale] ;¬ áèâ ¡ ¯® ®á¨ y = ¬ áèâ ¡ ¯® ®á¨ x |
336 | fstp dword[edi+offs_obj_y_scale] ;¬ áèâ ¡ ¯® ®á¨ y = ¬ áèâ ¡ ¯® ®á¨ x |
337 | jmp .end |
337 | jmp .end |
338 | @@: |
338 | @@: |
339 | ;ᦠ⨥ ¬ áèâ ¡ ¯® x >...< |
339 | ;ᦠ⨥ ¬ áèâ ¡ ¯® x >...< |
340 | fld dword[edi+offs_obj_x_scale] |
340 | fld dword[edi+offs_obj_x_scale] |
341 | fdiv dword[ratio] |
341 | fdiv dword[ratio] |
342 | fstp dword[edi+offs_obj_x_scale] |
342 | fstp dword[edi+offs_obj_x_scale] |
343 | .end: |
343 | .end: |
344 | ret |
344 | ret |
345 | endp |
345 | endp |
- | 346 | ||
346 | 347 | ;description: |
|
347 | ;ãáâ ®¢ª ®à¬ «¥© ¤«ï £à ¥© |
348 | ; ¢ëç¨á«¥¨¥ ®à¬ «¥© ¤«ï £à ¥© ¯® 3-¬ ¢¥àè¨ ¬ |
348 | align 4 |
349 | align 4 |
349 | proc obj_set_normals, o_data:dword |
350 | proc obj_set_normals, o_data:dword |
350 | locals |
351 | locals |
351 | tbl1 rd 9 ;ebp-72 |
352 | tbl1 rd 9 ;ebp-72 |
352 | tbl2 rd 9 ;ebp-36 |
353 | tbl2 rd 9 ;ebp-36 |
353 | endl |
354 | endl |
354 | pushad |
355 | pushad |
355 | mov ecx,[o_data] |
356 | mov ecx,[o_data] |
356 | cmp dword[ecx+offs_obj_poi_count],0 |
357 | cmp dword[ecx+offs_obj_poi_count],0 |
357 | je .end |
358 | je .end |
358 | mov eax,[ecx+offs_obj_tri_count] |
359 | mov eax,[ecx+offs_obj_tri_count] |
359 | mov [ecx+offs_obj_normals_tri_count],eax ; ª ¦¤ë© âà¥ã£®«ì¨ª 1 ®à¬ «ì |
360 | mov [ecx+offs_obj_normals_tri_count],eax ; ª ¦¤ë© âà¥ã£®«ì¨ª 1 ®à¬ «ì |
360 | cmp eax,0 |
361 | cmp eax,0 |
361 | je .end |
362 | je .end |
362 | finit |
363 | finit |
363 | imul eax,12 |
364 | imul eax,12 |
364 | stdcall mem.Alloc, eax |
365 | stdcall mem.Alloc, eax |
365 | mov [ecx+offs_obj_normals_tri_data],eax |
366 | mov [ecx+offs_obj_normals_tri_data],eax |
366 | 367 | ||
367 | mov edx,[ecx+offs_obj_tri_data] |
368 | mov edx,[ecx+offs_obj_tri_data] |
368 | mov ebx,[ecx+offs_obj_tri_count] |
369 | mov ebx,[ecx+offs_obj_tri_count] |
369 | mov ecx,[ecx+offs_obj_poi_data] |
370 | mov ecx,[ecx+offs_obj_poi_data] |
370 | align 4 |
371 | align 4 |
371 | @@: |
372 | @@: |
372 | mov edi,ebp |
373 | mov edi,ebp |
373 | sub edi,36 ;tbl2 |
374 | sub edi,36 ;tbl2 |
374 | movzx esi,word[edx] ;1-ï ¢¥àè¨ |
375 | movzx esi,word[edx] ;1-ï ¢¥àè¨ |
375 | imul esi,12 |
376 | imul esi,12 |
376 | add esi,ecx |
377 | add esi,ecx |
377 | movsd |
378 | movsd |
378 | movsd |
379 | movsd |
379 | movsd |
380 | movsd |
380 | movzx esi,word[edx+2] ;2-ï ¢¥àè¨ |
381 | movzx esi,word[edx+2] ;2-ï ¢¥àè¨ |
381 | imul esi,12 |
382 | imul esi,12 |
382 | add esi,ecx |
383 | add esi,ecx |
383 | movsd |
384 | movsd |
384 | movsd |
385 | movsd |
385 | movsd |
386 | movsd |
386 | movzx esi,word[edx+4] ;3-ï ¢¥àè¨ |
387 | movzx esi,word[edx+4] ;3-ï ¢¥àè¨ |
387 | imul esi,12 |
388 | imul esi,12 |
388 | add esi,ecx |
389 | add esi,ecx |
389 | movsd |
390 | movsd |
390 | movsd |
391 | movsd |
391 | movsd |
392 | movsd |
392 | 393 | ||
393 | mov esi,ebp |
394 | mov esi,ebp |
394 | sub esi,72 ;tbl1 |
395 | sub esi,72 ;tbl1 |
395 | sub edi,36 ;tbl2 |
396 | sub edi,36 ;tbl2 |
396 | ;v1 <-> v2 |
397 | ;v1 <-> v2 |
397 | fld dword[edi+12] |
398 | fld dword[edi+12] |
398 | fsub dword[edi] |
399 | fsub dword[edi] |
399 | fstp dword[esi] ;(x1-x2) |
400 | fstp dword[esi] ;(x2-x1) |
400 | fld dword[edi+16] |
401 | fld dword[edi+16] |
401 | fsub dword[edi+4] |
402 | fsub dword[edi+4] |
402 | fstp dword[esi+4] ;(y1-y2) |
403 | fstp dword[esi+4] ;(y2-y1) |
403 | fld dword[edi+20] |
404 | fld dword[edi+20] |
404 | fsub dword[edi+8] |
405 | fsub dword[edi+8] |
405 | fstp dword[esi+8] ;(z1-z2) |
406 | fstp dword[esi+8] ;(z2-z1) |
406 | ;v2 <-> v3 |
407 | ;v2 <-> v3 |
407 | fld dword[edi+24] |
408 | fld dword[edi+12] |
408 | fsub dword[edi+12] |
409 | fsub dword[edi+24] |
409 | fstp dword[esi+12] ;(x2-x3) |
410 | fstp dword[esi+12] ;(x2-x3) |
410 | fld dword[edi+28] |
411 | fld dword[edi+16] |
411 | fsub dword[edi+16] |
412 | fsub dword[edi+28] |
412 | fstp dword[esi+16] ;(y2-y3) |
413 | fstp dword[esi+16] ;(y2-y3) |
413 | fld dword[edi+32] |
414 | fld dword[edi+20] |
414 | fsub dword[edi+20] |
415 | fsub dword[edi+32] |
415 | fstp dword[esi+20] ;(z2-z3) |
416 | fstp dword[esi+20] ;(z2-z3) |
416 | ;v3 <-> v1 |
417 | ;v3 <-> v1 |
417 | fld dword[edi] |
418 | fld dword[edi+24] |
418 | fsub dword[edi+24] |
419 | fsub dword[edi] |
419 | fstp dword[esi+24] ;(x3-x1) |
420 | fstp dword[esi+24] ;(x3-x1) |
420 | fld dword[edi+4] |
421 | fld dword[edi+28] |
421 | fsub dword[edi+28] |
422 | fsub dword[edi+4] |
422 | fstp dword[esi+28] ;(y3-y1) |
423 | fstp dword[esi+28] ;(y3-y1) |
423 | fld dword[edi+8] |
424 | fld dword[edi+32] |
424 | fsub dword[edi+32] |
425 | fsub dword[edi+8] |
425 | fstp dword[esi+32] ;(z3-z1) |
426 | fstp dword[esi+32] ;(z3-z1) |
426 | 427 | ||
427 | ;a1,a2,a3 |
428 | ;A = (y2-y1) * (z3-z1) - (z2-z1) * (y3-y1) |
428 | fld dword[esi+4] |
- | |
429 | fmul dword[esi+8] |
- | |
430 | fstp dword[edi] ;a1=(y1-y2)*(z1-z2) |
- | |
431 | fld dword[esi+16] |
- | |
432 | fmul dword[esi+20] |
- | |
433 | fstp dword[edi+4] ;a2=(y2-y3)*(z2-z3) |
- | |
434 | fld dword[esi+28] |
429 | fld dword[esi+4] |
435 | fmul dword[esi+32] |
430 | fmul dword[esi+32] |
- | 431 | fld dword[esi+8] |
|
436 | fstp dword[edi+8] ;a3=(y3-y1)*(z3-z1) |
432 | fmul dword[esi+28] |
- | 433 | fsubp |
|
- | 434 | fstp dword[eax] ;set normal.a |
|
- | 435 | ||
- | 436 | ;B = (z2-z1) * (x3-x1) - (x2-x1) * (z3-z1) |
|
- | 437 | fld dword[esi+8] |
|
437 | ;b1,b2,b3 |
438 | fmul dword[esi+24] |
438 | fld dword[esi] |
- | |
439 | fmul dword[esi+8] |
- | |
440 | fstp dword[edi+12] ;b1=(x1-x2)*(z1-z2) |
- | |
441 | fld dword[esi+12] |
- | |
442 | fmul dword[esi+20] |
- | |
443 | fstp dword[edi+16] ;b2=(x2-x3)*(z2-z3) |
- | |
444 | fld dword[esi+24] |
439 | fld dword[esi] |
- | 440 | fmul dword[esi+32] |
|
445 | fmul dword[esi+32] |
441 | fsubp |
- | 442 | fstp dword[eax+4] ;set normal.b |
|
446 | fstp dword[edi+20] ;b3=(x3-x1)*(z3-z1) |
443 | |
447 | ;c1,á2,á3 |
444 | ;C = (x2-x1) * (y3-y1) - (y2-y1) * (x3-x1) |
448 | fld dword[esi] |
- | |
449 | fmul dword[esi+4] |
- | |
450 | fstp dword[edi+24] ;c1=(x1-x2)*(y1-y2) |
- | |
451 | fld dword[esi+12] |
- | |
452 | fmul dword[esi+16] |
- | |
453 | fstp dword[edi+28] ;c2=(x2-x3)*(y2-y3) |
- | |
454 | fld dword[esi+24] |
445 | fld dword[esi] |
455 | fmul dword[esi+28] |
- | |
456 | fstp dword[edi+32] ;c3=(x3-x1)*(y3-y1) |
- | |
457 | - | ||
458 | fld dword[edi] |
- | |
459 | fadd dword[edi+4] |
- | |
460 | fadd dword[edi+8] |
- | |
461 | fstp dword[eax] ;set normal.a |
- | |
462 | fld dword[edi+12] |
- | |
463 | fadd dword[edi+16] |
- | |
464 | fadd dword[edi+20] |
- | |
465 | fstp dword[eax+4] ;set normal.b |
446 | fmul dword[esi+28] |
466 | fld dword[edi+24] |
447 | fld dword[esi+4] |
467 | fadd dword[edi+28] |
448 | fmul dword[esi+24] |
468 | fadd dword[edi+32] |
449 | fsubp |
469 | fstp dword[eax+8] ;set normal.c |
450 | fstp dword[eax+8] ;set normal.c |
470 | 451 | ||
471 | add edx,8 ;à §¬¥à âà¥ã£®«ì¨ª = (3 ¢¥àè¨ë (¯® 2¡) + ᢮©á⢠(2¡)) |
452 | add edx,8 ;à §¬¥à âà¥ã£®«ì¨ª = (3 ¢¥àè¨ë (¯® 2¡) + ᢮©á⢠(2¡)) |
472 | add eax,12 |
453 | add eax,12 |
473 | dec ebx |
454 | dec ebx |
474 | jnz @b |
455 | jnz @b |
475 | .end: |
456 | .end: |
476 | popad |
457 | popad |
477 | ret |
458 | ret |
478 | endp |
459 | endp |
479 | 460 | ||
480 | ; áâனª áâàãªâãàë 3d ®¡ê¥ªâ |
461 | ; áâனª áâàãªâãàë 3d ®¡ê¥ªâ |
481 | align 4 |
462 | align 4 |
482 | proc obj_init, o_data:dword |
463 | proc obj_init, o_data:dword |
483 | pushad |
464 | pushad |
484 | mov edi,[o_data] |
465 | mov edi,[o_data] |
485 | stdcall obj_clear_param, edi |
466 | stdcall obj_clear_param, edi |
486 | stdcall [tl_node_get_data],tree1 |
467 | stdcall [tl_node_get_data],tree1 |
487 | xor edx,edx |
468 | xor edx,edx |
488 | cmp eax,0 |
469 | cmp eax,0 |
489 | je .no_points |
470 | je .no_points |
490 | mov ebx,[eax] ;¯®«ãç ¥¬ § 票¥ ᤢ¨£ ¢ë¡à ®£® ¡«®ª |
471 | mov ebx,[eax] ;¯®«ãç ¥¬ § 票¥ ᤢ¨£ ¢ë¡à ®£® ¡«®ª |
491 | add ebx,[open_file_data] |
472 | add ebx,[open_file_data] |
492 | xor ecx,ecx |
473 | xor ecx,ecx |
493 | cmp word[ebx],CHUNK_OBJBLOCK |
474 | cmp word[ebx],CHUNK_OBJBLOCK |
494 | jne @f |
475 | jne @f |
495 | mov ecx,ebx |
476 | mov ecx,ebx |
496 | add ecx,dword[ecx+2] ;£à ¨æ ¡«®ª |
477 | add ecx,dword[ecx+2] ;£à ¨æ ¡«®ª |
497 | push eax edi |
478 | push eax edi |
498 | mov edi,ebx |
479 | mov edi,ebx |
499 | add edi,6 |
480 | add edi,6 |
500 | cld |
481 | cld |
501 | xor al,al |
482 | xor al,al |
502 | repne scasb ;¯à®¯ã᪠¨¬¥¨ ®¡ê¥ªâ |
483 | repne scasb ;¯à®¯ã᪠¨¬¥¨ ®¡ê¥ªâ |
503 | mov ebx,edi |
484 | mov ebx,edi |
504 | pop edi eax |
485 | pop edi eax |
505 | @@: |
486 | @@: |
506 | cmp word[ebx],CHUNK_TRIMESH |
487 | cmp word[ebx],CHUNK_TRIMESH |
507 | jne @f |
488 | jne @f |
508 | mov ecx,ebx |
489 | mov ecx,ebx |
509 | add ecx,dword[ecx+2] ;£à ¨æ ¡«®ª |
490 | add ecx,dword[ecx+2] ;£à ¨æ ¡«®ª |
510 | add ebx,6 |
491 | add ebx,6 |
511 | @@: |
492 | @@: |
512 | cmp word[ebx],CHUNK_VERTLIST |
493 | cmp word[ebx],CHUNK_VERTLIST |
513 | jne .no_points |
494 | jne .no_points |
514 | mov esi,ebx |
495 | mov esi,ebx |
515 | movzx edx,word[ebx+6] ;ª®««¨ç¥á⢮ â®ç¥ª |
496 | movzx edx,word[ebx+6] ;ª®««¨ç¥á⢮ â®ç¥ª |
516 | add ebx,8 |
497 | add ebx,8 |
517 | mov [edi+offs_obj_poi_data],ebx |
498 | mov [edi+offs_obj_poi_data],ebx |
518 | mov [edi+offs_obj_poi_count],edx |
499 | mov [edi+offs_obj_poi_count],edx |
519 | 500 | ||
520 | .cycle_0: ;横« ¤«ï ¯®¨áª âà¥ã£®«ì¨ª®¢ |
501 | .cycle_0: ;横« ¤«ï ¯®¨áª âà¥ã£®«ì¨ª®¢ |
521 | add esi,dword[esi+2] |
502 | add esi,dword[esi+2] |
522 | cmp word[esi],CHUNK_FACELIST |
503 | cmp word[esi],CHUNK_FACELIST |
523 | je @f |
504 | je @f |
524 | cmp ecx,esi |
505 | cmp ecx,esi |
525 | jg .cycle_0 ;¯®ª ¥ ¤®á⨣ãâ £à¨æ áâ à襣® ¡«®ª |
506 | jg .cycle_0 ;¯®ª ¥ ¤®á⨣ãâ £à¨æ áâ à襣® ¡«®ª |
526 | jmp .end_points ;¥á«¨ ¥ 諨 âà¥ã£®«ì¨ª¨ |
507 | jmp .end_points ;¥á«¨ ¥ 諨 âà¥ã£®«ì¨ª¨ |
527 | @@: |
508 | @@: |
528 | ;¥á«¨ 諨 âà¥ã£®«ì¨ª¨ |
509 | ;¥á«¨ 諨 âà¥ã£®«ì¨ª¨ |
529 | movzx edx,word[esi+6] |
510 | movzx edx,word[esi+6] |
530 | mov [edi+offs_obj_tri_count],edx |
511 | mov [edi+offs_obj_tri_count],edx |
531 | add esi,8 ;2+4+2 (chunk+size+count) |
512 | add esi,8 ;2+4+2 (chunk+size+count) |
532 | mov [edi+offs_obj_tri_data],esi |
513 | mov [edi+offs_obj_tri_data],esi |
533 | 514 | ||
534 | ;¯®¨áª ¬ â¥à¨ «®¢ £à ¥© |
515 | ;¯®¨áª ¬ â¥à¨ «®¢ £à ¥© |
535 | shl edx,3 |
516 | shl edx,3 |
536 | add esi,edx |
517 | add esi,edx |
537 | cmp word[esi],CHUNK_FACEMAT |
518 | cmp word[esi],CHUNK_FACEMAT |
538 | jne .end_points |
519 | jne .end_points |
539 | mov [edi+offs_obj_mat1_data],esi |
520 | mov [edi+offs_obj_mat1_data],esi |
540 | .end_points: |
521 | .end_points: |
541 | 522 | ||
542 | stdcall obj_set_sizes, edi |
523 | stdcall obj_set_sizes, edi |
543 | stdcall obj_set_normals, edi |
524 | stdcall obj_set_normals, edi |
544 | if version_edit eq 0 |
525 | if version_edit eq 0 |
545 | stdcall draw_3d, edi |
526 | stdcall draw_3d, edi |
546 | end if |
527 | end if |
547 | .no_points: |
528 | .no_points: |
548 | popad |
529 | popad |
549 | ret |
530 | ret |
550 | endp |
531 | endp |
551 | 532 | ||
552 | ; áâனª ¬ â¥à¨ « |
533 | ; áâனª ¬ â¥à¨ « |
553 | ;input: |
534 | ;input: |
554 | ; m_data - 㪠§ â¥«ì § ¯®«ï¥¬ãî áâàãªâãàã á ¬ â¥à¨ «®¬ |
535 | ; m_data - 㪠§ â¥«ì § ¯®«ï¥¬ãî áâàãªâãàã á ¬ â¥à¨ «®¬ |
555 | ; f_data - 㪠§ â¥«ì ¡«®ª CHUNK_MATERIAL ¨§ ä ©« 3ds |
536 | ; f_data - 㪠§ â¥«ì ¡«®ª CHUNK_MATERIAL ¨§ ä ©« 3ds |
556 | align 4 |
537 | align 4 |
557 | proc mat_init, m_data:dword, f_data:dword |
538 | proc mat_init, m_data:dword, f_data:dword |
558 | pushad |
539 | pushad |
559 | mov edi,[m_data] |
540 | mov edi,[m_data] |
560 | 541 | ||
561 | ;... clear edi ... |
542 | ;... clear edi ... |
562 | mov dword[edi+offs_mat_name],0 |
543 | mov dword[edi+offs_mat_name],0 |
563 | mov dword[edi+offs_mat_col_ambient],0 |
544 | mov dword[edi+offs_mat_col_ambient],0 |
564 | mov dword[edi+offs_mat_col_diffuse],0 |
545 | mov dword[edi+offs_mat_col_diffuse],0 |
565 | mov dword[edi+offs_mat_col_specular],0 |
546 | mov dword[edi+offs_mat_col_specular],0 |
566 | 547 | ||
567 | xor edx,edx |
548 | xor edx,edx |
568 | mov ebx,[f_data] |
549 | mov ebx,[f_data] |
569 | xor ecx,ecx |
550 | xor ecx,ecx |
570 | cmp word[ebx],CHUNK_MATERIAL |
551 | cmp word[ebx],CHUNK_MATERIAL |
571 | jne .no_material |
552 | jne .no_material |
572 | mov ecx,ebx |
553 | mov ecx,ebx |
573 | add ecx,dword[ecx+2] ;£à ¨æ ¡«®ª |
554 | add ecx,dword[ecx+2] ;£à ¨æ ¡«®ª |
574 | add ebx,6 |
555 | add ebx,6 |
575 | cmp word[ebx],CHUNK_MATNAME |
556 | cmp word[ebx],CHUNK_MATNAME |
576 | jne .no_material |
557 | jne .no_material |
577 | ;*** (0) *** |
558 | ;*** (0) *** |
578 | mov esi,ebx |
559 | mov esi,ebx |
579 | add ebx,6 |
560 | add ebx,6 |
580 | mov [edi+offs_mat_name],ebx |
561 | mov [edi+offs_mat_name],ebx |
581 | sub ebx,6 |
562 | sub ebx,6 |
582 | ;*** (1) *** |
563 | ;*** (1) *** |
583 | .cycle_0: ;横« ¤«ï ¯®¨áª 梥⠬ â¥à¨ « |
564 | .cycle_0: ;横« ¤«ï ¯®¨áª 梥⠬ â¥à¨ « |
584 | add esi,dword[esi+2] |
565 | add esi,dword[esi+2] |
585 | cmp word[esi],0xa010 |
566 | cmp word[esi],0xa010 |
586 | je @f |
567 | je @f |
587 | cmp ecx,esi |
568 | cmp ecx,esi |
588 | jg .cycle_0 ;¯®ª ¥ ¤®á⨣ãâ £à¨æ áâ à襣® ¡«®ª |
569 | jg .cycle_0 ;¯®ª ¥ ¤®á⨣ãâ £à¨æ áâ à襣® ¡«®ª |
589 | jmp .end_material ;¥á«¨ ¥ 諨 梥⠬ â¥à¨ « |
570 | jmp .end_material ;¥á«¨ ¥ 諨 梥⠬ â¥à¨ « |
590 | @@: |
571 | @@: |
591 | ;¥á«¨ 諨 梥⠬ â¥à¨ « |
572 | ;¥á«¨ 諨 梥⠬ â¥à¨ « |
592 | add esi,6 |
573 | add esi,6 |
593 | cmp word[esi],0x0011 |
574 | cmp word[esi],0x0011 |
594 | jne .end_material |
575 | jne .end_material |
595 | add esi,6 |
576 | add esi,6 |
596 | mov dl,byte[esi] |
577 | mov dl,byte[esi] |
597 | mov [edi+offs_mat_col_ambient+2],dl |
578 | mov [edi+offs_mat_col_ambient+2],dl |
598 | mov dx,word[esi+1] |
579 | mov dx,word[esi+1] |
599 | ror dx,8 |
580 | ror dx,8 |
600 | mov [edi+offs_mat_col_ambient],dx |
581 | mov [edi+offs_mat_col_ambient],dx |
601 | ;*** (2) *** |
582 | ;*** (2) *** |
602 | mov esi,ebx |
583 | mov esi,ebx |
603 | .cycle_1: ;横« ¤«ï ¯®¨áª 梥⠬ â¥à¨ « |
584 | .cycle_1: ;横« ¤«ï ¯®¨áª 梥⠬ â¥à¨ « |
604 | add esi,dword[esi+2] |
585 | add esi,dword[esi+2] |
605 | cmp word[esi],0xa020 |
586 | cmp word[esi],0xa020 |
606 | je @f |
587 | je @f |
607 | cmp ecx,esi |
588 | cmp ecx,esi |
608 | jg .cycle_1 ;¯®ª ¥ ¤®á⨣ãâ £à¨æ áâ à襣® ¡«®ª |
589 | jg .cycle_1 ;¯®ª ¥ ¤®á⨣ãâ £à¨æ áâ à襣® ¡«®ª |
609 | jmp .end_material ;¥á«¨ ¥ 諨 梥⠬ â¥à¨ « |
590 | jmp .end_material ;¥á«¨ ¥ 諨 梥⠬ â¥à¨ « |
610 | @@: |
591 | @@: |
611 | ;¥á«¨ 諨 梥⠬ â¥à¨ « |
592 | ;¥á«¨ 諨 梥⠬ â¥à¨ « |
612 | add esi,6 |
593 | add esi,6 |
613 | cmp word[esi],0x0011 |
594 | cmp word[esi],0x0011 |
614 | jne .end_material |
595 | jne .end_material |
615 | add esi,6 |
596 | add esi,6 |
616 | mov dl,byte[esi] |
597 | mov dl,byte[esi] |
617 | mov [edi+offs_mat_col_diffuse+2],dl |
598 | mov [edi+offs_mat_col_diffuse+2],dl |
618 | mov dx,word[esi+1] |
599 | mov dx,word[esi+1] |
619 | ror dx,8 |
600 | ror dx,8 |
620 | mov [edi+offs_mat_col_diffuse],dx |
601 | mov [edi+offs_mat_col_diffuse],dx |
621 | ;*** (3) *** |
602 | ;*** (3) *** |
622 | mov esi,ebx |
603 | mov esi,ebx |
623 | .cycle_2: ;横« ¤«ï ¯®¨áª 梥⠬ â¥à¨ « |
604 | .cycle_2: ;横« ¤«ï ¯®¨áª 梥⠬ â¥à¨ « |
624 | add esi,dword[esi+2] |
605 | add esi,dword[esi+2] |
625 | cmp word[esi],0xa030 |
606 | cmp word[esi],0xa030 |
626 | je @f |
607 | je @f |
627 | cmp ecx,esi |
608 | cmp ecx,esi |
628 | jg .cycle_2 ;¯®ª ¥ ¤®á⨣ãâ £à¨æ áâ à襣® ¡«®ª |
609 | jg .cycle_2 ;¯®ª ¥ ¤®á⨣ãâ £à¨æ áâ à襣® ¡«®ª |
629 | jmp .end_material ;¥á«¨ ¥ 諨 梥⠬ â¥à¨ « |
610 | jmp .end_material ;¥á«¨ ¥ 諨 梥⠬ â¥à¨ « |
630 | @@: |
611 | @@: |
631 | ;¥á«¨ 諨 梥⠬ â¥à¨ « |
612 | ;¥á«¨ 諨 梥⠬ â¥à¨ « |
632 | add esi,6 |
613 | add esi,6 |
633 | cmp word[esi],0x0011 |
614 | cmp word[esi],0x0011 |
634 | jne .end_material |
615 | jne .end_material |
635 | add esi,6 |
616 | add esi,6 |
636 | mov dl,byte[esi] |
617 | mov dl,byte[esi] |
637 | mov [edi+offs_mat_col_specular+2],dl |
618 | mov [edi+offs_mat_col_specular+2],dl |
638 | mov dx,word[esi+1] |
619 | mov dx,word[esi+1] |
639 | ror dx,8 |
620 | ror dx,8 |
640 | mov [edi+offs_mat_col_specular],dx |
621 | mov [edi+offs_mat_col_specular],dx |
641 | 622 | ||
642 | .end_material: |
623 | .end_material: |
643 | .no_material: |
624 | .no_material: |
644 | popad |
625 | popad |
645 | ret |
626 | ret |
646 | endp |
627 | endp |
647 | 628 | ||
648 | align 4 |
629 | align 4 |
649 | proc buf_draw_beg uses eax, buf:dword |
630 | proc buf_draw_beg uses eax, buf:dword |
650 | mov eax,[buf] |
631 | mov eax,[buf] |
651 | stdcall [buf2d_clear], eax, [eax+16] ;ç¨á⨬ ¡ãä¥à |
632 | stdcall [buf2d_clear], eax, [eax+16] ;ç¨á⨬ ¡ãä¥à |
652 | stdcall [buf2d_draw_text], eax, buf_1,txt_open_3ds,5,5,0xff |
633 | stdcall [buf2d_draw_text], eax, buf_1,txt_open_3ds,5,5,0xff |
653 | stdcall [buf2d_draw_text], eax, buf_1,openfile_path,5,15,0xff |
634 | stdcall [buf2d_draw_text], eax, buf_1,openfile_path,5,15,0xff |
654 | cmp dword[level_stack],FILE_ERROR_CHUNK_SIZE ;¢®§¬®¦ ®è¨¡ª ä ©« |
635 | cmp dword[level_stack],FILE_ERROR_CHUNK_SIZE ;¢®§¬®¦ ®è¨¡ª ä ©« |
655 | jne @f |
636 | jne @f |
656 | stdcall [buf2d_draw_text], eax, buf_1,txt_3ds_err_sizes,5,25,0xff0000 |
637 | stdcall [buf2d_draw_text], eax, buf_1,txt_3ds_err_sizes,5,25,0xff0000 |
657 | @@: |
638 | @@: |
658 | ret |
639 | ret |
659 | endp |
640 | endp |
660 | 641 | ||
661 | ;à¨á®¢ ¨¥ ¬ â¥à¨ « |
642 | ;à¨á®¢ ¨¥ ¬ â¥à¨ « |
662 | align 4 |
643 | align 4 |
663 | proc draw_material uses edi, m_data:dword |
644 | proc draw_material uses edi, m_data:dword |
664 | mov edi,[m_data] |
645 | mov edi,[m_data] |
665 | stdcall buf_draw_beg, buf_ogl |
646 | stdcall buf_draw_beg, buf_ogl |
666 | stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_afff,5,35,0xff |
647 | stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_afff,5,35,0xff |
667 | 648 | ||
668 | stdcall [buf2d_draw_text], buf_ogl,buf_1,[edi+offs_mat_name],15,45,0 ;¨¬ï ¬ â¥à¨ « |
649 | stdcall [buf2d_draw_text], buf_ogl,buf_1,[edi+offs_mat_name],15,45,0 ;¨¬ï ¬ â¥à¨ « |
669 | stdcall draw_color, [edi+offs_mat_col_ambient], txt_a010,2,55 ;®ªà㦠î騩 梥â |
650 | stdcall draw_color, [edi+offs_mat_col_ambient], txt_a010,2,55 ;®ªà㦠î騩 梥â |
670 | stdcall draw_color, [edi+offs_mat_col_diffuse], txt_a020,2,75 ;¤¨äã§ë© 梥â |
651 | stdcall draw_color, [edi+offs_mat_col_diffuse], txt_a020,2,75 ;¤¨äã§ë© 梥â |
671 | stdcall draw_color, [edi+offs_mat_col_specular],txt_a030,2,95 ;§¥àª «ìë© æ¢¥â |
652 | stdcall draw_color, [edi+offs_mat_col_specular],txt_a030,2,95 ;§¥àª «ìë© æ¢¥â |
672 | 653 | ||
673 | stdcall [buf2d_draw], buf_ogl |
654 | stdcall [buf2d_draw], buf_ogl |
674 | ret |
655 | ret |
675 | endp |
656 | endp |
676 | 657 | ||
677 | align 4 |
658 | align 4 |
678 | proc draw_color uses eax ebx, color:dword, text:dword, c_x:dword, c_y:dword |
659 | proc draw_color uses eax ebx, color:dword, text:dword, c_x:dword, c_y:dword |
679 | mov eax,[c_x] |
660 | mov eax,[c_x] |
680 | mov ebx,[c_y] |
661 | mov ebx,[c_y] |
681 | ; ¯àאַ㣮«ì¨ª |
662 | ; ¯àאַ㣮«ì¨ª |
682 | inc ebx |
663 | inc ebx |
683 | stdcall [buf2d_filled_rect_by_size], buf_ogl,eax,ebx,30,17,[color] |
664 | stdcall [buf2d_filled_rect_by_size], buf_ogl,eax,ebx,30,17,[color] |
684 | dec ebx |
665 | dec ebx |
685 | stdcall [buf2d_rect_by_size], buf_ogl,eax,ebx,30,19, 0 |
666 | stdcall [buf2d_rect_by_size], buf_ogl,eax,ebx,30,19, 0 |
686 | ; ¯®¤¯¨á¨ |
667 | ; ¯®¤¯¨á¨ |
687 | add eax,33 |
668 | add eax,33 |
688 | stdcall [buf2d_draw_text], buf_ogl, buf_1,[text],eax,ebx,0 |
669 | stdcall [buf2d_draw_text], buf_ogl, buf_1,[text],eax,ebx,0 |
689 | add ebx,10 |
670 | add ebx,10 |
690 | stdcall hex_in_str, buffer,[color],6 |
671 | stdcall hex_in_str, buffer,[color],6 |
691 | mov byte[buffer+6],0 |
672 | mov byte[buffer+6],0 |
692 | stdcall [buf2d_draw_text], buf_ogl, buf_1,buffer,eax,ebx,0 |
673 | stdcall [buf2d_draw_text], buf_ogl, buf_1,buffer,eax,ebx,0 |
693 | ret |
674 | ret |
694 | endp |
675 | endp |
695 | 676 | ||
696 | ;à¨á®¢ ¨¥ â®ç¥ª ¢ 3d |
677 | ;à¨á®¢ ¨¥ â®ç¥ª ¢ 3d |
697 | align 4 |
678 | align 4 |
698 | proc draw_3d uses eax ebx ecx edi, o_data:dword |
679 | proc draw_3d uses eax ebx ecx edi, o_data:dword |
699 | mov edi,[o_data] |
680 | mov edi,[o_data] |
700 | if 0 ;debug |
681 | if 0 ;debug |
701 | stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT |
682 | stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT |
702 | mov eax,[edi+offs_obj_poi_data] |
683 | mov eax,[edi+offs_obj_poi_data] |
703 | stdcall convert_int_to_str, txt_select_vert.count,16 |
684 | stdcall convert_int_to_str, txt_select_vert.count,16 |
704 | stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_select_vert,5,3,[color_select] |
685 | stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_select_vert,5,3,[color_select] |
705 | stdcall [kosglSwapBuffers] |
686 | stdcall [kosglSwapBuffers] |
706 | jmp .end_f |
687 | jmp .end_f |
707 | end if |
688 | end if |
708 | cmp dword[edi+offs_obj_poi_count],2 |
689 | cmp dword[edi+offs_obj_poi_count],2 |
709 | jl .end_f |
690 | jl .end_f |
710 | stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;®ç¨á⨬ ¡ãä¥à 梥⠨ £«ã¡¨ë |
691 | stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;®ç¨á⨬ ¡ãä¥à 梥⠨ £«ã¡¨ë |
711 | stdcall [glPushMatrix] |
692 | stdcall [glPushMatrix] |
712 | bt dword[draw_mode],bit_light |
693 | bt dword[draw_mode],bit_light |
713 | jnc @f |
694 | jnc @f |
714 | call SetLight |
695 | call SetLight |
715 | jmp .end_l |
696 | jmp .end_l |
716 | @@: |
697 | @@: |
717 | stdcall [glDisable],GL_LIGHTING |
698 | stdcall [glDisable],GL_LIGHTING |
718 | .end_l: |
699 | .end_l: |
719 | stdcall [glTranslatef], 0.0,0.0,0.5 ;correct for z |
700 | stdcall [glTranslatef], 0.0,0.0,0.5 ;correct for z |
720 | stdcall [glScalef], [edi+offs_obj_x_scale],[edi+offs_obj_y_scale],[edi+offs_obj_z_scale] |
701 | stdcall [glScalef], [edi+offs_obj_x_scale],[edi+offs_obj_y_scale],[edi+offs_obj_z_scale] |
721 | stdcall [glScalef], 1.0,1.0,0.7 ;correct for z |
702 | stdcall [glScalef], 1.0,1.0,0.7 ;correct for z |
722 | stdcall [glRotatef], [angle_z],0.0,0.0,1.0 |
703 | stdcall [glRotatef], [angle_z],0.0,0.0,1.0 |
723 | stdcall [glRotatef], [angle_y],0.0,1.0,0.0 |
704 | stdcall [glRotatef], [angle_y],0.0,1.0,0.0 |
724 | stdcall [glRotatef], [angle_x],1.0,0.0,0.0 |
705 | stdcall [glRotatef], [angle_x],1.0,0.0,0.0 |
725 | stdcall [glTranslatef], [edi+offs_obj_x_centr],[edi+offs_obj_y_centr],[edi+offs_obj_z_centr] |
706 | stdcall [glTranslatef], [edi+offs_obj_x_centr],[edi+offs_obj_y_centr],[edi+offs_obj_z_centr] |
726 | 707 | ||
727 | if version_edit eq 0 |
708 | if version_edit eq 0 |
728 | ;à¨á®¢ ¨¥ £à ¥© á ¨á¯®«ì§®¢ ¨¥¬ 梥⮢ ¬ â¥à¨ «®¢ |
709 | ;à¨á®¢ ¨¥ £à ¥© á ¨á¯®«ì§®¢ ¨¥¬ 梥⮢ ¬ â¥à¨ «®¢ |
729 | bt dword[draw_mode],bit_faces_mat |
710 | bt dword[draw_mode],bit_faces_mat |
730 | jnc @f |
711 | jnc @f |
731 | mov eax,[edi+offs_obj_mat1_data] |
712 | mov eax,[edi+offs_obj_mat1_data] |
732 | .b_found: |
713 | .b_found: |
733 | cmp eax,0 |
714 | cmp eax,0 |
734 | je .end_triangles |
715 | je .end_triangles |
735 | mov ebx,eax |
716 | mov ebx,eax |
736 | stdcall get_mat_color, eax |
717 | stdcall get_mat_color, eax |
737 | stdcall draw_3d_faces_color, edi,ebx,eax |
718 | stdcall draw_3d_faces_color, edi,ebx,eax |
738 | stdcall found_mat_faces, ebx |
719 | stdcall found_mat_faces, ebx |
739 | jmp .b_found |
720 | jmp .b_found |
740 | @@: |
721 | @@: |
741 | end if |
722 | end if |
742 | 723 | ||
743 | ;à¨á®¢ ¨¥ â®ç¥ª |
724 | ;à¨á®¢ ¨¥ â®ç¥ª |
744 | bt dword[draw_mode],bit_vertexes |
725 | bt dword[draw_mode],bit_vertexes |
745 | jnc .end_points |
726 | jnc .end_points |
746 | stdcall [glColor3ub],[color_vert+2],[color_vert+1],[color_vert] |
727 | stdcall [glColor3ub],[color_vert+2],[color_vert+1],[color_vert] |
747 | stdcall [glBegin],GL_POINTS |
728 | stdcall [glBegin],GL_POINTS |
748 | mov eax,[edi+offs_obj_poi_data] |
729 | mov eax,[edi+offs_obj_poi_data] |
749 | mov ebx,[edi+offs_obj_poi_count] |
730 | mov ebx,[edi+offs_obj_poi_count] |
750 | @@: |
731 | @@: |
751 | stdcall [glVertex3f], [eax],[eax+4],[eax+8] |
732 | stdcall [glVertex3f], [eax],[eax+4],[eax+8] |
752 | add eax,12 |
733 | add eax,12 |
753 | dec ebx |
734 | dec ebx |
754 | jnz @b |
735 | jnz @b |
755 | stdcall [glEnd] |
736 | stdcall [glEnd] |
756 | .end_points: |
737 | .end_points: |
757 | 738 | ||
758 | if version_edit eq 1 |
739 | if version_edit eq 1 |
759 | ;à¨á®¢ ¨¥ ªâ¨¢®© â®çª¨ |
740 | ;à¨á®¢ ¨¥ ªâ¨¢®© â®çª¨ |
760 | stdcall [tl_node_get_data],tree3 |
741 | stdcall [tl_node_get_data],tree3 |
761 | cmp eax,0 |
742 | cmp eax,0 |
762 | je @f |
743 | je @f |
763 | ;¢ë¤¥«¥¨¥ ªâ¨¢®© â®çª¨ |
744 | ;¢ë¤¥«¥¨¥ ªâ¨¢®© â®çª¨ |
764 | mov eax,[eax] |
745 | mov eax,[eax] |
765 | 746 | ||
766 | stdcall [glBegin],GL_LINES |
747 | stdcall [glBegin],GL_LINES |
767 | stdcall [glColor3ub], [color_ox+2],[color_ox+1],[color_ox] |
748 | stdcall [glColor3ub], [color_ox+2],[color_ox+1],[color_ox] |
768 | stdcall [glVertex3f], [edi+offs_obj_x_min],[eax+4],[eax+8] |
749 | stdcall [glVertex3f], [edi+offs_obj_x_min],[eax+4],[eax+8] |
769 | stdcall [glVertex3f], [edi+offs_obj_x_max],[eax+4],[eax+8] |
750 | stdcall [glVertex3f], [edi+offs_obj_x_max],[eax+4],[eax+8] |
770 | stdcall [glColor3ub], [color_oy+2],[color_oy+1],[color_oy] |
751 | stdcall [glColor3ub], [color_oy+2],[color_oy+1],[color_oy] |
771 | stdcall [glVertex3f], [eax],[edi+offs_obj_y_min],[eax+8] |
752 | stdcall [glVertex3f], [eax],[edi+offs_obj_y_min],[eax+8] |
772 | stdcall [glVertex3f], [eax],[edi+offs_obj_y_max],[eax+8] |
753 | stdcall [glVertex3f], [eax],[edi+offs_obj_y_max],[eax+8] |
773 | stdcall [glColor3ub], [color_oz+2],[color_oz+1],[color_oz] |
754 | stdcall [glColor3ub], [color_oz+2],[color_oz+1],[color_oz] |
774 | stdcall [glVertex3f], [eax],[eax+4],[edi+offs_obj_z_min] |
755 | stdcall [glVertex3f], [eax],[eax+4],[edi+offs_obj_z_min] |
775 | stdcall [glVertex3f], [eax],[eax+4],[edi+offs_obj_z_max] |
756 | stdcall [glVertex3f], [eax],[eax+4],[edi+offs_obj_z_max] |
776 | stdcall [glEnd] |
757 | stdcall [glEnd] |
777 | 758 | ||
778 | stdcall [glColor3ub],[color_select+2],[color_select+1],[color_select] |
759 | stdcall [glColor3ub],[color_select+2],[color_select+1],[color_select] |
779 | stdcall [glPushMatrix] |
760 | stdcall [glPushMatrix] |
780 | stdcall [glTranslatef], [eax],[eax+4],[eax+8] |
761 | stdcall [glTranslatef], [eax],[eax+4],[eax+8] |
781 | stdcall [gluSphere], [qObj], [sph_radius], 8,8 |
762 | stdcall [gluSphere], [qObj], [sph_radius], 8,8 |
782 | stdcall [glPopMatrix] |
763 | stdcall [glPopMatrix] |
783 | @@: |
764 | @@: |
784 | 765 | ||
785 | ;à¨á®¢ ¨¥ ¢ë¤¥«¥ëå â®ç¥ª |
766 | ;à¨á®¢ ¨¥ ¢ë¤¥«¥ëå â®ç¥ª |
786 | cmp dword[obj_poi_sel_c],0 |
767 | cmp dword[obj_poi_sel_c],0 |
787 | je .end_select |
768 | je .end_select |
788 | mov ecx,dword[obj_poi_sel_c] |
769 | mov ecx,dword[obj_poi_sel_c] |
789 | stdcall [glColor3ub],[color_select+2],[color_select+1],[color_select] |
770 | stdcall [glColor3ub],[color_select+2],[color_select+1],[color_select] |
790 | stdcall dword[tl_node_poi_get_info], tree3,0 |
771 | stdcall dword[tl_node_poi_get_info], tree3,0 |
791 | @@: |
772 | @@: |
792 | cmp eax,0 |
773 | cmp eax,0 |
793 | je .end_select |
774 | je .end_select |
794 | mov ebx,eax |
775 | mov ebx,eax |
795 | cmp word[ebx],ID_ICON_POINT_SEL |
776 | cmp word[ebx],ID_ICON_POINT_SEL |
796 | jne .next_sel |
777 | jne .next_sel |
797 | stdcall [tl_node_poi_get_data], tree3,ebx |
778 | stdcall [tl_node_poi_get_data], tree3,ebx |
798 | mov eax,[eax] |
779 | mov eax,[eax] |
799 | stdcall [glPushMatrix] |
780 | stdcall [glPushMatrix] |
800 | stdcall [glTranslatef], [eax],[eax+4],[eax+8] |
781 | stdcall [glTranslatef], [eax],[eax+4],[eax+8] |
801 | stdcall [gluSphere], [qObj], [sph_radius], 4,4 |
782 | stdcall [gluSphere], [qObj], [sph_radius], 4,4 |
802 | stdcall [glPopMatrix] |
783 | stdcall [glPopMatrix] |
803 | dec ecx |
784 | dec ecx |
804 | jz .end_select |
785 | jz .end_select |
805 | .next_sel: |
786 | .next_sel: |
806 | stdcall dword[tl_node_poi_get_next_info], tree3,ebx |
787 | stdcall dword[tl_node_poi_get_next_info], tree3,ebx |
807 | jmp @b |
788 | jmp @b |
808 | .end_select: |
789 | .end_select: |
809 | end if |
790 | end if |
810 | 791 | ||
811 | ;à¨á®¢ ¨¥ £à ¥© |
792 | ;à¨á®¢ ¨¥ £à ¥© |
812 | bt dword[draw_mode],bit_faces |
793 | bt dword[draw_mode],bit_faces |
813 | jnc .end_triangles |
794 | jnc .end_triangles |
814 | cmp dword[edi+offs_obj_tri_count],0 |
795 | cmp dword[edi+offs_obj_tri_count],0 |
815 | je .end_triangles |
796 | je .end_triangles |
816 | cmp dword[edi+offs_obj_poi_count],0 |
797 | cmp dword[edi+offs_obj_poi_count],0 |
817 | je .end_triangles |
798 | je .end_triangles |
818 | bt dword[draw_mode],bit_faces_fill |
799 | bt dword[draw_mode],bit_faces_fill |
819 | jc @f |
800 | jc @f |
820 | push GL_LINE |
801 | push GL_LINE |
821 | jmp .end_0 |
802 | jmp .end_0 |
822 | @@: |
803 | @@: |
823 | push GL_FILL |
804 | push GL_FILL |
824 | .end_0: |
805 | .end_0: |
825 | stdcall [glPolygonMode], GL_FRONT_AND_BACK ;mode - 㦥 ¢ á⥪¥ |
806 | stdcall [glPolygonMode], GL_FRONT_AND_BACK ;mode - 㦥 ¢ á⥪¥ |
826 | stdcall [glColor3ub],[color_face+2],[color_face+1],[color_face] |
807 | stdcall [glColor3ub],[color_face+2],[color_face+1],[color_face] |
827 | stdcall [glBegin],GL_TRIANGLES |
808 | stdcall [glBegin],GL_TRIANGLES |
828 | mov eax,[edi+offs_obj_tri_data] |
809 | mov eax,[edi+offs_obj_tri_data] |
829 | mov ecx,[edi+offs_obj_tri_count] |
810 | mov ecx,[edi+offs_obj_tri_count] |
830 | mov edx,[edi+offs_obj_normals_tri_data] |
811 | mov edx,[edi+offs_obj_normals_tri_data] |
831 | @@: |
812 | @@: |
832 | ; |
813 | ; |
833 | bt dword[draw_mode],bit_light |
814 | bt dword[draw_mode],bit_light |
834 | jnc .norm |
815 | jnc .norm |
835 | ;[obj_normals_tri_count] |
- | |
836 | stdcall [glNormal3fv], edx |
816 | stdcall [glNormal3fv], edx |
837 | add edx,12 |
817 | add edx,12 |
838 | .norm: |
818 | .norm: |
839 | ; |
819 | ; |
840 | movzx ebx,word[eax] ;1-ï ¢¥àè¨ |
820 | movzx ebx,word[eax] ;1-ï ¢¥àè¨ |
841 | imul ebx,12 |
821 | imul ebx,12 |
842 | add ebx,[edi+offs_obj_poi_data] |
822 | add ebx,[edi+offs_obj_poi_data] |
843 | stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8] |
823 | stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8] |
844 | movzx ebx,word[eax+2] ;2-ï ¢¥àè¨ |
824 | movzx ebx,word[eax+2] ;2-ï ¢¥àè¨ |
845 | imul ebx,12 |
825 | imul ebx,12 |
846 | add ebx,[edi+offs_obj_poi_data] |
826 | add ebx,[edi+offs_obj_poi_data] |
847 | stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8] |
827 | stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8] |
848 | movzx ebx,word[eax+4] ;3-ï ¢¥àè¨ |
828 | movzx ebx,word[eax+4] ;3-ï ¢¥àè¨ |
849 | imul ebx,12 |
829 | imul ebx,12 |
850 | add ebx,[edi+offs_obj_poi_data] |
830 | add ebx,[edi+offs_obj_poi_data] |
851 | stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8] |
831 | stdcall [glVertex3f], [ebx],[ebx+4],[ebx+8] |
852 | add eax,8 ;à §¬¥à âà¥ã£®«ì¨ª = (3 ¢¥àè¨ë (¯® 2¡) + ᢮©á⢠(2¡)) |
832 | add eax,8 ;à §¬¥à âà¥ã£®«ì¨ª = (3 ¢¥àè¨ë (¯® 2¡) + ᢮©á⢠(2¡)) |
853 | dec ecx |
833 | dec ecx |
854 | jnz @b |
834 | jnz @b |
855 | stdcall [glEnd] |
835 | stdcall [glEnd] |
856 | .end_triangles: |
836 | .end_triangles: |
857 | 837 | ||
858 | stdcall [glPopMatrix] |
838 | stdcall [glPopMatrix] |
859 | if version_edit eq 1 |
839 | if version_edit eq 1 |
860 | cmp dword[obj_poi_sel_c],0 |
840 | cmp dword[obj_poi_sel_c],0 |
861 | je @f |
841 | je @f |
862 | stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_select_vert,5,3,[color_select] |
842 | stdcall [buf2d_draw_text], buf_ogl, buf_1,txt_select_vert,5,3,[color_select] |
863 | @@: |
843 | @@: |
864 | end if |
844 | end if |
865 | stdcall [kosglSwapBuffers] |
845 | stdcall [kosglSwapBuffers] |
866 | .end_f: |
846 | .end_f: |
867 | ret |
847 | ret |
868 | endp |
848 | endp |
869 | 849 | ||
870 | align 4 |
850 | align 4 |
871 | SetLight: |
851 | SetLight: |
872 | stdcall [glLightfv], GL_LIGHT0, GL_POSITION, light_position |
852 | stdcall [glLightfv], GL_LIGHT0, GL_POSITION, light_position |
873 | stdcall [glLightfv], GL_LIGHT0, GL_SPOT_DIRECTION, light_dir |
853 | stdcall [glLightfv], GL_LIGHT0, GL_SPOT_DIRECTION, light_dir |
874 | 854 | ||
875 | stdcall [glLightfv], GL_LIGHT0, GL_DIFFUSE, white_light |
855 | stdcall [glLightfv], GL_LIGHT0, GL_DIFFUSE, white_light |
876 | stdcall [glLightfv], GL_LIGHT0, GL_SPECULAR, white_light |
856 | stdcall [glLightfv], GL_LIGHT0, GL_SPECULAR, white_light |
877 | 857 | ||
878 | stdcall [glEnable], GL_COLOR_MATERIAL |
858 | stdcall [glEnable], GL_COLOR_MATERIAL |
879 | stdcall [glColorMaterial], GL_FRONT, GL_AMBIENT_AND_DIFFUSE |
859 | stdcall [glColorMaterial], GL_FRONT, GL_AMBIENT_AND_DIFFUSE |
880 | stdcall [glMaterialfv], GL_FRONT, GL_SPECULAR, mat_specular |
860 | stdcall [glMaterialfv], GL_FRONT, GL_SPECULAR, mat_specular |
881 | stdcall [glMaterialf], GL_FRONT, GL_SHININESS, mat_shininess |
861 | stdcall [glMaterialf], GL_FRONT, GL_SHININESS, mat_shininess |
882 | stdcall [glLightModelfv], GL_LIGHT_MODEL_AMBIENT, lmodel_ambient |
862 | stdcall [glLightModelfv], GL_LIGHT_MODEL_AMBIENT, lmodel_ambient |
883 | 863 | ||
884 | stdcall [glEnable],GL_LIGHTING |
864 | stdcall [glEnable],GL_LIGHTING |
885 | stdcall [glEnable],GL_LIGHT0 |
865 | stdcall [glEnable],GL_LIGHT0 |
886 | ret |
866 | ret |
887 | 867 | ||
888 | ;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ¨ï ¢¥àè¨ |
868 | ;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ¨ï ¢¥àè¨ |
889 | align 4 |
869 | align 4 |
890 | mnu_vertexes_on: |
870 | mnu_vertexes_on: |
891 | or dword[draw_mode], 1 shl bit_vertexes |
871 | or dword[draw_mode], 1 shl bit_vertexes |
892 | and dword[draw_mode], not ((1 shl bit_faces)+(1 shl bit_faces_mat)) ;¢ëª«îç ¥¬ ०¨¬ë à¨á®¢ ¨ï, ª®â®àë¥ ¬®£ãâ ¬¥è âì |
872 | and dword[draw_mode], not ((1 shl bit_faces)+(1 shl bit_faces_mat)) ;¢ëª«îç ¥¬ ०¨¬ë à¨á®¢ ¨ï, ª®â®àë¥ ¬®£ãâ ¬¥è âì |
893 | call update_obj |
873 | call update_obj |
894 | ret |
874 | ret |
895 | 875 | ||
896 | ;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ¨ï ª ઠáëå £à ¥© |
876 | ;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ¨ï ª ઠáëå £à ¥© |
897 | align 4 |
877 | align 4 |
898 | mnu_edges_on: |
878 | mnu_edges_on: |
899 | or dword[draw_mode], 1 shl bit_faces |
879 | or dword[draw_mode], 1 shl bit_faces |
900 | and dword[draw_mode], not ((1 shl bit_vertexes)+(1 shl bit_faces_fill)+(1 shl bit_faces_mat)) |
880 | and dword[draw_mode], not ((1 shl bit_vertexes)+(1 shl bit_faces_fill)+(1 shl bit_faces_mat)) |
901 | call update_obj |
881 | call update_obj |
902 | ret |
882 | ret |
903 | 883 | ||
904 | ;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ¨ï ᯫ®èëå £à ¥© |
884 | ;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ¨ï ᯫ®èëå £à ¥© |
905 | align 4 |
885 | align 4 |
906 | mnu_faces_on: |
886 | mnu_faces_on: |
907 | or dword[draw_mode], (1 shl bit_faces)+(1 shl bit_faces_fill) |
887 | or dword[draw_mode], (1 shl bit_faces)+(1 shl bit_faces_fill) |
908 | and dword[draw_mode], not ((1 shl bit_vertexes)+(1 shl bit_faces_mat)) |
888 | and dword[draw_mode], not ((1 shl bit_vertexes)+(1 shl bit_faces_mat)) |
909 | call update_obj |
889 | call update_obj |
910 | ret |
890 | ret |
911 | 891 | ||
912 | ;¢ª«îç ¥¬ ¨«¨ ®âª«îç ¥¬ ®á¢¥é¥¨¥ |
892 | ;¢ª«îç ¥¬ ¨«¨ ®âª«îç ¥¬ ®á¢¥é¥¨¥ |
913 | align 4 |
893 | align 4 |
914 | mnu_light_on_off: |
894 | mnu_light_on_off: |
915 | xor dword[draw_mode], 1 shl bit_light |
895 | xor dword[draw_mode], 1 shl bit_light |
916 | call update_obj |
896 | call update_obj |
917 | ret |
897 | ret |
918 | 898 | ||
919 | align 4 |
899 | align 4 |
920 | mnu_reset_settings: |
900 | mnu_reset_settings: |
921 | mov dword[angle_x],0.0 |
901 | mov dword[angle_x],0.0 |
922 | mov dword[angle_y],0.0 |
902 | mov dword[angle_y],0.0 |
923 | mov dword[angle_z],0.0 |
903 | mov dword[angle_z],0.0 |
924 | m2m dword[draw_mode],dword[def_dr_mode] |
904 | m2m dword[draw_mode],dword[def_dr_mode] |
925 | call update_obj |
905 | call update_obj |
926 | ret |
906 | ret |
927 | 907 | ||
928 | if version_edit eq 1 |
908 | if version_edit eq 1 |
929 | 909 | ||
930 | align 4 |
910 | align 4 |
931 | update_obj: |
911 | update_obj: |
932 | stdcall draw_3d, o3d |
912 | stdcall draw_3d, o3d |
933 | ret |
913 | ret |
934 | 914 | ||
935 | else |
915 | else |
936 | 916 | ||
937 | ;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ¨ï ᯫ®èëå £à ¥© |
917 | ;¢ª«îç ¥¬ ०¨¬ à¨á®¢ ¨ï ᯫ®èëå £à ¥© |
938 | align 4 |
918 | align 4 |
939 | mnu_faces_mat: |
919 | mnu_faces_mat: |
940 | or dword[draw_mode], (1 shl bit_faces_mat) |
920 | or dword[draw_mode], (1 shl bit_faces_mat) |
941 | call update_obj |
921 | call update_obj |
942 | ret |
922 | ret |
943 | 923 | ||
944 | align 4 |
924 | align 4 |
945 | update_obj: |
925 | update_obj: |
946 | push eax ebx |
926 | push eax ebx |
947 | stdcall [tl_node_get_data],tree1 |
927 | stdcall [tl_node_get_data],tree1 |
948 | cmp eax,0 |
928 | cmp eax,0 |
949 | je @f |
929 | je @f |
950 | mov ebx,dword[eax] ;¯®«ãç ¥¬ § 票¥ ᤢ¨£ ¢ë¡à ®£® ¡«®ª ®â®á¨â¥«ì® ç « ä ©« |
930 | mov ebx,dword[eax] ;¯®«ãç ¥¬ § 票¥ ᤢ¨£ ¢ë¡à ®£® ¡«®ª ®â®á¨â¥«ì® ç « ä ©« |
951 | add ebx,dword[open_file_data] ;¯®«ãç ¥¬ § 票¥ ᤢ¨£ ¢ ¯ ¬ï⨠|
931 | add ebx,dword[open_file_data] ;¯®«ãç ¥¬ § 票¥ ᤢ¨£ ¢ ¯ ¬ï⨠|
952 | cmp word[ebx],CHUNK_OBJBLOCK |
932 | cmp word[ebx],CHUNK_OBJBLOCK |
953 | jne @f |
933 | jne @f |
954 | add eax,list_offs_obj3d |
934 | add eax,list_offs_obj3d |
955 | stdcall draw_3d,eax |
935 | stdcall draw_3d,eax |
956 | @@: |
936 | @@: |
957 | pop ebx eax |
937 | pop ebx eax |
958 | ret |
938 | ret |
959 | 939 | ||
960 | ;input: |
940 | ;input: |
961 | ; p_mat - 㪠§ â¥«ì ¤ ë¥ ¯à¥¤ë¤ã饣® ¬ â¥à¨ « |
941 | ; p_mat - 㪠§ â¥«ì ¤ ë¥ ¯à¥¤ë¤ã饣® ¬ â¥à¨ « |
962 | align 4 |
942 | align 4 |
963 | proc found_mat_faces uses ebx, p_mat:dword |
943 | proc found_mat_faces uses ebx, p_mat:dword |
964 | mov eax,[p_mat] |
944 | mov eax,[p_mat] |
965 | add eax,[eax+2] |
945 | add eax,[eax+2] |
966 | cmp word[eax],CHUNK_FACEMAT |
946 | cmp word[eax],CHUNK_FACEMAT |
967 | je @f |
947 | je @f |
968 | xor eax,eax |
948 | xor eax,eax |
969 | @@: |
949 | @@: |
970 | ret |
950 | ret |
971 | endp |
951 | endp |
972 | 952 | ||
973 | align 4 |
953 | align 4 |
974 | proc get_mat_color uses ebx ecx edx edi esi, p_mat:dword |
954 | proc get_mat_color uses ebx ecx edx edi esi, p_mat:dword |
975 | stdcall [tl_node_poi_get_info], tree1,0 |
955 | stdcall [tl_node_poi_get_info], tree1,0 |
976 | mov ecx,eax |
956 | mov ecx,eax |
977 | .cycle_0: |
957 | .cycle_0: |
978 | cmp ecx,0 |
958 | cmp ecx,0 |
979 | je .cycle_0_end |
959 | je .cycle_0_end |
980 | stdcall [tl_node_poi_get_data], tree1,ecx |
960 | stdcall [tl_node_poi_get_data], tree1,ecx |
981 | mov ebx,[eax] ;¯®«ãç ¥¬ § 票¥ ᤢ¨£ ¢ë¡à ®£® ¡«®ª |
961 | mov ebx,[eax] ;¯®«ãç ¥¬ § 票¥ ᤢ¨£ ¢ë¡à ®£® ¡«®ª |
982 | add ebx,[open_file_data] |
962 | add ebx,[open_file_data] |
983 | cmp word[ebx],CHUNK_MATERIAL |
963 | cmp word[ebx],CHUNK_MATERIAL |
984 | jne .end_add_p3 |
964 | jne .end_add_p3 |
985 | add eax,list_offs_obj3d |
965 | add eax,list_offs_obj3d |
986 | mov esi,[eax+offs_mat_name] |
966 | mov esi,[eax+offs_mat_name] |
987 | cmp esi,0 |
967 | cmp esi,0 |
988 | jne @f |
968 | jne @f |
989 | ;init material |
969 | ;init material |
990 | stdcall mat_init,eax,ebx |
970 | stdcall mat_init,eax,ebx |
991 | mov esi,[eax+offs_mat_name] |
971 | mov esi,[eax+offs_mat_name] |
992 | @@: |
972 | @@: |
993 | mov edi,[p_mat] |
973 | mov edi,[p_mat] |
994 | mov eax,5 |
974 | mov eax,5 |
995 | add edi,eax |
975 | add edi,eax |
996 | align 4 |
976 | align 4 |
997 | @@: |
977 | @@: |
998 | cmp al,0 |
978 | cmp al,0 |
999 | je .found |
979 | je .found |
1000 | lodsb |
980 | lodsb |
1001 | inc edi |
981 | inc edi |
1002 | cmp byte[edi],al |
982 | cmp byte[edi],al |
1003 | je @b |
983 | je @b |
1004 | .end_add_p3: |
984 | .end_add_p3: |
1005 | stdcall [tl_node_poi_get_next_info], tree1,ecx |
985 | stdcall [tl_node_poi_get_next_info], tree1,ecx |
1006 | mov ecx,eax ;¯¥à¥å®¤¨¬ ª á«¥¤ã饬ã 㧫ã |
986 | mov ecx,eax ;¯¥à¥å®¤¨¬ ª á«¥¤ã饬ã 㧫ã |
1007 | jmp .cycle_0 |
987 | jmp .cycle_0 |
1008 | .cycle_0_end: |
988 | .cycle_0_end: |
1009 | 989 | ||
1010 | .no_found: |
990 | .no_found: |
1011 | xor eax,eax |
991 | xor eax,eax |
1012 | jmp .end_f |
992 | jmp .end_f |
1013 | .found: |
993 | .found: |
1014 | stdcall [tl_node_poi_get_data], tree1,ecx |
994 | stdcall [tl_node_poi_get_data], tree1,ecx |
1015 | add eax,list_offs_obj3d |
995 | add eax,list_offs_obj3d |
1016 | mov eax,[eax+offs_mat_col_diffuse] |
996 | mov eax,[eax+offs_mat_col_diffuse] |
1017 | .end_f: |
997 | .end_f: |
1018 | ret |
998 | ret |
1019 | endp |
999 | endp |
1020 | 1000 | ||
1021 | align 4 |
1001 | align 4 |
1022 | proc draw_3d_faces_color o_data:dword, p_mat:dword, color:dword |
1002 | proc draw_3d_faces_color o_data:dword, p_mat:dword, color:dword |
1023 | pushad |
1003 | pushad |
1024 | stdcall [glPolygonMode], GL_FRONT_AND_BACK,GL_FILL |
1004 | stdcall [glPolygonMode], GL_FRONT_AND_BACK,GL_FILL |
1025 | stdcall [glColor3ub],[color+2],[color+1],[color] |
1005 | stdcall [glColor3ub],[color+2],[color+1],[color] |
1026 | stdcall [glBegin],GL_TRIANGLES |
1006 | stdcall [glBegin],GL_TRIANGLES |
1027 | mov edi,[o_data] |
1007 | mov edi,[o_data] |
1028 | mov esi,[p_mat] |
1008 | mov esi,[p_mat] |
1029 | add esi,6 |
1009 | add esi,6 |
1030 | @@: |
1010 | @@: |
1031 | lodsb |
1011 | lodsb |
1032 | cmp al,0 |
1012 | cmp al,0 |
1033 | jne @b |
1013 | jne @b |
1034 | movzx ecx,word[esi] ;ecx - ç¨á«® £à ¥© á ¤ ë¬ ¬ â¥à¨ «®¬ |
1014 | movzx ecx,word[esi] ;ecx - ç¨á«® £à ¥© á ¤ ë¬ ¬ â¥à¨ «®¬ |
1035 | mov edx,[edi+offs_obj_poi_data] |
1015 | mov edx,[edi+offs_obj_poi_data] |
1036 | align 4 |
1016 | align 4 |
1037 | @@: |
1017 | @@: |
1038 | add esi,2 |
1018 | add esi,2 |
1039 | ;word[esi] - ®¬¥à âà¥ã£®«ì¨ª |
1019 | ;word[esi] - ®¬¥à âà¥ã£®«ì¨ª |
1040 | movzx ebx,word[esi] |
1020 | movzx ebx,word[esi] |
- | 1021 | ;®à¬ «¨ ¤«ï ®á¢¥é¥¨ï |
|
- | 1022 | bt dword[draw_mode],bit_light |
|
- | 1023 | jnc .norm |
|
- | 1024 | mov eax,ebx |
|
- | 1025 | imul eax,12 |
|
- | 1026 | add eax,[edi+offs_obj_normals_tri_data] |
|
- | 1027 | stdcall [glNormal3fv], eax |
|
- | 1028 | .norm: |
|
- | 1029 | ||
1041 | shl ebx,3 |
1030 | shl ebx,3 |
1042 | add ebx,[edi+offs_obj_tri_data] |
1031 | add ebx,[edi+offs_obj_tri_data] |
1043 | 1032 | ||
1044 | movzx eax,word[ebx] ;1-ï ¢¥àè¨ |
1033 | movzx eax,word[ebx] ;1-ï ¢¥àè¨ |
1045 | imul eax,12 ;float(x,y,z) |
1034 | imul eax,12 ;float(x,y,z) |
1046 | add eax,edx |
1035 | add eax,edx |
1047 | stdcall [glVertex3f], [eax],[eax+4],[eax+8] |
1036 | stdcall [glVertex3f], [eax],[eax+4],[eax+8] |
1048 | 1037 | ||
1049 | movzx eax,word[ebx+2] ;2-ï ¢¥àè¨ |
1038 | movzx eax,word[ebx+2] ;2-ï ¢¥àè¨ |
1050 | imul eax,12 ;float(x,y,z) |
1039 | imul eax,12 ;float(x,y,z) |
1051 | add eax,edx |
1040 | add eax,edx |
1052 | stdcall [glVertex3f], [eax],[eax+4],[eax+8] |
1041 | stdcall [glVertex3f], [eax],[eax+4],[eax+8] |
1053 | 1042 | ||
1054 | movzx eax,word[ebx+4] ;3-ï ¢¥àè¨ |
1043 | movzx eax,word[ebx+4] ;3-ï ¢¥àè¨ |
1055 | imul eax,12 ;float(x,y,z) |
1044 | imul eax,12 ;float(x,y,z) |
1056 | add eax,edx |
1045 | add eax,edx |
1057 | stdcall [glVertex3f], [eax],[eax+4],[eax+8] |
1046 | stdcall [glVertex3f], [eax],[eax+4],[eax+8] |
1058 | 1047 | ||
1059 | dec ecx |
1048 | dec ecx |
1060 | jnz @b |
1049 | jnz @b |
1061 | stdcall [glEnd] |
1050 | stdcall [glEnd] |
1062 | 1051 | ||
1063 | .end_f: |
1052 | .end_f: |
1064 | popad |
1053 | popad |
1065 | ret |
1054 | ret |
1066 | endp |
1055 | endp |
1067 | 1056 | ||
1068 | end if |
1057 | end if |
1069 | 1058 | ||
1070 | align 4 |
1059 | align 4 |
1071 | draw_mode dd 0 ;०¨¬ à¨á®¢ ¨ï ®¡ê¥ªâ |
1060 | draw_mode dd 0 ;०¨¬ à¨á®¢ ¨ï ®¡ê¥ªâ |
1072 | def_dr_mode dd 0 ;०¨¬ à¨á®¢ ¨ï ¯® 㬮«ç ¨î |
1061 | def_dr_mode dd 0 ;०¨¬ à¨á®¢ ¨ï ¯® 㬮«ç ¨î |
1073 | delt_size dd 3.0 ;¨§¬¥¥¨¥ 㣫®¢ ¯à¨ ¯®¢®à®â å á ª«¨¢¨ âãàë |
1062 | delt_size dd 3.0 ;¨§¬¥¥¨¥ 㣫®¢ ¯à¨ ¯®¢®à®â å á ª«¨¢¨ âãàë |
1074 | mouse_drag dd 0 ;०¨¬ ¯®¢®à®â áæ¥ë ®â ¯¥à¥¬¥é¥¨¨ ªãàá®à ¬ëè¨ |
1063 | mouse_drag dd 0 ;०¨¬ ¯®¢®à®â áæ¥ë ®â ¯¥à¥¬¥é¥¨¨ ªãàá®à ¬ëè¨ |
1075 | mouse_x dd 0 |
1064 | mouse_x dd 0 |
1076 | mouse_y dd 0 |
1065 | mouse_y dd 0 |
1077 | sph_radius dd 0 ;à ¤¨ãá áä¥àë ¤«ï ¢ë¤¥«¥¨ï ªâ¨¢®© â®çª¨->->-> |
1066 | sph_radius dd 0 ;à ¤¨ãá áä¥àë ¤«ï ¢ë¤¥«¥¨ï ªâ¨¢®© â®çª¨->->-> |
1078 | > |
1067 | > |