NeHe的OpenGL教程1(Bang翻译版)
在这个教程里,我将教你在Windows环境中创建OpenGL程序.它将显示一个空的OpenGL窗口,可以在窗口和全屏模式下切换,按ESC退出.它是我们以后应用程序的框架。如下图:program lesson1a;
{
OpenGL DelphiXE
出处:根据NeHe代码翻译而来(http://nehe.gamedev.net/)
作者:帅宏军shuaihj@163.com
}
uses
Windows,
Messages,
// 引用OpenGL单元
OpenGL;
// 全局变量
var
h_Rc: HGLRC; // 窗口着色描述表句柄
h_Dc: HDC; // OpenGL渲染描述表句柄
h_Wnd: HWND; // 保存我们的窗口句柄
keys: array [0..255] of BOOL; // 保存键盘按键的数组
Active: bool = true; // 窗口的活动标志,缺省为TRUE
FullScreen:bool = true; // P全屏标志缺省,缺省设定成全屏模式
// 重置OpenGL窗口大小
procedure ReSizeGLScene(Width: GLsizei; Height: GLsizei);
begin
if (Height=0) then // 防止被零除
Height:=1; // 将Height设为1
glViewport(0, 0, Width, Height); // 重置当前的视口
glMatrixMode(GL_PROJECTION); // 指定"投影矩阵堆栈"是下一个矩阵操作的目标
glLoadIdentity(); // 重置当前指定的矩阵为单位矩阵
gluPerspective(45.0,Width/Height,0.1,100.0); // 设置视口的大小
glMatrixMode(GL_MODELVIEW); // 指定"模型视图矩阵堆栈"是下一个矩阵操作的目标
glLoadIdentity; // 重置当前指定的矩阵为单位矩阵
end;
// 初始化OpenGL所有设置
function InitGL:bool;
begin
glShadeModel(GL_SMOOTH); // 采用光滑着色(绘制指定两点间其他点颜色时使用过渡色)
glClearColor(0.0, 0.0, 0.0, 0.5); // 指定清除颜色缓存时使用的颜色值(黑色,0.5透明)
glClearDepth(1.0); // 指定清除深度缓存时使用的深度值
glEnable(GL_DEPTH_TEST); // 启用深度测试,对深度缓存中符合"深度比较算法"要求的像素进行重绘
glDepthFunc(GL_LEQUAL); // 指定"深度比较算法"
glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST); // 告诉系统对透视进行最高质量修正
Result:=true;
end;
// 绘制OpenGL场景(任何您所想在屏幕上显示的东东都将在此段代码中出现)
function DrawGLScene():bool;
begin
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); // 根据glClearColor和glClearDepth指定的值清除颜色和深度缓存
glLoadIdentity(); // 重置当前指定的矩阵为单位矩阵
//你自己的OpengGL绘制代码
//......
Result := true;
end;
//处理所有的窗口消息。当我们注册好窗口类之后,程序跳转到这部分代码处理窗口消息
function WndProc(hWnd: HWND; // 窗口的句柄
message: UINT; // 窗口的消息
wParam: WPARAM; // 附加的消息内容
lParam: LPARAM): // 附加的消息内容
LRESULT; stdcall;
var
scrWidth,scrHeight: integer;
rect: TRect;
begin
if message=WM_SYSCOMMAND then // 监视系统中断命令
begin
case wParam of
SC_SCREENSAVE,SC_MONITORPOWER: // 屏保要运行或显示器要进入节电模式
begin
&
补充:综合编程 , 其他综合 ,