Конусы и цилиндры
Вариант функции для создания сплошного цилиндра:
; #########################################################################
SolidCylinder PROC ListNumber:DWORD,Color:DWORD,Radius:DWORD,Parts:DWORD
LOCAL hCylinder:DWORD
invoke glNewList,ListNumber,GL_COMPILE_AND_EXECUTE
invoke gluNewQuadric
mov hCylinder,eax
invoke gluQuadricDrawStyle,hCylinder,GLU_FILL
invoke gluQuadricNormals,hCylinder,GL_SMOOTH
invoke glColor3fv,Color
mov eax,Radius
invoke gluCylinder,hCylinder,[eax],[eax+4],[eax+8],[eax+12],[eax+16],[eax+20],Parts,Parts
invoke glEndList
mov eax,hCylinder
ret
SolidCylinder ENDP
; #########################################################################
И - проволочного:
; #########################################################################
WireCylinder PROC ListNumber:DWORD,Color:DWORD,Radius:DWORD,Parts:DWORD
LOCAL hCylinder:DWORD
invoke glNewList,ListNumber,GL_COMPILE_AND_EXECUTE
invoke gluNewQuadric
mov hCylinder,eax
invoke gluQuadricDrawStyle,hCylinder,GLU_LINE
invoke gluQuadricNormals,hCylinder,GL_SMOOTH
invoke glColor3fv,Color
mov eax,Radius
invoke gluCylinder,hCylinder,[eax],[eax+4],[eax+8],[eax+12],[eax+16],[eax+20],Parts,Parts
invoke glEndList
mov eax,hCylinder
ret
WireCylinder ENDP
; #########################################################################
Прототипы функций:
SolidCylinder PROTO :DWORD,:DWORD,:DWORD,:DWORD
WireCylinder PROTO :DWORD,:DWORD,:DWORD,:DWORD
В секции данных определяется диаметр первого основания цилиндра, второго основания (если ноль - получится конус) и высота. В примере показан вариант конуса и цилиндра:
CylinderRadius1 dq 0.2,0.0,0.6
CylinderRadius2 dq 0.5,0.5,1.5
Пример работы программы: