青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

Simple Ogre Win32 Program

 

Simple Win32 Program

Rational: I wanted to create an archetype program that would be able to handle multiple key combinations. Say, the right shift key and the the key character 'X'. My options available OIS, MFC, or WxWindows. MFC and WxWindows would be a lot overhead and dll version management for what is a simple program. After unsuccseful attempts at making OIS work I decided that the [Petzold:http://en.wikipedia.org/wiki/Charles_Petzold] style of program would minimize the windows "portion" and show how ogre would need to interact. When finished this program would show the classic orgehead mesh, respond to a few key inputs and adjust to camera position in response to the mouse or the keyboard.


First this program was created with Microsoft Visual Studio 2003 and links to the einhort version 1.3.0 of ogre library. The easiest way to start off is to use the wizard to create a simple windows application ogre32,which should give you the following files: 

ogre32.cpp
ogre32.h
ogre32.ico
ogre32.ncb
ogre32.rc
ogre32.sln
ogre32.vcproj
ReadMe.txt
Resource.h
small.ico
stdafx.cpp
stdafx.h
Before modifying the code that the wizard created you will need to get the media files and scripts necessary to display the ogrehead.mesh file. To do this you will need to create the directory 'media' under your main project and copy the following files into this directory. The png and jpg files can be found in the one of textures directory. The Ogre.material file is modified version of the Ogre.material file that comes with ogre source code. The origininal can be found at .\ogrenew\Samples\Media\materials\scripts. 


cursor.png
dirt01.jpg
GreenSkin.jpg
Ogre.material
ogreborder.png
ogreborderUp.png
ogrehead.mesh
spheremap.png
WeirdEye.png
You will need to create three configuration files: 


ogre.cfg
Plugins.cfg
resources.cfg

ogre.cfg

Render System=Direct3D9 Rendering Subsystem

[Direct3D9 Rendering Subsystem]
Allow NVPerfHUD
=No
Anti aliasing
=None
Floating-point mode
=Fastest
Full Screen
=No
Rendering Device
=NVIDIA GeForce FX 5200
VSync
=No
Video Mode
=800 x 600 @ 32-bit colour

[OpenGL Rendering Subsystem]
Colour Depth
=32
Display Frequency
=60
FSAA
=0
Full Screen
=Yes
RTT Preferred Mode
=FBO
VSync
=No
Video Mode
=1024 x 768

Plugins.cfg

# Defines plugins to load

# Define plugin folder
PluginFolder
=.

# Define plugins
Plugin
=RenderSystem_Direct3D9

resources.cfg

# Resource locations to be added to the default path
[General]
FileSystem
=./media
You will need to edit the follow files: 
stdafx.h
ogre32.cpp

stdafx.h

#pragma once


#define WIN32_LEAN_AND_MEAN
#include 
<windows.h>
// C RunTime Header Files
#include <stdlib.h>
#include 
<malloc.h>
#include 
<memory.h>
#include 
<tchar.h>
#include 
<Ogre.h>    //brings in most everything

 

ogre32.cpp

The following is the original ogre32.cpp file This will create a simple project that displays the ogrehead mesh file.
// ogre32.cpp : Defines the entry point for the application.
//

#include 
"stdafx.h"
#include 
"ogre32.h"
#define MAX_LOADSTRING 100

// Global Variables:
HINSTANCE hInst;            // current instance
TCHAR szTitle[MAX_LOADSTRING];        // The title bar text
TCHAR szWindowClass[MAX_LOADSTRING];    // the main window class name

using namespace Ogre; // <-- ultimate in lazy

 

The most important of the following variables is mRoot. As the "Root class represents a starting point for the client application. From here, the application can gain access to the fundamentals of the system ... and Root must be created before any other Ogre operations are called. Once an instance has been created, the same instance is accessible throughout the life of that object by using Root::getSingleton (as a reference) or Root::getSingletonPtr (as a pointer). " See http://www.ogre3d.org/docs/api/html/classOgre_1_1Root.html#_details for more details.

Please consult the wiki for more detailed reasons on why we added each of these variables.

Root *mRoot             = 0;  // 
SceneManager *mSceneMgr = 0;  // 
Camera *mCamera         = 0;  // 
Viewport* mViewPort     = 0
RenderWindow
* mRenderWindow=0

// Forward declarations of functions included in this code module:
ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, 
int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK    About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     
int       nCmdShow)
{
     
// TODO: Place code here.
    MSG msg;
    HACCEL hAccelTable;
    HWND hWnd;
    
// Initialize global strings
    LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadString(hInstance, IDC_OGRE32, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);

    
    hInst 
= hInstance; // Store instance handle in our global variable

    hWnd 
= CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

    
if (!hWnd)
    
{
        
return FALSE;
    }

create the root ogre system
mRoot = new Root();

 load the configuration file why?
    ConfigFile cf;
    cf.load(
"resources.cfg");

    ConfigFile::SectionIterator seci 
= cf.getSectionIterator();

    String secName, typeName, archName;
    
while (seci.hasMoreElements())
    
{
        secName 
= seci.peekNextKey();
        ConfigFile::SettingsMultiMap 
*settings = seci.getNext();
        ConfigFile::SettingsMultiMap::iterator i;
        
for (i = settings->begin(); i != settings->end(); ++i)
        
{
            typeName 
= i->first;
            archName 
= i->second;
            ResourceGroupManager::getSingleton().addResourceLocation(
                archName, typeName, secName);
        }

    }

 Load the directx rendering system we dont have to Display the configuration dialog.
RenderSystemList *rsList = mRoot->getAvailableRenderers();
    
int c=0;
    
bool foundit = false;
    RenderSystem 
*selectedRenderSystem=0;
    
while(c < (int) rsList->size())
    
{
        selectedRenderSystem 
= rsList->at(c);
        String rname 
= selectedRenderSystem->getName();
        
if(rname.compare("Direct3D9 Rendering Subsystem")==0)
        
{
            foundit
=true;
            
break;
        }

        c
++// <-- oh how clever
    }

    
if(!foundit) 
        
return FALSE; //we didn't find it

    
//we found it, we might as well use it!
    mRoot->setRenderSystem(selectedRenderSystem);

    selectedRenderSystem
->setConfigOption("Full Screen","No");  
    selectedRenderSystem
->setConfigOption("Video Mode","800 x 600 @ 16-bit colour");

    
//retrieve the config option map
    ConfigOptionMap comap = selectedRenderSystem->getConfigOptions();

    
//and now we need to run through all of it
    ConfigOptionMap::const_iterator start = comap.begin();
    ConfigOptionMap::const_iterator end 
= comap.end();
    
while(start != end)
    
{
        String OptionName 
= start->first;
        String CurrentValue 
= start->second.currentValue;
        StringVector PossibleValues 
= start->second.possibleValues;
        
int c=0;
        
while (c < (int) PossibleValues.size())
        
{
            String OneValue 
= PossibleValues.at(c);
            c
++;
        }

    start
++;
    }
    
    
//end boilerplate

 this is the magic! here is where we take the window that has been previously been created and attach ogre to it.
mRoot->initialise(false,"Some Window Title");
    NameValuePairList misc;
    misc[
"externalWindowHandle"= StringConverter::toString( (size_t)hWnd);
    mRenderWindow 
= mRoot->createRenderWindow( "My sub render window"800600false&misc );

 create a scene manager
// choose sm
    mSceneMgr = mRoot->createSceneManager(ST_GENERIC, "mSceneMgr");
    mSceneMgr
->setAmbientLight(ColourValue(0.50.50.5));

This is so we can have scripts work and the mesh is properly rendered.
ResourceGroupManager::getSingleton().initialiseAllResourceGroups();

 Load a mesh that is located in the ./media directory.
Entity *ent1 = mSceneMgr->createEntity( "ogre""ogrehead.mesh" );
        SceneNode 
*node1 = mSceneMgr->getRootSceneNode()->createChildSceneNode( "RobotNode" );
        node1
->attachObject( ent1 );

 Create a camera so we can look at his lovely mug.
// --------------------
    
// Create the camera
    mCamera = mSceneMgr->createCamera("PlayerCam");
    
// Position it at 500 in Z direction
    mCamera->setPosition(Ogre::Vector3(0,0,500));
    
// Look back along -Z
    mCamera->lookAt(Ogre::Vector3(0,0,-300));
    mCamera
->setNearClipDistance(5);
    
// Set the viewport
    mViewPort = mRenderWindow->addViewport(mCamera);
    mViewPort
->setBackgroundColour(Ogre::ColourValue(0.0f0.0f0.0f1.0f)); 

    ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);

    
    hAccelTable 
= LoadAccelerators(hInstance, (LPCTSTR)IDC_OGRE32);

    
// Main message loop:
    while (GetMessage(&msg, NULL, 00)) 
    
{       
                
//placing renderOneFrame seems to allow for a clean shutdown.
                
//thanks to user lakin for that hint.
        if (mRoot->renderOneFrame()) 
        
{
            TranslateMessage(
&msg);
            DispatchMessage(
&msg);
        }

    }


    
return (int) msg.wParam;
}


