小游戏大全网站,湖南郴州建设局网站,如何注册国外域名,电子商务网站建设与维护实训题库1、前言
在我学习C的过程中#xff0c;研究了一下OpenGL编程#xff0c;打开了3D世界的编程世界#xff0c;3D世界的效果还是相当不错。而且OpenGL能够支持跨平台兼容#xff0c;是不错的学习方向#xff0c;于是就自己学习了网上的很多教程#xff0c;并将所有学到的知…1、前言
在我学习C的过程中研究了一下OpenGL编程打开了3D世界的编程世界3D世界的效果还是相当不错。而且OpenGL能够支持跨平台兼容是不错的学习方向于是就自己学习了网上的很多教程并将所有学到的知识运用到自己编程中去现在正好有时间就将自己编程中的一些点点滴滴汇总出来以供大家参考。 2、设计的目标
那么我们还是从游戏的角度出发去了解一下游戏中的功能都是怎么实现的。这一切还是要从自己玩游戏开始说起此前就玩过一下3D游戏当时就被游戏里的一些画面深深的吸引了同时游戏里头还有很多很有趣的设定比如玩家的视角是怎么移动的崎岖不平的地图是怎样制作的人物和物体、地面的碰撞是怎样检测的鼠标是怎样选中眼前的物体的魔法技能是怎样释放的不用加载进度条的无缝世界地图是怎么实现的带着这些疑问我们走进了一个OpenGL世界的3D世界。 3、程序设计的思路
为了实现以上游戏丰富多彩的内容我们需要对相应的游戏内容实现进行探索从一开始的准备工作游戏库文件的准备第一个游戏窗口的创建运用OpenGL画出基本的3D物体文字的显示视角的变化贴图纹理的使用点在三维世界的位置转换三维世界顶点在二维屏幕的投影位置鼠标怎样选中物体贝塞尔曲线和曲面的应用等等一系列的问题进行研究逐步模仿实现游戏世界的内容。虽然有很多内容网上都只言片语的提到过但很少有系统来说的这里我就我自己编程中遇到的问题和解决的办法汇总出来仅供参考。 4、准备工作
我们这里还是选取VC6.0来创建工程毕竟他对系统的要求不高实现一些功能来说简单容易上手源码文件体积小也更好分享一些。这里我们首先要准备一下OpenGL的运行库除了VC6.0自带的运行库外我们需要在网上下载一个很重要的OpenGL支持运行库这里我已经准备好放在附件里了大家可以直接下载使用。 后期我们在建立名称为World的工程文件夹后需要对以上运行库进行以下处理以便后期使用具体步骤如下
第一、把以上的运行库的GL文件夹直接放在工程的World目录下 第二、把所有DLL后缀的文件直接放在工程的World目录下 第三、把所有LIB后缀的文件拷贝到VC的安装路径通常为Microsoft Visual Studio\VC98\Lib下如果提示文件重复是否需要覆盖全部选择覆盖即可。
那么我们现在急需一个工程并创建第一个窗口。
5、创建一个窗口
我们想制作一个游戏首先必须得创建一个WINDOWS的窗口我们先用VC创建一个最简单的窗口。就好比在学各种编程语言的时候都会创建一个基本的hello world示例程序一样这样可以给我们的编程从感觉上带来简单容易上手的良好效果。
6、创建窗口的代码
这里我们没有使用网上众多采用的DOS窗口建立的运行环境主要是那样的窗口给游戏设计带来的体验感较差这里使用WINDOWS窗口更符合设计的需求。我们先建立一个World.cpp的源文件将以下程序保存到文件再用VC编译运行后就能产生一个简单的程序窗口。 这里窗口代码运行有错误提示unresolved external symbol _main的请参照消灭星星游戏程序设计【连载一】——游戏窗口的创建中第6部分的解决办法。 //加载系统头文件#include Windows.h#include Stdio.h#include Imm.h#include Math.h#include Time.h#include Winuser.h#include FStream.h#include IOStream.h#include MMSystem.h//加载OPENGL头文件#include gl/glu.h#include gl/glut.h#include gl/glaux.h//加载链接库#pragma comment(lib,glut.lib)#pragma comment(lib,glaux.lib)#pragma comment(lib,glu32.lib)#pragma comment(lib,glut32.lib)#pragma comment(lib,opengl32.lib)//加载链接库#pragma comment(lib,winmm.lib)#pragma comment(lib,user32.lib)#pragma comment(lib,msimg32.lib)#pragma comment(lib,imm32.lib)//加载自定义头文件#include Library\Library.h//#include Game\Game.h//#include Interface\Interface.h//加载自定义头文件#include Library\Library.cpp//#include Game\Game.cpp//#include Interface\Interface.cpp//全局句柄HWND hWndNULL;HINSTANCE hInstanceNULL;//消息处理模块LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{HDC hDC;switch (message){case WM_CREATE:return 0;case WM_PAINT:PAINTSTRUCT PS; hDCBeginPaint(hWnd,PS);ReleaseDC(hWnd,hDC); return 0;case WM_DESTROY:PostQuitMessage(0);return 0;}return DefWindowProc(hWnd,message,wParam,lParam);}//主函数int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)
{MSG message;HWND hWnd;CHAR szAppName[]World;//设置程序的样式WNDCLASS WC;WC.style CS_HREDRAW|CS_VREDRAW;WC.lpfnWndProc WndProc;WC.cbClsExtra 0;WC.cbWndExtra 0;WC.hInstance hInstance;WC.hIcon LoadIcon(hInstance,IDI_APPLICATION);WC.hCursor LoadCursor(hInstance,IDC_ARROW);WC.hbrBackground (HBRUSH)GetStockObject(BLACK_BRUSH);WC.lpszMenuName NULL;WC.lpszClassName szAppName;if(!RegisterClass(WC)){return 0;}//创建窗口hWndCreateWindow(szAppName,szAppName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);//赋值全局变量::hWndhWnd;::hInstancehInstance;//显示更新窗口ShowWindow(hWnd,iCmdShow);UpdateWindow(hWnd);//消息循环while(GetMessage(message,NULL,0,0)){TranslateMessage(message);DispatchMessage(message);}return message.wParam;}7、3D屏幕的初始化
我们看到刚刚窗口跟平时建立的窗口没有什么区别但是这样的窗口目前现在还不能显示3d的物体现在还只能像我们平时的应用程序显示文字和图片但这并不是我们需要的我们需要的是一个能够显示3d效果的窗口。我们需要给现实设备HDC进行初始化设置我们通过一个SetPixelFormat(HDC hDC)函数进行设置操作以便告诉系统我们要进行OpenGL的3d显示在以上初始化完屏幕后我们就可以显示3d物体了。 这里要注意在以下添加代码前必须完成本节第4部分的准备工作将所有的库文件准备完毕否则会提示出错。 //初始化OPENGL设置bool SetPixelFormat(HDC hDC)
{HGLRC hRC;GLuint pixelformat;static PIXELFORMATDESCRIPTOR pfd // pfd Tells Windows How We Want Things To Be{sizeof(PIXELFORMATDESCRIPTOR), // Size Of This Pixel Format Descriptor1, // Version NumberPFD_DRAW_TO_WINDOW | // Format Must Support WindowPFD_SUPPORT_OPENGL | // Format Must Support OpenGLPFD_DOUBLEBUFFER, // Must Support Double BufferingPFD_TYPE_RGBA, // Request An RGBA Format16, // Select Our Color Depth0, 0, 0, 0, 0, 0, // Color Bits Ignored0, // No Alpha Buffer0, // Shift Bit Ignored0, // No Accumulation Buffer0, 0, 0, 0, // Accumulation Bits Ignored16, // 16Bit Z-Buffer (Depth Buffer)0, // No Stencil Buffer0, // No Auxiliary BufferPFD_MAIN_PLANE, // Main Drawing Layer0, // Reserved0, 0, 0 // Layer Masks Ignored};if(!(pixelformatChoosePixelFormat(hDC,pfd))){MessageBox(NULL,Cant Find A Suitable PixelFormat.,ERROR,MB_OK|MB_ICONEXCLAMATION);return false;}if(!SetPixelFormat(hDC,pixelformat,pfd)){MessageBox(NULL,Cant Set The PixelFormat.,ERROR,MB_OK|MB_ICONEXCLAMATION);return false;}if(!(hRCwglCreateContext(hDC))){MessageBox(NULL,Cant Create A GL Rendering Context.,ERROR,MB_OK|MB_ICONEXCLAMATION);return false;}if(!(wglMakeCurrent(hDC,hRC))){MessageBox(NULL,Cant Activate The GL Rendering Context.,ERROR,MB_OK|MB_ICONEXCLAMATION);return false;}//初始化OPENGL窗口if(true){glShadeModel(GL_SMOOTH);glClearColor(0.0f,0.0f,0.0f,1.0f);glClearDepth(1.0f);glEnable(GL_DEPTH_TEST);glDepthFunc(GL_LEQUAL);glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);}return true;}随后我们只需要在程序初始化消息WndProc函数中对屏幕进行初始化既可以完成3d窗口的设置开启我们的3d编程之旅。 case WM_CREATE:hDCGetDC(hWnd);SetPixelFormat(hDC);ReleaseDC(hWnd,hDC);return 0;8、显示第一个3D物体
设置好以上显示模式后我们就行可以开始显示3D物体了。我们需要在消息处理函数WndProc中对WM_PAINT的处理添加我们的显示内容。 case WM_PAINT:PAINTSTRUCT PS; hDCBeginPaint(hWnd,PS);......//在此处添加3D显示设置及内容......ReleaseDC(hWnd,hDC); return 0;接下来我们在以上待添加3D显示设置及内容的地方添加显示代码如下 //显示3d世界内容if(true){//获取窗口大小RECT tempClientRect;GetClientRect(hWnd,tempClientRect);//初始化3D视角glMatrixMode(GL_PROJECTION);glLoadIdentity();gluPerspective(45,(float)tempClientRect.right/(float)tempClientRect.bottom,0.01f,1000.0f);glMatrixMode(GL_MODELVIEW);glLoadIdentity();//设置用户眼睛视角展示壮观的三维世界从这里开始gluLookAt(10.0f,10.0f,10.0f,0.0f,0.0f,0.0f,0.0f,1.0f,0.0f);//进行初始化设置清除屏幕glEnable(GL_DEPTH_TEST);glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//开始用户自定义绘图if(true){//设定颜色glColor3f(1.0f,0.0f,0.0f);//显示立方体glutSolidCube(3.0f);}//结束用户自定义绘图并显示到屏幕上glFlush();SwapBuffers(hDC); }小结
通过以上操作我们已经生成了第一个Windows窗口下的OpenGL程序在窗口的正中央显示了一个正方体当然这个正方体是从45度视角向下观察的结果我们后期还会给正方体各个面添加不同的颜色这样立方体才能更加逼真。但作为OpengGL编程的第一节内容能够实现一个3D物体已经达到了我们的目的。随着后期内容的添加我们将探索更多、更神奇的功能效果。
立方体的显示效果如下 运行源码见附近。 文章转载自: http://www.morning.btrfm.cn.gov.cn.btrfm.cn http://www.morning.mrccd.cn.gov.cn.mrccd.cn http://www.morning.kaakyy.com.gov.cn.kaakyy.com http://www.morning.dschz.cn.gov.cn.dschz.cn http://www.morning.sfmqm.cn.gov.cn.sfmqm.cn http://www.morning.nlqmp.cn.gov.cn.nlqmp.cn http://www.morning.kpgms.cn.gov.cn.kpgms.cn http://www.morning.chxsn.cn.gov.cn.chxsn.cn http://www.morning.rjjys.cn.gov.cn.rjjys.cn http://www.morning.yzxhk.cn.gov.cn.yzxhk.cn http://www.morning.rnrwq.cn.gov.cn.rnrwq.cn http://www.morning.jpwkn.cn.gov.cn.jpwkn.cn http://www.morning.xlyt.cn.gov.cn.xlyt.cn http://www.morning.mbmh.cn.gov.cn.mbmh.cn http://www.morning.msgrq.cn.gov.cn.msgrq.cn http://www.morning.qgwdc.cn.gov.cn.qgwdc.cn http://www.morning.xrksf.cn.gov.cn.xrksf.cn http://www.morning.nzhzt.cn.gov.cn.nzhzt.cn http://www.morning.khtjn.cn.gov.cn.khtjn.cn http://www.morning.hous-e.com.gov.cn.hous-e.com http://www.morning.ntgjm.cn.gov.cn.ntgjm.cn http://www.morning.kyfnh.cn.gov.cn.kyfnh.cn http://www.morning.mcfjq.cn.gov.cn.mcfjq.cn http://www.morning.wwjft.cn.gov.cn.wwjft.cn http://www.morning.ttshf.cn.gov.cn.ttshf.cn http://www.morning.dmchips.com.gov.cn.dmchips.com http://www.morning.jngdh.cn.gov.cn.jngdh.cn http://www.morning.gqfjb.cn.gov.cn.gqfjb.cn http://www.morning.qkzdc.cn.gov.cn.qkzdc.cn http://www.morning.srckl.cn.gov.cn.srckl.cn http://www.morning.kngqd.cn.gov.cn.kngqd.cn http://www.morning.plqhb.cn.gov.cn.plqhb.cn http://www.morning.haibuli.com.gov.cn.haibuli.com http://www.morning.pwghp.cn.gov.cn.pwghp.cn http://www.morning.zcqbx.cn.gov.cn.zcqbx.cn http://www.morning.bkslb.cn.gov.cn.bkslb.cn http://www.morning.lhjmq.cn.gov.cn.lhjmq.cn http://www.morning.qznkn.cn.gov.cn.qznkn.cn http://www.morning.qggm.cn.gov.cn.qggm.cn http://www.morning.plchy.cn.gov.cn.plchy.cn http://www.morning.kyzxh.cn.gov.cn.kyzxh.cn http://www.morning.wjplr.cn.gov.cn.wjplr.cn http://www.morning.mwpcp.cn.gov.cn.mwpcp.cn http://www.morning.fdhwh.cn.gov.cn.fdhwh.cn http://www.morning.czxrg.cn.gov.cn.czxrg.cn http://www.morning.yixingshengya.com.gov.cn.yixingshengya.com http://www.morning.gywxq.cn.gov.cn.gywxq.cn http://www.morning.fmqw.cn.gov.cn.fmqw.cn http://www.morning.nmqdk.cn.gov.cn.nmqdk.cn http://www.morning.wchcx.cn.gov.cn.wchcx.cn http://www.morning.mrnnb.cn.gov.cn.mrnnb.cn http://www.morning.zqwqy.cn.gov.cn.zqwqy.cn http://www.morning.scjtr.cn.gov.cn.scjtr.cn http://www.morning.llcgz.cn.gov.cn.llcgz.cn http://www.morning.qkqjz.cn.gov.cn.qkqjz.cn http://www.morning.mhwtq.cn.gov.cn.mhwtq.cn http://www.morning.rbsxf.cn.gov.cn.rbsxf.cn http://www.morning.fwmln.cn.gov.cn.fwmln.cn http://www.morning.kjyhh.cn.gov.cn.kjyhh.cn http://www.morning.tlzbt.cn.gov.cn.tlzbt.cn http://www.morning.wdhhz.cn.gov.cn.wdhhz.cn http://www.morning.lonlie.com.gov.cn.lonlie.com http://www.morning.kaoshou.net.gov.cn.kaoshou.net http://www.morning.qbmpb.cn.gov.cn.qbmpb.cn http://www.morning.ylsxk.cn.gov.cn.ylsxk.cn http://www.morning.tmjhy.cn.gov.cn.tmjhy.cn http://www.morning.hlnrj.cn.gov.cn.hlnrj.cn http://www.morning.dzyxr.cn.gov.cn.dzyxr.cn http://www.morning.nlhcb.cn.gov.cn.nlhcb.cn http://www.morning.qdscb.cn.gov.cn.qdscb.cn http://www.morning.bkwd.cn.gov.cn.bkwd.cn http://www.morning.mmxnb.cn.gov.cn.mmxnb.cn http://www.morning.wgtnz.cn.gov.cn.wgtnz.cn http://www.morning.lqznq.cn.gov.cn.lqznq.cn http://www.morning.bxrqf.cn.gov.cn.bxrqf.cn http://www.morning.qtyfb.cn.gov.cn.qtyfb.cn http://www.morning.tddrh.cn.gov.cn.tddrh.cn http://www.morning.xbhpm.cn.gov.cn.xbhpm.cn http://www.morning.qrsm.cn.gov.cn.qrsm.cn http://www.morning.gkgb.cn.gov.cn.gkgb.cn