{S0}简介
这是一个简单的框架为原型的OpenGL和游戏应用。起床和运行所有已经内置了最常用的工具,它提供了一个快速的方法
在该框架包括以下特点:COLLADA装载机OpenGL渲染FreeType字体渲染TGA纹理载入中帧速率计数Full-screen/Windowed支持
zip文件,里面包括以下编译的第三方库。COLLADA DOMGLEWFREETYPE使用代码
为了使用该框架,只需解压GLDemoApp_demo.zip。与Visual Studio 2005中打开该项目。与Visual Studio 2008时,有一些已知问题,您将需要重建的COLLADA DOM库与Visual Studio 2008。
使用该框架之前,请花点时间观察的目录结构。在顶层,应该有三个目录:"; 3rdPartyquot"; - 包含所有框架中使用的第三方库和头文件"; binquot" - 这是建设的解决方案后,所有的可执行文件,这个目录里面是这些子目录:释放和资源"; GLDemoAppquot" - 这是所有的源文件和*. sln文件包含
代码的兴趣点主要包含内部demo.cpp。在这个文件中,有三个功能:void InitDemo()
{
RenderInit();
CColladaLoader loader;
g_pTestColladaMesh = loader.LoadColladaFile(BuildResourcePath("test.dae"));
g_uiTextureId = RenderLoadTexture(BuildResourcePath("test.tga"));
}
bool RunDemo()
{
static float32 fRotation = 0.0f;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
gluLookAt(0.0f, 0.0f, 10.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f);
RenderGroundGrid(-4.0f);
glPushMatrix();
glRotatef(fRotation, 1.0f, 1.0f, 1.0f);
RenderMesh(*g_pTestColladaMesh);
glPopMatrix();
glPushMatrix();
glPointSize(10.0f);
glBegin(GL_POINTS);
glColor3f(1.0f, 1.0f, 1.0f);
glVertex3f(0.0f, 0.0f, 0.0f);
glEnd();
glPopMatrix();
glPopMatrix();
RenderText(&g_defaultFont, "F1 : Fullscreen", Vector2f(0.0f, 20.0f));
RenderText(&g_defaultFont, "F2 : Windowed", Vector2f(0.0f, 40.0f));
RenderBegin2dMode();
RenderTexture(Vector2f(RenderGetOrthoWidth() * .5f, 50.0f), g_uiTextureId, 0.0f);
RenderEnd2dMode();
if(GetAsyncKeyState(VK_F1))
{
sRenderResolution sRes;
sRes.nWidth = RenderGetDesiredWidth();
sRes.nHeight = RenderGetDesiredHeight();
sRes.nBitDepth = RenderGetBitDepth();
RenderSetResolution(sRes, true);
}else if(GetAsyncKeyState(VK_F2))
{
sRenderResolution sRes;
sRes.nWidth = RenderGetDesiredWidth();
sRes.nHeight = RenderGetDesiredHeight();
sRes.nBitDepth = RenderGetBitDepth();
RenderSetResolution(sRes, false);
}
fRotation += .1f;
if(fRotation > 360.0f)
fRotation = 0.0f;
RenderStats();
RenderSwapBuffers();
return (GetAsyncKeyState(VK_ESCAPE) & 0xFFFF) ? false : true;
}
void EndDemo()
{
RenderReleaseTexture(g_uiTextureId);
RenderReleaseMesh(&g_pTestColladaMesh);
RenderDestroy();
}
这是很容易看到在这里是怎么回事。 InitDemo()被称为gldemoapp.cpp内从WinMain函数右,前主应用程序进入循环。 InitDemo()函数内,你应该添加任何初始化代码,您需要为您的应用程序。请记住,此功能仅在应用程序的生命周期称为一次。默认情况下,InitDemo()函数里面,有一些代码,加载一个COLLADA文件,纹理文件。你可以简单地删除这段代码最RenderInit(),它所有的OpenGL初始化的东西除外。 BuildResourcePath()函数建立一个从正在运行的应用程序到当前目录的相对路径,一个目录内的文件夹名为quot; resourcesquot;在目录结构看,你会看到BuildResourcePath()始终提供了一个路径,是quot; ACTUALPATH \ \ BIN \ \ \ \ yourfilename.extquot;
接下来是RunDemo()函数。里面有,你应该把大量代码。在应用程序的执行,这个函数被调用多次。重要的是要注意,这个函数返回一个bool。这表明应用程序是否应继续运行,或立即退出。正如你可以看到,有几个画已经在这个函数调用。这些在这里只是为了演示,并可以安全地删除。虽然,你应该保持glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)和RenderSwapBuffers()。
最后,EndDemo()函数被调用时,应用程序终止其执行。这是最清理代码应放在哪里。渲染功能
该框架提供了许多实用工具,应使用OpenGL轻松了许多。这里列出了一些渲染和实用的功能,你可能会发现有用的:{C}
从磁盘加载的TGA纹理和返回的OpenGL纹理对象ID。这个ID可以用来调用glBindTexture。RenderGroundGrid(float32 fYPos)
此功能在地面上绘制一个网格在给定的Y坐标位置。RenderText(CFTFont* pFont, const char* strText, Vector2f& vtPosition, float32 fScale, const sRGBColor& rgbColor)
此功能显示文字的使用作为第一个参数提供的字体。默认情况下,在RenderInit()中,有加载的字体,并可以通过使用全局变量g_defaultFont的访问。例如,如果你想显示一些文本,你可以做以下...RenderText(&g_defaultFont, "Your cool text here", Vector2f(0.0f, 20.0f));
RenderQueryResolutions(std::list<srenderresolution />& lstResolution)
获取当前显示可用的决议清单。RenderSetResolution(sRenderResolution& rRes, bool bFullScreen)
当前的分辨率设置为OpenGL窗口。此外,它还可以切换到全屏通过quot; truequot;在第二个参数。例如,要设置分辨率和切换到全屏幕,你可以做以下...sRenderResolution rRes;
rRes.nWidth = 640;
rRes.nHeight = 480;
rRes.nBitDepth = 32;
RenderSetResolution(rRes, true);
RenderBegin2dMode()
使用此功能,将当前的投影矩阵切换是正字。重要的是要注意的是正交决议是独立的决议角度。RenderEnd2dMode()
使用此当你在正交模式绘图功能。下面的代码片段将在50,50加载的纹理绘制:RenderBegin2dMode();
RenderTexture(50.0f, 50.0f), g_uiTextureId, 0.0f);
RenderEnd2dMode();
std::string ReadTextFileToBuffer(const std::string& strFileName)
这个函数会从磁盘加载一个文件,并把它的内容,在返回的缓冲区。这是载入着色器非常有用。实用工具类
除了上述功能,有几类,你会发现有用的框架工作时:CFTFont这个类是一个包装FreeType库。它将加载一个给定的FreeType字体和创造适当的渲染显示列表。您可以使用这个类的一个实例作为一个参数为RenderText。
CColladaLoader这是一个COLLADA DOM库的包装类。这将加载COLLADA网格文件,并存储到一个sMesh实例的常数。一旦该文件已被加载和处理,负载的函数返回的实例,可用于在呼叫无效RenderMesh(常量sMeshamp; pMesh)。 loader会只要加载纹理,因为它们是TGA格式。请记住很多COLLADA提供额外的数据将被丢弃,一旦加载。CFTFont coolFont;
coolFont.Init(BuildResourcePath("MyAwesomeFont.TTF"), 18);
RenderText(&coolFont, "Loaded the font!", Vector2f(0.0f, 20.0f));
其他注意事项CColladaLoader loader;
sMesh* pMyMesh = loader.LoadColladaFile(BuildResourcePath("colladaTest.dae"));
RenderMesh(*pMyMesh);
//Once you are done with the mesh call
//
RenderReleaseMesh(&pMyMesh);
觉得免费提供源文件看。在您的处置有许多辅助功能,应该让你的生活更容易。如果你运行运行编译的可执行文件的任何问题,务必仔细检查你的quot;工作Directoryquot的设置(应quot; .. \ BIN \ debugquot调试版本和quot; .. \ BIN \ releasequot针对Release版本)。此选项可根据quot; Debuggingquot;在解决方案属性"窗口。
如果您有任何疑问或代码注释,请随时联系rebelcoder gmail.com我。历史三月四日,2009年:战后初期三月四日,2009:第所做的更改|克里斯蒂安卡拉索