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

Плоскость

Код построения плоскости из четырехугольников:

; #########################################################################
Surface PROC ListNumber:DWORD,Parts:DWORD,DimXY:DWORD,Color1:DWORD,Color2:DWORD
LOCAL x0:DWORD,y0:DWORD,x1:DWORD,y1:DWORD,i:DWORD,j:DWORD,Hstep:DWORD
LOCAL color:DWORD

.data
fZ0 dd 0.0
fZNormal dd -1.0
nDimXY dd 0.0

.code
invoke glShadeModel,GL_FLAT

fld[DimXY]

fchs
fst[nDimXY]

fld[DimXY]

fidiv [Parts]

fst[Hstep]

invoke glNewList,ListNumber,GL_COMPILE_AND_EXECUTE
invoke glBegin,GL_QUADS
mov color,0

mov eax,0
mov j,eax

newcicle:
mov eax,0
mov i,eax

finit

fld[Hstep]
fimul[j]
fadd[nDimXY]

fst[y0]
fadd[Hstep]
fst[y1]


newline:
finit
fld [Hstep]
fimul[i]
fadd[nDimXY]

fst[x0]
fadd[Hstep]
fst[x1]

mov eax,color
cmp eax,1
jz newcolor
mov eax,Color1
invoke glColor4f,[eax],[eax+4],[eax+8],[eax+12]
inc color
jmp @F
newcolor:

mov eax,Color2
invoke glColor4f,[eax],[eax+4],[eax+8],[eax+12]
dec color
@@:

invoke glNormal3f,x0,y0, fZNormal
invoke glVertex3f,x0,y0, fZ0


invoke glNormal3f,x0,y0, fZNormal
invoke glVertex3f,x1,y0, fZ0


invoke glNormal3f,x0,y0, fZNormal
invoke glVertex3f,x1,y1, fZ0


invoke glNormal3f,x0,y0, fZNormal
invoke glVertex3f,x0,y1, fZ0
inc i
mov eax,Parts
shl eax,1
cmp i,eax

jne newline
mov eax,color
cmp eax,1
jz newcol

inc color
jmp @F
newcol:

dec color
@@:

inc j
mov eax,Parts
shl eax,1
cmp j,eax
jne newcicle
invoke glEnd
invoke glEndList
invoke glShadeModel,GL_SMOOTH

ret

Surface ENDP

; #########################################################################

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

Surface PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD

Плоскость можно построить как с чередованием цветов клеток (типа шахматной доски), так и однотонную - достаточно задать одинаковое значение цвета для ячеек.

Position1 dd 0.0,0.0,-9.0


dFloat5 dd 4.0
dColor1 dd 0.1,0.1,0.1,0.0
dColor2 dd 0.9,0.9,0.9,0.0

Вызов функции:

invoke Surface,1,4,dFloat5,ADDR dColor1,ADDR dColor2

Величина dFloat5 задает размеры плоскости, ее значение в программе удваивается. Пример работы программы:

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

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