Диски
Вариант функции для создания сплошного диска:
; #########################################################################
SolidDisk PROC ListNumber:DWORD,Color:DWORD,Radius:DWORD,Parts:DWORD
LOCAL hDisk:DWORD
invoke glNewList,ListNumber,GL_COMPILE_AND_EXECUTE
invoke gluNewQuadric
mov hDisk,eax
invoke gluQuadricDrawStyle,hDisk,GLU_FILL
invoke gluQuadricNormals,hDisk,GL_SMOOTH
invoke glColor3fv,Color
mov eax,Radius
invoke gluDisk,hDisk,[eax],[eax+4],[eax+8],[eax+12],Parts,Parts
invoke glEndList
mov eax,hDisk
ret
SolidDisk ENDP
; #########################################################################
И - проволочного:
; #########################################################################
WireDisk PROC ListNumber:DWORD,Color:DWORD,Radius:DWORD,Parts:DWORD
LOCAL hDisk:DWORD
invoke glNewList,ListNumber,GL_COMPILE_AND_EXECUTE
invoke gluNewQuadric
mov hDisk,eax
invoke gluQuadricDrawStyle,hDisk,GLU_LINE
invoke gluQuadricNormals,hDisk,GL_SMOOTH
invoke glColor3fv,Color
mov eax,Radius
invoke gluDisk,hDisk,[eax],[eax+4],[eax+8],[eax+12],Parts,Parts
invoke glEndList
mov eax,hDisk
ret
WireDisk ENDP
; #########################################################################
Init proc hWn:DWORD
Прототипы функций:
SolidDisk PROTO :DWORD,:DWORD,:DWORD,:DWORD
WireDisk PROTO :DWORD,:DWORD,:DWORD,:DWORD
В секции данных определяются диаметр диска, первое число - диаметр внутреннего отверстия, если ноль - то диск без дырки, и цвет, который задается в виде последовательности трех (красный, зеленый, голубой)) чисел с плавающей запятой в пределах от 0 до 1:
DiskRadius dq 0.3,0.8
blue dd 0.0,0.0,1.0
orange dd 1.0,0.4,0.0
Пример работы программы: