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

Вращение объектов

Функция Rotate поворачивает объекты вокруг оси, прибавляя к текущей ориентации объекта, которая определяется условными углами поворота относительно осей координат условные углы смещения. Полученная ориентация сохраняется. В функции использованы действия с числами с плавающей запятой:

; #########################################################################
Rotate PROC ListNumber:DWORD,ZYXPosition:DWORD,ZYXRotations:DWORD,ZYXAngles:DWORD

mov eax,ZYXPosition


invoke glTranslatef,[eax],[eax+4],[eax+8]

mov eax,ZYXAngles
mov ebx,ZYXRotations
fld DWORD PTR [eax]
fadd DWORD PTR [ebx]
fstp DWORD PTR [eax]
invoke glRotatef,[eax],dFloat1,dFloat1,dFloat1

invoke glCallList,ListNumber
ret
Rotate ENDP
; #########################################################################

Прототип функции:

Rotate PROTO :DWORD,:DWORD,:DWORD,:DWORD

Макрос (добавить в секцию макросов файла opengl.inc), упрощающий работу с функцией Rotate:

rotate MACRO num,pos,speed,angles
invoke glPushMatrix
invoke Rotate,num,pos,speed,angles
invoke glPopMatrix
ENDM

В секцию данных файла opngl.asm необходимо добавить:


dFloat1 dd 1.0

RotSpeed dd -0.5,0.8,-0.4
RotAngles dd 0.1,0.5,0.0

При перемещении мыши по окну программы объекты поворачиваются вокруг своей оси.

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

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