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

Конусы и цилиндры

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

; #########################################################################

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

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

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

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