Плоскость
Код построения плоскости из четырехугольников:
; #########################################################################
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 задает размеры плоскости, ее значение в программе удваивается. Пример работы программы: