MASM32 и OpenGL
Это не так сложно, как на самом деле

Диски

Вариант функции для создания сплошного диска:

; #########################################################################
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

Пример работы программы:

Скачать исходники и ехе-файл.

©   Короленко М.В., 2011       
Перепечатка материалов возможна только после согласования с автором при условии обязательной ссылки на сайт