学习OpenGL总结二
2009-01-09 23:14
423 查看
学习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); // 退出程序
}
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); // 退出程序
}
相关文章推荐
- OpenGL学习总结(转自白了少年头http://www.cnblogs.com/yxnchinahlj/archive/2010/11/23/1885579.html)
- opengl纹理映射的学习总结
- OpenGL学习总结(三)
- OpenGL学习总结(四)
- 学习OpenGL总结一
- OpenGL学习总结(五)
- OpenGL和cocos2d学习总结
- 学习OpenGL总结一
- NeHe OpenGL 第二课 学习总结
- OpenGL 学习总结
- OpenGL学习总结(八)
- 学习OpenGL总结二
- OpenGL学习笔记(十三):将纹理贴图应用到四边形上,对VAO/VBO/EBO/纹理/着色器的使用方式进行总结
- OpenGL学习归纳 -- buffer的使用总结
- 学习OpenGL总结三
- OpenGL学习总结
- Qt下的OpenGL 编程(12)阶段学习总结
- VBO、FBO、PBO 学习总结贴 (OpenGL ES)
- 学习OpenGL简单总结