Функции создания графических примитивов
Простые геометрические объекты (примитивы) удобнее создавать с помощью функций, обращаясь к этим функциям по мере необходимости. Переделаем код примера с белым треугольником. Добавим в файл opngl.asm функции CreateObjects для создания объектов:
; #########################################################################
CreateObjects PROC ParentW:DWORD,ParentH:DWORD
invoke SolidTriangle,1
invoke glMatrixMode,GL_PROJECTION
ret
CreateObjects ENDP
; #########################################################################
и SolidTriangle для сплошного треугольника:
; #########################################################################
SolidTriangle proc ListNumber:DWORD
invoke glNewList,ListNumber,GL_COMPILE_AND_EXECUTE
invoke glBegin,GL_TRIANGLES
top(Top1)
top(Top2)
top(Top3)
invoke glEnd
invoke glEndList
ret
SolidTriangle endp
; #########################################################################
В определения прототипов впишем:
CreateObjects PROTO :DWORD,:DWORD
SolidTriangle PROTO :DWORD
В процедуру Init:
invoke CreateObjects,WINRect.right,WINRect.bottom
В секцию макросов файла opengl.inc добавим два новых макроса: top строит вершины, put2scene выводит объекты на экран:
top MACRO arg
lea eax,arg
invoke glVertex3f,[eax],[eax+4],[eax+8]
ENDM
put2scene MACRO num,arg
invoke glPushMatrix
lea eax,arg
mov ecx,[eax]
mov ebx,[eax+4]
mov eax,[eax+8]
invoke glTranslatef,ecx,ebx,eax
invoke glCallList,num
invoke glPopMatrix
ENDM
Полностью opngl.asm теперь выглядит так:
Программа покажет белый треугольник.