Subversion Repositories Kolibri OS

Rev

Rev 5269 | Rev 5380 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
5256 IgorA 1
use32
2
	org 0x0
3
	db 'MENUET01'
4
	dd 0x1
5
	dd start
6
	dd i_end
7
	dd mem,stacktop
8
	dd 0,cur_dir_path
9
 
10
include '../../../../../../programs/proc32.inc'
11
include '../../../../../../programs/macros.inc'
12
include '../../../../../../programs/develop/libraries/box_lib/load_lib.mac'
13
include '../../../../../../programs/dll.inc'
14
include '../opengl_const.inc'
15
 
16
@use_library
17
 
18
align 4
19
start:
20
	load_library name_tgl, cur_dir_path, library_path, system_path, \
21
		err_message_found_lib, head_f_l, import_lib_tinygl, err_message_import, head_f_i
22
	cmp eax,-1
23
	jz button.exit
24
 
25
	mcall 40,0x27
26
 
5278 IgorA 27
stdcall [kosglMakeCurrent], 10,10,400,350,ctx1
5256 IgorA 28
stdcall [glEnable], GL_DEPTH_TEST
5269 IgorA 29
stdcall [glEnable], GL_NORMALIZE ;делам нормали одинаковой величины во избежание артефактов
5256 IgorA 30
stdcall [gluNewQuadric]
31
mov [qObj],eax
32
 
5278 IgorA 33
stdcall [glClearColor], 0.25,0.25,0.25,0.0
5256 IgorA 34
stdcall [glShadeModel], GL_SMOOTH
35
 
36
call draw_3d
37
 
38
align 4
39
red_win:
40
	call draw_window
41
 
42
align 4
43
still:
44
	mcall 10
45
	cmp al,1
46
	jz red_win
47
	cmp al,2
48
	jz key
49
	cmp al,3
50
	jz button
51
	jmp still
52
 
53
align 4
54
draw_window:
55
	pushad
56
	mcall 12,1
57
 
58
	mov edx,0x33ffffff ;0x73ffffff
5278 IgorA 59
	mcall 0,(50 shl 16)+430,(30 shl 16)+400,,,caption
5256 IgorA 60
	stdcall [kosglSwapBuffers]
61
 
62
	mcall 12,2
63
	popad
64
	ret
65
 
66
align 4
67
key:
68
	mcall 2
69
 
70
	cmp ah,27 ;Esc
71
	je button.exit
72
 
73
	cmp ah,61 ;+
74
	jne @f
75
	    fld dword[scale]
76
	    fadd dword[delt_sc]
77
	    fstp dword[scale]
78
	    call draw_3d
79
	    stdcall [kosglSwapBuffers]
80
	@@:
81
	cmp ah,45 ;-
82
	jne @f
83
	    fld dword[scale]
84
	    fsub dword[delt_sc]
85
	    fstp dword[scale]
86
	    call draw_3d
87
	    stdcall [kosglSwapBuffers]
88
	@@:
89
	cmp ah,178 ;Up
90
	jne @f
91
		fld dword[angle_y]
92
		fadd dword[delt_size]
93
		fstp dword[angle_y]
94
		call draw_3d
95
		stdcall [kosglSwapBuffers]
96
	@@:
97
	cmp ah,177 ;Down
98
	jne @f
99
		fld dword[angle_y]
100
		fsub dword[delt_size]
101
		fstp dword[angle_y]
102
		call draw_3d
103
		stdcall [kosglSwapBuffers]
104
	@@:
105
	cmp ah,176 ;Left
106
	jne @f
107
		fld dword[angle_z]
108
		fadd dword[delt_size]
109
		fstp dword[angle_z]
110
		call draw_3d
111
		stdcall [kosglSwapBuffers]
112
	@@:
113
	cmp ah,179 ;Right
114
	jne @f
115
		fld dword[angle_z]
116
		fsub dword[delt_size]
117
		fstp dword[angle_z]
118
		call draw_3d
119
		stdcall [kosglSwapBuffers]
120
	@@:
121
 
122
	jmp still
123
 
124
align 4
125
button:
126
	mcall 17
127
	cmp ah,1
128
	jne still
129
.exit:
130
	stdcall [gluDeleteQuadric], [qObj]
131
	mcall -1
132
 
133
 
134
align 4
135
caption db 'Test gluSphere, [Esc] - exit, [<-],[->],[Up],[Down] - rotate',0
136
align 4
137
ctx1 db 28 dup (0) ;TinyGLContext or KOSGLContext
138
;sizeof.TinyGLContext = 28
139
 
140
align 4
141
draw_3d:
142
stdcall [glClear], GL_COLOR_BUFFER_BIT + GL_DEPTH_BUFFER_BIT ;очистим буфер цвета и глубины
143
 
144
stdcall [glPushMatrix]
145
	call SetLight
146
 
147
	stdcall [glTranslatef], 0.0,0.0,0.5
148
	stdcall [glScalef], [scale], [scale], [scale]
149
 
5278 IgorA 150
	stdcall [glColor3f], 1.0, 1.0, 0.0
5256 IgorA 151
	stdcall [glRotatef], [angle_z],0.0,0.0,1.0
152
	stdcall [glRotatef], [angle_y],0.0,1.0,0.0
5269 IgorA 153
	stdcall [gluSphere], [qObj], 1.0, 32,32
5256 IgorA 154
 
155
	stdcall [glColor3f], 1.0, 0.0, 0.0
156
	stdcall [glTranslatef], -1.6,0.0,0.0
5269 IgorA 157
	stdcall [gluSphere], [qObj], 0.55, 16,16
5256 IgorA 158
 
159
	stdcall [glColor3f], 0.0, 0.0, 1.0
160
	stdcall [glTranslatef], 3.2,0.0,0.0
5269 IgorA 161
	stdcall [gluSphere], [qObj], 0.55, 16,16
5256 IgorA 162
stdcall [glPopMatrix]
163
ret
164
 
165
align 4
166
SetLight:
167
    stdcall [glLightfv], GL_LIGHT0, GL_POSITION, light_position
168
    stdcall [glLightfv], GL_LIGHT0, GL_SPOT_DIRECTION, light_dir
169
 
170
    stdcall [glLightfv], GL_LIGHT0, GL_DIFFUSE, white_light
171
    stdcall [glLightfv], GL_LIGHT0, GL_SPECULAR, white_light
172
 
173
	stdcall [glEnable], GL_COLOR_MATERIAL
174
	stdcall [glColorMaterial], GL_FRONT, GL_AMBIENT_AND_DIFFUSE
175
	stdcall [glMaterialfv], GL_FRONT, GL_SPECULAR, mat_specular
176
	stdcall [glMaterialf], GL_FRONT, GL_SHININESS, mat_shininess
177
    stdcall [glLightModelfv], GL_LIGHT_MODEL_AMBIENT, lmodel_ambient
178
 
179
	stdcall [glEnable],GL_LIGHTING
180
	stdcall [glEnable],GL_LIGHT0
181
ret
182
 
183
qObj dd 0
184
 
185
scale dd 0.4
186
delt_sc dd 0.05
187
angle_z dd 0.0
188
angle_y dd 0.0
189
delt_size dd 3.0
190
 
5278 IgorA 191
light_position dd 3.0, 2.0, -10.0, 1.0 ; Расположение источника [0][1][2]
192
	;[3] = (0.0 - бесконечно удаленный источник, 1.0 - источник света на определенном расстоянии)
5256 IgorA 193
light_dir dd 0.0,0.0,0.0 ;направление лампы
5278 IgorA 194
mat_specular dd 0.1, 0.1, 0.1, 1.0 ; Цвет блика
5256 IgorA 195
mat_shininess dd 3.0 ; Размер блика (обратная пропорция)
196
white_light dd 0.8, 0.8, 0.8, 1.0 ; Цвет и интенсивность освещения, генерируемого источником
197
lmodel_ambient dd 0.2, 0.2, 0.2, 1.0 ; Параметры фонового освещения
198
 
199
;--------------------------------------------------
200
align 4
201
import_lib_tinygl:
202
 
203
macro E_LIB n
204
{
205
	n dd sz_#n
206
}
207
include '../export.inc'
208
	dd 0,0
209
macro E_LIB n
210
{
211
	sz_#n db `n,0
212
}
213
include '../export.inc'
214
 
215
;--------------------------------------------------
216
system_path db '/sys/lib/'
217
name_tgl db 'tinygl.obj',0
218
err_message_found_lib db 'Sorry I cannot load library tinygl.obj',0
219
head_f_i:
220
head_f_l db 'System error',0
221
err_message_import db 'Error on load import library tinygl.obj',0
222
;--------------------------------------------------
223
 
224
i_end:
225
	rb 1024
226
stacktop:
227
cur_dir_path:
228
	rb 4096
229
library_path:
230
	rb 4096
231
mem: