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

Текстурирование куба

Чтобы нанести разные текстуры на грани куба потребуется создать несколько текстур (как минимум шесть). Поэтому функции LoadTexture и Load_Image требуют модификации. Так как текстуры хранятся в разных файлах, эти функции должны получать имя соответствующего файла:

; #########################################################################
LoadTexture PROC flName:DWORD

LOCAL hPic:DWORD,numTxtr:DWORD

invoke Load_Image,flName
mov hPic,eax

invoke glGenTextures,1,ADDR numTxtr
invoke glBindTexture,GL_TEXTURE_2D,numTxtr
invoke glTexParameteri,GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR
invoke glTexParameteri,GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR
invoke glPixelStorei,GL_UNPACK_ALIGNMENT, 1

invoke gluBuild2DMipmaps,GL_TEXTURE_2D,3,xPic,yPic,GL_BGR_EXT,GL_UNSIGNED_BYTE,hPic

return numTxtr
LoadTexture ENDP


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

и

Load_Image proc lpstFileName:DWORD


LOCAL dwFileSize:DWORD, dwHighSize:DWORD, dwBytesRead:DWORD, hFile:DWORD,bmpheader:DWORD,Memory:DWORD
LOCAL hGlobal:DWORD,pBits:DWORD

invoke CreateFile,lpstFileName, GENERIC_READ, FILE_SHARE_READ, 0, \
OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, 0
mov hFile,eax

invoke GetFileSize, hFile, ADDR dwHighSize
mov dwFileSize, eax

invoke GlobalAlloc,GMEM_MOVEABLE or GMEM_ZEROINIT, dwFileSize

mov Memory,eax

invoke GlobalLock,Memory
mov bmpheader,eax

mov ebx,bmpheader

invoke ReadFile, hFile, bmpheader, dwFileSize, ADDR dwBytesRead, 0

invoke CloseHandle, hFile

mov eax, dwBytesRead

mov edx,BITMAPFILEHEADER.bfSize[ebx]


mov eax, sizeof BITMAPFILEHEADER
add eax,bmpheader

mov esi,eax

mov eax,BITMAPFILEHEADER.bfOffBits[ebx];
add eax,bmpheader

mov pBits,eax


m2m xPic, BITMAPINFO.bmiHeader.biWidth[esi]

m2m yPic, BITMAPINFO.bmiHeader.biHeight[esi]

return pBits

Load_Image endp
;#####################################################

Текстуры создаются в процедуре CreateObjects:

; #########################################################################
CreateObjects PROC ParentW:DWORD,ParentH:DWORD



invoke LoadTexture,ADDR szFileName1

invoke LoadTexture,ADDR szFileName2

invoke LoadTexture,ADDR szFileName3

invoke LoadTexture,ADDR szFileName4

invoke LoadTexture,ADDR szFileName5

invoke LoadTexture,ADDR szFileName6


invoke CreateCube,1
invoke glMatrixMode,GL_PROJECTION
ret
CreateObjects ENDP
; #########################################################################

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

LoadTexture PROTO :DWORD
Load_Image PROTO :DWORD

Имена файлов, содержащих текстуры определены в секции данных файла opengl.inc:

szFileName1 db "1.bmp",0
szFileName2 db "2.bmp",0
szFileName3 db "3.bmp",0
szFileName4 db "4.bmp",0
szFileName5 db "5.bmp",0
szFileName6 db "6.bmp",0

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