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

Игральная кость и кубик Рубика

Прототип функции создания куба:

CreateCube PROTO :DWORD

Создаем куб и для каждой грани включаем нужную текстуру. После завершения отрисовки грани текстуру выключаем. И так шесть раз:

; #########################################################################
CreateCube PROC ListNumber:DWORD
LOCAL aBox:DWORD
invoke glNewList,ListNumber,GL_COMPILE_AND_EXECUTE
invoke gluNewQuadric
mov aBox,eax
invoke gluQuadricDrawStyle,aBox,GL_FILL
invoke gluQuadricNormals,aBox,GL_SMOOTH


invoke glBindTexture,GL_TEXTURE_2D,1
invoke glEnable,GL_TEXTURE_2D
invoke glBegin,GL_QUADS
toptx(Topt1)
top(Topb1)
toptx(Topt2)
top(Topb4)
toptx(Topt3)
top(Topb3)
toptx(Topt4)
top(Topb2)


invoke glEnd
invoke glDisable,GL_TEXTURE_2D
invoke glBindTexture,GL_TEXTURE_2D,2
invoke glEnable,GL_TEXTURE_2D
invoke glBegin,GL_QUADS



toptx(Topt1)
top(Topb2)
toptx(Topt2)
top(Topb6)
toptx(Topt3)
top(Topb7)
toptx(Topt4)
top(Topb3)
invoke glEnd
invoke glDisable,GL_TEXTURE_2D
invoke glBindTexture,GL_TEXTURE_2D,3
invoke glEnable,GL_TEXTURE_2D
invoke glBegin,GL_QUADS

toptx(Topt1)
top(Topb6)
toptx(Topt2)
top(Topb5)
toptx(Topt3)
top(Topb8)
toptx(Topt4)
top(Topb7)

invoke glEnd
invoke glDisable,GL_TEXTURE_2D
invoke glBindTexture,GL_TEXTURE_2D,4
invoke glEnable,GL_TEXTURE_2D
invoke glBegin,GL_QUADS
toptx(Topt1)
top(Topb5)
toptx(Topt2)
top(Topb1)
toptx(Topt3)
top(Topb4)
toptx(Topt4)
top(Topb8)


invoke glEnd
invoke glDisable,GL_TEXTURE_2D
invoke glBindTexture,GL_TEXTURE_2D,5
invoke glEnable,GL_TEXTURE_2D
invoke glBegin,GL_QUADS

toptx(Topt1)
top(Topb1)
toptx(Topt2)
top(Topb2)
toptx(Topt3)
top(Topb6)
toptx(Topt4)
top(Topb5)


invoke glEnd
invoke glDisable,GL_TEXTURE_2D
invoke glBindTexture,GL_TEXTURE_2D,6
invoke glEnable,GL_TEXTURE_2D
invoke glBegin,GL_QUADS
toptx(Topt1)
top(Topb3)
toptx(Topt2)
top(Topb7)
toptx(Topt3)
top(Topb8)
toptx(Topt4)
top(Topb4)

invoke glEnd
invoke glDisable,GL_TEXTURE_2D
invoke glEndList
mov eax,aBox
ret
CreateCube ENDP
; #########################################################################

В секции данных необходимо определить координаты вершин куба:

Topb1 dd 0.0,0.0,0.0
Topb2 dd 1.0,0.0,0.0
Topb3 dd 1.0,1.0,0.0
Topb4 dd 0.0,1.0,0.0

Topb5 dd 0.0,0.0,1.0
Topb6 dd 1.0,0.0,1.0
Topb7 dd 1.0,1.0,1.0
Topb8 dd 0.0,1.0,1.0

И текстурные координаты

Topt1 dd 0.0,0.0
Topt2 dd 0.0,1.0
Topt3 dd 1.0,1.0
Topt4 dd 1.0,0.0

Пример первый - игральная кость:

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

Второй пример - кубик Рубика:

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

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