前些日子做ogre时自己写的一个ogre测试程序
#include <stdio.h>
#include <Ogre.h>
using namespace Ogre;
#pragma comment(lib,"OgreMain_d")
Root* proot = NULL;
Camera* pcamera = NULL;
SceneManager* pscenemanager = NULL;
Light* plight = NULL;
RenderWindow* pwindow = NULL;
RenderSystem* prendersystem = NULL;
static int width = 800;
static int height = 600;
static int quit = 0;
DWORD WINAPI ThreadProc( LPVOID lpParameter){
do{
char ch = getchar();
if(ch == 'q'){
quit = 1;
break;
}
}while(true);
return 0;
}
int main(int argc,char* argv[]){
LARGE_INTEGER frequency ;
LARGE_INTEGER curr_time;
LARGE_INTEGER last_time;
int frame_rate = 25;
int per_freme = 0;
if(QueryPerformanceFrequency(&frequency)){
per_freme = frequency.QuadPart / frame_rate;
QueryPerformanceCounter(&curr_time);
last_time = curr_time;
}
proot = new Root();
Ogre::ResourceGroupManager::getSingleton().addResourceLocation("./", "FileSystem");
//Ogre::ResourceGroupManager::getSingleton().addResourceLocation("D:/ogre_src_v1-7-3/Samples/Media/models", "FileSystem");
//the resource path is very carefully
//and this path "X:\\path" is error
//and this path "X:/path" is right
Ogre::ResourceGroupManager::getSingleton().addResourceLocation("E:/mecode/ogre_test2/ogre_test2", "FileSystem");
//proot->loadPlugin("RenderSystem_Direct3D9_d");
proot->loadPlugin("RenderSystem_GL_d");
RenderSystemList render_list = proot->getAvailableRenderers();
RenderSystemList::iterator it ;
for(it = render_list.begin();it != render_list.end(); it++){
if((*it)->getName() == "OpenGL Rendering Subsystem")
{
prendersystem = *it;
proot->setRenderSystem(prendersystem);
break;
}
}
if(proot->getRenderSystem() == NULL){
printf("set render system failed\n");
return -1;
}
//proot->showConfigDialog();
proot->initialise(false);
pwindow = prendersystem->_createRenderWindow(
"MainWindow",
width,
height,
false,
0);
pscenemanager = proot->createSceneManager(ST_GENERIC, "zsqSceneManager") ;
pcamera = pscenemanager->createCamera("zsqCamera");
pcamera->setPosition(0, 0, 100);
pcamera->lookAt(0, 0, -1);
pcamera->setNearClipDistance(1);
pcamera->setFarClipDistance(200);
Viewport* vp = pwindow->addViewport(pcamera);
vp->setBackgroundColour(Ogre::ColourValue(0,0,0));
pcamera->setAspectRatio(Ogre::Real(vp->getActualWidth()) / Ogre::Real(vp->getActualHeight()));
pscenemanager->setAmbientLight(Ogre::ColourValue(1, 1, 1));
plight = pscenemanager->createLight();
plight->setPosition(20, 20, 20);
Ogre::TextureManager::getSingleton().setDefaultNumMipmaps(5);
Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
Entity* e = pscenemanager->createEntity("ogrehead.mesh");
//e->setMaterialName("");
SceneNode* node = pscenemanager->getRootSceneNode()->createChildSceneNode(
"node1",Ogre::Vector3(0,0,0));
node->attachObject(e);
//proot->startRendering();
int delt = 0;
while(quit == 0){
QueryPerformanceCounter(&curr_time);
delt = curr_time.QuadPart - last_time.QuadPart;
if(delt >= per_freme){
node->yaw(Radian(0.05f));
proot->renderOneFrame();
last_time = curr_time;
}
}
//HANDLE fresh_id = CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL );
if(proot){
delete proot;
proot = NULL;
}
return 0;
}