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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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>
            99精品国产高清一区二区| 国产欧美日韩视频在线观看| 亚洲高清资源| 欧美激情五月| 欧美日韩和欧美的一区二区| 宅男在线国产精品| 夜夜爽www精品| 国产亚洲第一区| 久久综合中文字幕| 日韩亚洲成人av在线| 亚洲视频图片小说| 国内外成人在线视频| 免费观看日韩| 欧美日韩一区二区三区免费看 | 欧美另类视频在线| 亚洲一区免费网站| 久久精品欧美日韩| 一区二区三区免费在线观看| 亚洲在线视频一区| 亚洲激情国产| 亚洲午夜一区| 亚洲经典自拍| 欧美在线电影| 一区二区三区国产精华| 久久成年人视频| 中国日韩欧美久久久久久久久| 欧美一区二区三区婷婷月色 | 亚洲日韩欧美视频一区| 国产精品看片资源| 欧美激情中文不卡| 国产午夜精品理论片a级探花 | 久久久一二三| 欧美四级在线| 亚洲高清视频一区二区| 国产在线不卡视频| 欧美激情精品久久久久| 国产日韩精品在线观看| 99精品视频免费观看| 18成人免费观看视频| 亚洲欧美视频在线观看| 在线性视频日韩欧美| 久久偷看各类wc女厕嘘嘘偷窃| 亚洲在线观看视频| 欧美久久一区| 欧美国产1区2区| 国产一区二区无遮挡| 亚洲午夜女主播在线直播| 夜色激情一区二区| 噜噜噜久久亚洲精品国产品小说| 久久精品视频在线看| 国产精品视频精品视频| 日韩一二三区视频| 99精品国产热久久91蜜凸| 久色成人在线| 欧美高清视频在线| 亚洲国产婷婷香蕉久久久久久| 欧美影视一区| 久久久亚洲人| 一区在线免费观看| 老鸭窝91久久精品色噜噜导演| 久久精品亚洲一区二区三区浴池| 国产精品一区二区久久国产| 亚洲天堂成人| 午夜精品av| 国产美女一区二区| 香蕉久久一区二区不卡无毒影院| 欧美一级播放| 国产日本欧洲亚洲| 欧美一区二区三区在线看| 久久精品卡一| 伊人精品成人久久综合软件| 久久综合伊人77777麻豆| 欧美xart系列高清| 亚洲精品欧美日韩专区| 欧美日韩一区在线播放| 亚洲一区综合| 久久亚洲精选| 日韩亚洲欧美中文三级| 国产精品高精视频免费| 欧美怡红院视频| 欧美激情国产日韩| 中文网丁香综合网| 国产日产欧美精品| 快射av在线播放一区| 亚洲精品久久久久久久久久久久久| 亚洲无吗在线| 国产亚洲va综合人人澡精品| 久久亚洲欧美国产精品乐播| 亚洲久久成人| 久久激情久久| 亚洲精品乱码久久久久久| 国产精品国产自产拍高清av王其 | 欧美一区二区视频在线| 欧美岛国激情| 亚洲欧美国内爽妇网| 伊人色综合久久天天| 欧美日本在线播放| 欧美一区三区三区高中清蜜桃 | 亚洲欧洲综合另类在线| 亚洲欧美另类国产| 亚洲国产一区二区三区在线播 | 亚洲国产专区校园欧美| 欧美小视频在线| 老司机精品久久| 亚洲一区高清| 最新国产成人av网站网址麻豆| 欧美一区二区三区在线看| 亚洲精选视频免费看| 国产香蕉97碰碰久久人人| 欧美视频二区| 蜜臀久久99精品久久久久久9| 亚洲一区二区三区乱码aⅴ| 欧美国产欧美亚州国产日韩mv天天看完整| 亚洲综合日韩中文字幕v在线| 在线免费一区三区| 国产日韩欧美三区| 欧美性淫爽ww久久久久无| 美日韩精品视频| 久久久免费精品视频| 亚洲女同同性videoxma| 99re热这里只有精品视频| 欧美丰满高潮xxxx喷水动漫| 欧美怡红院视频| 亚洲欧美日韩第一区| 一本色道久久88亚洲综合88| 亚洲二区免费| 伊人影院久久| 精品福利av| 激情六月婷婷综合| 国产在线观看一区| 国产午夜精品全部视频在线播放| 国产精品久久久久久久久久久久久| 欧美激情中文字幕乱码免费| 麻豆免费精品视频| 久久综合五月| 欧美成人免费全部观看天天性色| 久久免费国产精品| 久久亚洲精选| 蜜臀av性久久久久蜜臀aⅴ| 久久九九99视频| 久久久久久97三级| 久久―日本道色综合久久| 久久久久se| 麻豆成人综合网| 欧美1区3d| 欧美欧美全黄| 国产精品高潮视频| 国产日韩在线一区| 激情久久中文字幕| 亚洲精品之草原avav久久| 亚洲精品视频在线观看免费| 亚洲三级免费| 亚洲欧美国产77777| 香蕉亚洲视频| 久久久一本精品99久久精品66| 葵司免费一区二区三区四区五区| 久久综合九九| 亚洲高清视频在线| 一本色道婷婷久久欧美| 亚洲淫片在线视频| 久久精品视频在线免费观看| 欧美刺激性大交免费视频| 欧美日韩精品久久久| 国产九区一区在线| 亚洲国产精品成人综合| 一区二区激情| 久久精品色图| 最近中文字幕日韩精品 | 国产精品成人一区二区| 国产亚洲精品久久久久婷婷瑜伽 | 国产日韩一区二区三区在线| 极品尤物一区二区三区| 日韩亚洲欧美高清| 久久国产一区| 最新中文字幕亚洲| 午夜精品久久久久久久99热浪潮| 久久久久成人精品| 国产精品成人一区二区网站软件| 国产日韩欧美制服另类| 亚洲精品视频在线播放| 久久精品成人欧美大片古装| 亚洲国产一区在线| 亚洲欧美日韩一区二区| 欧美大片18| 国际精品欧美精品| 亚洲一区二区欧美日韩| 欧美电影免费观看大全| 亚洲欧美激情一区| 欧美日韩亚洲综合| 亚洲国产精品欧美一二99| 欧美一级播放| 一本久道久久久| 免费黄网站欧美| 国产亚洲欧美另类一区二区三区| 日韩亚洲综合在线| 欧美va天堂在线| 久久se精品一区精品二区| 国产精品欧美精品| 中国亚洲黄色| 亚洲精品一二区|