ATOM MyRegisterClass(HINSTANCE hInstance)
{
    WNDCLASSEX wcex;

    wcex.cbSize 
= sizeof(WNDCLASSEX); 

    wcex.style            
= CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    
= (WNDPROC)WndProc;
    wcex.cbClsExtra        
= 0;
    wcex.cbWndExtra        
= 0;
    wcex.hInstance        
= hInstance;
    wcex.hIcon            
= LoadIcon(hInstance, (LPCTSTR)IDI_OGRE32);
    wcex.hCursor        
= LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground    
= (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName    
= NULL;
    wcex.lpszClassName    
= szWindowClass;
    wcex.hIconSm        
= LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);

    
return RegisterClassEx(&wcex);
}


BOOL InitInstance(HINSTANCE hInstance, 
int nCmdShow)
{
   HWND hWnd;

   hInst 
= hInstance; // Store instance handle in our global variable

   hWnd 
= CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, 
0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

   
if (!hWnd)
   
{
      
return FALSE;
   }


   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);

   
return TRUE;
}


LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    
int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;

    
switch (message) 
    
{
    
case WM_COMMAND:
        wmId    
= LOWORD(wParam); 
        wmEvent 
= HIWORD(wParam); 
        
// Parse the menu selections:
        switch (wmId)
        
{
        
case IDM_EXIT:

 I was told to do this. This may or may not be necessary.
        mRoot->detachRenderTarget(mRenderWindow);
            DestroyWindow(hWnd);
            
break;
        
default:
            
return DefWindowProc(hWnd, message, wParam, lParam);
        }
        
break;
    
case WM_PAINT:
        hdc 
= BeginPaint(hWnd, &ps);
        
// TODO: Add any drawing code here

        EndPaint(hWnd, 
&ps);
        
break;
    
case WM_DESTROY:
 
        PostQuitMessage(
0);
        
break;

 Returning 1 will cause the screen not flicker when the window is being resized.
case WM_ERASEBKGND:
      
return 1;

 Handle resizing the window. one of the things this program does not do is display full screen. This should be relatively simple to implement. Also the section is direct translation of the WxWindows code that was posted to forum.
case WM_SIZE:
        
if (mCamera) 
        

            RECT rect; 
            GetClientRect(hWnd,
&rect); 

            
// notify "render window" instance 
            mRenderWindow->windowMovedOrResized(); 

            
// Adjust camera's aspect ratio, too 
            if ((rect.bottom - rect.top) != 0 && mCamera != 0
                mCamera
->setAspectRatio((Ogre::Real)mRenderWindow->getWidth() / (Ogre::Real)mRenderWindow->getHeight()); 
            mCamera
->yaw(Radian(0));
            Root::getSingletonPtr()
->renderOneFrame(); 
        }


        
break;
    
default:
        
return DefWindowProc(hWnd, message, wParam, lParam);
    }
    
