I'm currently learning to use Ogre and I juts got a little problem with it. I'm sure the solution is quite simple, but I can't find it by myself.
Edit : I'm using Ogre 1.6.2
So I'm using Ogre with SDL, as this tutorial explains, and it seems to work great. I loaded a mesh and placed a camera, and it's ok. Now, I want my mesh (in fact, a sphere) to be red. So I used a material script such as this one :
Code: Select all
material Material
{
receive_shadows on
technique
{
pass
{
ambient(0.5,0.0,0.0,1.0)
diffuse(0.640000,0.016345,0.000000,1.000000)
specular(0.500000,0.500000,0.500000,1.000000,12.500000)
emissive(0.000000,0.000000,0.000000,1.000000)
}
}
}
Code: Select all
Parsing scripts for resource group General
Parsing script Sphere.material
Finished parsing scripts for resource group General
Code: Select all
Mesh: Loading Sphere.mesh.
Can't assign material Material to SubEntity of Ball because this Material does not exist. Have you forgotten to define it in a .material script?
Here is the source code of my Renderer class. All of my calls to Ogre are in this file :
Code: Select all
/*
* Renderer.cpp
*
* Created on: 27 avr. 2009
* Author: canard
*/
#include "Renderer.h"
#include <World.h>
#include <GL/glut.h>
#include <SDL.h>
#include <iostream>
Renderer::Renderer(World * _world) {
m_world = _world;
}
Renderer::~Renderer() {
delete m_world;
}
void Renderer::init(){
createRoot();
defineResources();
setupRenderSystem();
createRenderWindow();
initializeResourceGroups();
m_sceneManager = m_root->createSceneManager(Ogre::ST_GENERIC, Ogre::String("MainSceneManager"));
m_sceneManager->setAmbientLight(Ogre::ColourValue(1,1,1));
m_camera = m_sceneManager->createCamera(Ogre::String("Camera"));
m_camera->setPosition(-3,-3,3);
m_camera->lookAt(0,0,0);
m_camera->setNearClipDistance(1.0f);
m_camera->setFarClipDistance(5000.0f);
m_camera->setAspectRatio((double)640/(double)480);
Ogre::Viewport* mViewport = m_renderWindow->addViewport(m_camera);
mViewport->setBackgroundColour(Ogre::ColourValue(0.0f,0.0f,0.0f));
Ogre::Entity * sphere = m_sceneManager->createEntity("Ball","Sphere.mesh");
Ogre::SceneNode * node1 = m_sceneManager->getRootSceneNode()->createChildSceneNode("BallNode");
node1->attachObject(sphere);
node1->setPosition(0,0,1);
Ogre::Light * light = m_sceneManager->createLight( "Light1" );
light->setType( Ogre::Light::LT_POINT );
light->setPosition( Ogre::Vector3(-3, -3, 3) );
light->setDiffuseColour( 1.0, 0.0, 0.0 );
light->setSpecularColour( 1.0, 0.0, 0.0 );
m_root->renderOneFrame();
}
void Renderer::render(){
m_root->renderOneFrame();
SDL_GL_SwapBuffers();
}
void Renderer::createRoot(){
m_root = new Ogre::Root("plugins.cfg", "ogre.cfg", "ogre.log");
m_root->restoreConfig();
m_root->initialise(false);
}
void Renderer::defineResources(){
Ogre::String secName, typeName, archName;
Ogre::ConfigFile cf;
cf.load("resources.cfg");
Ogre::ConfigFile::SectionIterator seci = cf.getSectionIterator();
while (seci.hasMoreElements()){
secName = seci.peekNextKey();
Ogre::ConfigFile::SettingsMultiMap *settings = seci.getNext();
Ogre::ConfigFile::SettingsMultiMap::iterator i;
for (i = settings->begin(); i != settings->end(); ++i){
typeName = i->first;
archName = i->second;
Ogre::ResourceGroupManager::getSingleton().addResourceLocation(archName, typeName, secName);
}
}
}
void Renderer::setupRenderSystem(){
}
void Renderer::createRenderWindow(){
Ogre::NameValuePairList misc;
#ifdef WINDOWS
SDL_SysWMinfo wmInfo;
SDL_VERSION(&wmInfo.version);
SDL_GetWMInfo(&wmInfo);
size_t winHandle = reinterpret_cast<size_t>(wmInfo.window);
size_t winGlContext = reinterpret_cast<size_t>(wmInfo.hglrc);
misc["externalWindowHandle"] = StringConverter::toString(winHandle);
misc["externalGLContext"] = StringConverter::toString(winGlContext);
#else
misc[Ogre::String("currentGLContext")] = Ogre::String("True");
#endif
Ogre::String windowName("MainRenderWindow");
m_renderWindow = m_root->createRenderWindow(windowName, 640, 480, false,&misc);
m_renderWindow->setVisible(true);
}
void Renderer::initializeResourceGroups(){
Ogre::TextureManager::getSingleton().setDefaultNumMipmaps(5);
Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups();
}
Thanks very much for any help.