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