{
贴图可以极大的节省CPU时间。呵呵,但是这一节费了我比较多的时间 : (
因为用到了opengl的辅助库,现在这个库的函数已经很少有人用了,但是我还是找到了,感谢zdcnow(磁效应),他给我提供的这个辅助库的delphi版本。在学习本节之前,请大家到网上下载glaux.dll、Glaux.pas文件,并加到项目中。
好了,让我们继续OPENGL之路.
首先我们需要加进SysUtils单元,因为我们这节要用到文件操作,我们还要将Glaux单元加进来。
然后我们在第一课的基础上加上几个变量,xrot , yrot 和 zrot 。这些变量用来使立方体绕X、Y、Z轴旋转。texture[] 为一个纹理分配存储空间。如果您需要不止一个的纹理,应该将数字1改成您所需要的数字。
}
VAR
h_RC : HGLRC; // Rendering Context(着色描述表)。
h_DC : HDC; // Device Context(设备描述表)
h_Wnd : HWND; // 窗口句柄
h_Instance : HINST; // 程序Instance(实例)。
keys : Array[0..255] Of Boolean; // 用于键盘例程的数组
xrot, // X 旋转量 ( 新增 )
yrot, // Y 旋转量 ( 新增 )
zrot : GLfloat; // Z 旋转量 ( 新增 )
Texture : Array[0..1] Of GLuint; // 存储一个纹理 ( 新增 )
{然后引载入opengl32.dll中的两个过程,我们要用到他们}
Procedure glGenTextures(n: GLsizei; Var textures: GLuint); stdcall; external
opengl32;
Procedure glBindTexture(target: GLenum; texture: GLuint); stdcall; external
opengl32;
{接下来我们需要增加一个新的函数,用来再入图像,该函数的返回类型在Glaux.pas中定义如下:
TAUX_RGBImageRec= record
sizeX, sizeY: GLint;
data: pointer;
end;
PTAUX_RGBImageRec= ^TAUX_RGBImageRec;
具体含义会在后面介绍}
Function LoadBmp(filename: pchar): PTAUX_RGBImageRec;
Var
BitmapFile : Thandle; // 文件句柄
Begin
//接下来检查文件名是否已提供
If Filename = '' Then // 确保文件名已提供。
result := Nil; // 如果没提供,返回 NULL
//接着检查文件是否存在。
BitmapFile := FileOpen(Filename, fmOpenWrite); //尝试打开文件
//如果我们能打开文件的话,很显然文件是存在的。
If BitmapFile > 0 Then // 文件存在么?
Begin
//关闭文件。
FileClose(BitmapFile); // 关闭句柄
//au