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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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>
            鲁大师成人一区二区三区| 久久久久久久久一区二区| 欧美成人国产| 欧美一区二区三区在线视频| 在线一区二区日韩| 亚洲久久成人| 在线亚洲精品| 香港久久久电影| 欧美一区激情视频在线观看| 国产精品黄页免费高清在线观看| 国产精品久久婷婷六月丁香| 国产美女精品在线| 一区二区三区我不卡| 在线日韩日本国产亚洲| 亚洲人成绝费网站色www| 亚洲乱码精品一二三四区日韩在线| 日韩系列在线| 欧美一区二区日韩一区二区| 久久尤物电影视频在线观看| 亚洲高清在线播放| 99亚洲视频| 午夜视频在线观看一区二区| 久久九九精品| 欧美日韩中文字幕在线| 国产日韩一级二级三级| 在线激情影院一区| 亚洲午夜成aⅴ人片| 久久精品国产91精品亚洲| 欧美国产一区二区在线观看| 宅男在线国产精品| 久久综合给合久久狠狠色| 欧美日韩在线播| 在线观看成人网| 亚洲人www| 亚洲永久免费av| 六月丁香综合| 中文高清一区| 蜜臀va亚洲va欧美va天堂 | 韩国三级在线一区| 99在线精品视频在线观看| 欧美有码视频| 亚洲日本一区二区| 久久精品视频99| 国产精品爱久久久久久久| 在线看片第一页欧美| 亚洲欧美日韩国产精品| 亚洲第一精品夜夜躁人人爽| 午夜精品久久久久99热蜜桃导演| 欧美另类一区| 亚洲日韩视频| 久色成人在线| 欧美一区亚洲一区| 国产精品盗摄一区二区三区| 亚洲精品视频在线播放| 老司机精品视频网站| 亚洲一区精品视频| 欧美天天影院| 亚洲丝袜av一区| 亚洲精选久久| 欧美日韩蜜桃| 亚洲一二三区在线| 日韩一区二区精品| 欧美精选在线| 夜夜嗨av一区二区三区网站四季av| 美国十次成人| 乱人伦精品视频在线观看| 国产自产2019最新不卡| 欧美制服丝袜| 欧美一区二区视频网站| 国产日韩精品一区二区三区在线| 先锋影音一区二区三区| 亚洲欧美日本视频在线观看| 国产精品私人影院| 欧美亚洲在线观看| 欧美一区二区三区久久精品茉莉花| 国产欧美一二三区| 欧美自拍丝袜亚洲| 久久se精品一区精品二区| 黄色成人av| 亚洲激情不卡| 欧美日韩国产综合视频在线| 亚洲图片欧美日产| 亚洲综合三区| 在线日韩av片| 日韩午夜电影av| 国产精品一区二区在线观看| 欧美一级大片在线观看| 久久福利精品| 亚洲精品之草原avav久久| 99re66热这里只有精品4| 国产精品欧美经典| 亚洲国产美女精品久久久久∴| 在线精品视频免费观看| 亚洲第一网站免费视频| 欧美日韩亚洲一区二| 亚洲欧美日韩视频一区| 亚洲二区视频| 欧美日韩专区| 麻豆九一精品爱看视频在线观看免费| 免费成人在线观看视频| 亚洲午夜激情网站| 久久精品久久综合| 一卡二卡3卡四卡高清精品视频| 亚洲一区二区av电影| 在线电影院国产精品| 一本一本久久| 亚洲精华国产欧美| 亚洲欧美另类国产| 亚洲破处大片| 久久精品99| 午夜精品福利一区二区三区av| 久久亚洲精品伦理| 午夜一区二区三区在线观看| 免费高清在线视频一区·| 午夜精品久久久久影视| 欧美刺激性大交免费视频| 欧美中文在线观看| 欧美日韩亚洲91| 欧美大片第1页| 国产欧美在线看| 一区二区免费在线观看| 欧美吻胸吃奶大尺度电影| 免费在线亚洲| 国产网站欧美日韩免费精品在线观看 | 午夜精品久久久久久久久久久久久 | 国产伦精品一区二区三区照片91| 欧美~级网站不卡| 国产欧美一区二区三区久久人妖 | 免费在线看一区| 国产一区二区日韩精品| av成人免费在线| 日韩网站在线| 免费中文日韩| 欧美a级一区二区| 国产精品一页| 中文国产一区| 亚洲中字在线| 国产精品wwwwww| 在线视频你懂得一区| 亚洲精品在线视频观看| 久久亚洲私人国产精品va| 久久天天狠狠| 精品动漫3d一区二区三区免费| 欧美一级成年大片在线观看| 亚洲欧美中日韩| 国产精品夜夜夜| 欧美一级免费视频| 久久精品视频亚洲| 亚洲精品久久嫩草网站秘色| 国产一区二区三区成人欧美日韩在线观看 | 久久精品人人做人人爽电影蜜月 | 亚洲精品一级| 欧美精品国产精品日韩精品| 欧美国产亚洲精品久久久8v| 亚洲第一网站| 欧美jjzz| 亚洲精选视频免费看| 亚洲一区在线直播| 国产精品久久福利| 性色一区二区| 欧美国产激情二区三区| 亚洲级视频在线观看免费1级| 欧美成人亚洲| 99国内精品| 久久久999精品视频| 在线成人亚洲| 欧美福利专区| 性欧美超级视频| 欧美国产视频日韩| 亚洲免费中文| 伊人久久亚洲美女图片| 欧美成人午夜激情| 亚洲性色视频| 久久在线免费观看| 99日韩精品| 国产亚洲免费的视频看| 麻豆国产精品777777在线| 日韩一区二区精品在线观看| 欧美亚洲视频一区二区| 蜜桃精品久久久久久久免费影院| 亚洲精品视频在线播放| 欧美一区在线看| 日韩香蕉视频| 国产日韩欧美在线播放| 欧美大片在线影院| 欧美在线视频一区二区三区| 91久久精品国产91久久性色| 激情综合色综合久久| 国产精品久久九九| 亚洲国内欧美| 先锋资源久久| 亚洲精品乱码| 久久色在线播放| 亚洲欧美一区二区在线观看| 亚洲国产精品久久久久秋霞蜜臀| 国产精品v日韩精品v欧美精品网站| 免费一级欧美在线大片| 午夜精品剧场| 一区二区三区产品免费精品久久75| 欧美电影资源|