return 0;
}

#endif

 

Thanks

I wish to thank the users Lodes,lakin,pjcast, and RutgerJanssen.

posted on 2007-04-06 11:21 楊粼波 閱讀(932) 評論(0)  編輯 收藏 引用

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久国内精品自在自线400部| 好吊视频一区二区三区四区 | 久久躁日日躁aaaaxxxx| 亚洲影音一区| 欧美一区二区精美| 久久人人九九| 亚洲欧洲精品一区二区精品久久久 | 久久视频国产精品免费视频在线 | 国产亚洲高清视频| 亚洲国产精品va在线观看黑人| 亚洲日本aⅴ片在线观看香蕉| 日韩午夜在线电影| 欧美一区二区免费| 欧美福利一区| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲欧美综合| 欧美激情国产日韩精品一区18| 国产精品v亚洲精品v日韩精品| 国产一区成人| 亚洲视频一区| 免费看黄裸体一级大秀欧美| 亚洲精品在线二区| 久久精品1区| 欧美日韩在线一二三| 韩国女主播一区| 亚洲性图久久| 欧美黄网免费在线观看| 亚洲性线免费观看视频成熟| 麻豆国产精品va在线观看不卡| 国产精品乱码妇女bbbb| 亚洲国产高清视频| 欧美影片第一页| 一区二区三区久久网| 久热精品在线视频| 国产一区二区成人久久免费影院| 中文精品视频| 亚洲精品1234| 欧美fxxxxxx另类| 一区视频在线看| 性做久久久久久| 亚洲精品一区二区三区福利| 久久亚洲不卡| 伊人成人在线| 美女脱光内衣内裤视频久久影院| 亚洲网友自拍| 欧美午夜精品| 一区二区三区精密机械公司| 欧美激情性爽国产精品17p| 久久激情婷婷| 韩国精品一区二区三区| 欧美亚洲一区二区在线观看| 一区二区三区欧美成人| 欧美偷拍另类| 亚洲在线观看视频| 在线亚洲高清视频| 国产精品久久久久久妇女6080| 欧美国产日韩精品免费观看| 久久综合狠狠综合久久激情| 久久精品综合一区| 国产精品乱子久久久久| 亚洲私人影院在线观看| 亚洲大胆在线| 免费亚洲电影在线| 亚洲国产欧美国产综合一区| 老司机凹凸av亚洲导航| 久久国产一区| **性色生活片久久毛片| 欧美岛国在线观看| 欧美国产高清| 一本一本久久a久久精品牛牛影视| 欧美a级在线| 欧美电影免费观看大全| 夜夜爽夜夜爽精品视频| 亚洲人成网站777色婷婷| 欧美黄色视屏| 亚洲深夜福利网站| 午夜精品亚洲| 亚洲国产精品第一区二区三区| 欧美国产欧美综合| 欧美日韩一区在线播放| 欧美一区二区三区在线播放| 欧美一区二区三区免费视频| 在线免费观看一区二区三区| 亚洲经典一区| 国产精品嫩草久久久久| 久久久久久久一区二区| 老司机一区二区三区| 亚洲视频第一页| 性做久久久久久久免费看| 精品二区久久| 一本色道**综合亚洲精品蜜桃冫| 国产视频在线一区二区| 亚洲人精品午夜在线观看| 国产女主播一区二区三区| 男人的天堂成人在线| 国产精品久久久久久超碰 | 亚洲欧洲另类| 亚洲视频在线视频| 亚洲国产高清视频| 亚洲欧美福利一区二区| 亚洲国产一区在线观看| 亚洲午夜视频| aa国产精品| 久久久久久国产精品mv| 亚洲愉拍自拍另类高清精品| 老司机免费视频久久| 欧美一区二区成人| 欧美精品少妇一区二区三区| 久久久在线视频| 国产精品久久一卡二卡| 亚洲福利国产精品| 曰韩精品一区二区| 亚洲一区免费网站| 亚洲最黄网站| 牛人盗摄一区二区三区视频| 国产拍揄自揄精品视频麻豆| 欧美成人一区在线| 国产三级欧美三级| 亚洲一区二区三区四区五区黄| 亚洲国产一成人久久精品| 久久精品91| 久久精品中文| 国产精品一区免费观看| 一本色道久久综合亚洲91| 99国产一区| 欧美激情第三页| 亚洲国产一区二区三区a毛片| 韩日成人av| 久久久国产午夜精品| 久久久久**毛片大全| 国产情人节一区| 欧美一区二区三区视频在线观看 | 日韩视频三区| 一本色道综合亚洲| 欧美日韩国产天堂| 亚洲精品欧美一区二区三区| 亚洲国产婷婷香蕉久久久久久99| 久久久久久噜噜噜久久久精品| 久久久精品国产免费观看同学| 国产午夜精品美女毛片视频| 欧美影院在线| 美女91精品| 亚洲精品一区二区三区婷婷月| 裸体一区二区三区| 亚洲国产精品久久精品怡红院| 亚洲精选视频免费看| 欧美日韩另类一区| 亚洲一区二区在| 久久久久天天天天| 亚洲国产精品一区二区久| 欧美freesex8一10精品| 亚洲人体一区| 午夜精品久久久久久| 国产字幕视频一区二区| 老司机午夜精品视频| 亚洲精品一区二| 久久动漫亚洲| 亚洲国产日韩欧美在线99| 欧美母乳在线| 午夜视频在线观看一区二区| 欧美a级大片| 亚洲一区二区三区四区视频| 国产一区二区三区在线免费观看| 久久影院亚洲| 亚洲深夜福利网站| 欧美/亚洲一区| 亚洲一区在线观看免费观看电影高清| 国产精品一区二区在线观看网站| 久久一区二区视频| 中文亚洲视频在线| 牛夜精品久久久久久久99黑人| 一区二区欧美国产| 韩国视频理论视频久久| 欧美日韩一二三区| 久久九九热免费视频| 日韩视频在线免费观看| 久久婷婷国产综合国色天香| 一本一本久久a久久精品牛牛影视| 国产欧美在线看| 欧美日韩黄色大片| 久久久国产91| 亚洲综合色激情五月| 亚洲精品国偷自产在线99热| 久久夜色精品国产欧美乱极品| 亚洲视频香蕉人妖| 亚洲黑丝在线| 国内精品久久久久影院 日本资源| 亚洲国产另类 国产精品国产免费| 欧美一区二区三区视频免费| 亚洲七七久久综合桃花剧情介绍| 国产欧美一区二区在线观看| 欧美经典一区二区三区| 久久久久88色偷偷免费| 亚洲一区二三| 一卡二卡3卡四卡高清精品视频| 欧美va亚洲va香蕉在线| 久久久欧美一区二区| 亚洲欧美第一页| 一区二区三区www| 亚洲经典三级|