Текстурирование куба
Чтобы нанести разные текстуры на грани куба потребуется создать несколько текстур (как минимум шесть). Поэтому функции 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