您的位置:首页 > 运维架构

学习OpenGL总结二

2009-01-09 23:14 429 查看
学习OpenGL总结二

OpenGL_FirstWin32.cpp : 定义应用程序的入口点

//OpenGL Framework

//OpenGL 框架类

#include "stdafx.h"

#include "OpenGL_FirstWin32.h"

#include "DrawGLScene_3D.h"

#include "DrawGLScene_贴图.h"

OpenGLFrameWork* GLFW;

LRESULT CALLBACK WndProc( HWND hWnd, // 窗口的句柄

UINT uMsg, // 窗口的消息

WPARAM wParam, // 附加的消息内容

LPARAM lParam) // 附加的消息内容

{

switch (uMsg) // 检查Windows消息

{

case WM_ACTIVATE: // 监视窗口激活消息

{

if (!HIWORD(wParam)) // 检查最小化状态

{

GLFW->active=TRUE; // 程序处于激活状态

}

else

{

GLFW->active=FALSE; // 程序不再激活

}

return 0; // 返回消息循环

}

case WM_SYSCOMMAND:// 中断系统命令Intercept System Commands

{

switch (wParam) // 检查系统调用Check System Calls

{

case SC_SCREENSAVE: // 屏保要运行?

case SC_MONITORPOWER: // 显示器要进入节电模式?

return 0; // 阻止发生

}

break; // 退出

}

case WM_CLOSE: //收到Close消息?

{

PostQuitMessage(0); // 发出退出消息

return 0;

}

case WM_KEYDOWN: // 有键按下么?

{

GLFW->keys[wParam] = TRUE; // 如果是,设为TRUE

return 0; // 返回

}

case WM_KEYUP: // 有键放开么?

{

GLFW->keys[wParam] = FALSE; // 如果是,设为FALSE

return 0; // 返回

}

case WM_SIZE: // 调整OpenGL窗口大小

{

GLFW->ReSizeGLScene(LOWORD(lParam),HIWORD(lParam)); // LoWord=Width,HiWord=Height

return 0; // 返回

}

}

//向 DefWindowProc传递所有未处理的消息。

return DefWindowProc(hWnd,uMsg,wParam,lParam);

}

//下面是我们的Windows程序的入口。将会调用窗口创建例程,处理窗口消息,并监视人机交互。

int WINAPI WinMain( HINSTANCE hInstance,//实例

HINSTANCE hPrevInstance,// 前一个实例

LPSTR lpCmdLine, // 命令行参数

int nCmdShow) // 窗口显示状态

{

MSG msg; // Windowsx消息结构

BOOL done=FALSE; // 用来退出循环的Bool 变量

//GLFW=new OpenGLFrameWork();

GLFW=new OpenGLFrameWork_3D();

//GLFW=new OpenGLFrameWork_TT();

// 提示用户选择运行模式

if (MessageBox(NULL,(LPCWSTR)"Would You Like To Run In Fullscreen Mode?", (LPCWSTR)"Start

FullScreen?",MB_YESNO|MB_ICONQUESTION)==IDNO)

{

GLFW->fullscreen=FALSE; //窗口模式

}

//创建OpenGL窗口

if (!GLFW->CreateGLWindow("NeHe's OpenGL Framework",640,480,16,GLFW->fullscreen))

{

return 0; // 失败退出

}

while(!done) //保持循环直到 done=TRUE

{

if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))

{//有消息在等待吗?

if (msg.message==WM_QUIT)//收到退出消息?

{

done=TRUE; // 是,则done=TRUE

}

else // 不是,处理窗口消息

{ //如果不是退出消息,我们翻译消息,然后发送消息,使得WndProc() 或 Windows能够

处理他们。

TranslateMessage(&msg);// 翻译消息

DispatchMessage(&msg); // 发送消息

}

}

else // 如果没有消息

{

//如果没有消息,绘制我们的OpenGL场景。代码的第一行查看窗口是否激活。如果按下ESC键

,done变量被设为TRUE,程序将会退出。

// 绘制场景。监视ESC键和来自DrawGLScene()的退出消息

if (GLFW->active) // 程序激活的么?

{

if (GLFW->keys[VK_ESCAPE]) // ESC 按下了么?

{

done=TRUE; // ESC 发出退出信号

}

else// 不是退出的时候,刷新屏幕

{

//DrawGLScene();// 绘制场景

GLFW->DrawGLScene();// 绘制3D场景

SwapBuffers(GLFW->hDC);// 交换缓存 (双缓存)

}

}

if (GLFW->keys[VK_F1])// F1键按下了么?

{

GLFW->keys[VK_F1]=FALSE;// 若是,使对应的Key数组中的值为 FALSE

GLFW->KillGLWindow();// 销毁当前的窗口

GLFW->fullscreen=!GLFW->fullscreen;// 切换 全屏 / 窗口 模式

// 重建 OpenGL 窗口 第一课内容

/*if (!CreateGLWindow("NeHe's OpenGL Framework",640,480,16,fullscreen))

// 如果窗口未能创建,程序退出

{

return 0;

}*/

//NeHe's First Polygon Tutorial 第二课内容

if (!GLFW->CreateGLWindow("NeHe's First Polygon

Tutorial",640,480,16,GLFW->fullscreen)) // 如果窗口未能创建,程序退出

{

return 0;

}

}

}

} //end while

// 关闭程序

GLFW->KillGLWindow(); // 销毁窗口

return (msg.wParam); // 退出程序

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: