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

Функции создания графических примитивов

Простые геометрические объекты (примитивы) удобнее создавать с помощью функций, обращаясь к этим функциям по мере необходимости. Переделаем код примера с белым треугольником. Добавим в файл 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 теперь выглядит так:

Программа покажет белый треугольник.

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

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