Вращение объектов
Функция 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
При перемещении мыши по окну программы объекты поворачиваются вокруг своей оси.