sábado, 5 de julio de 2008

Nodos de Escena

Esta es una parte importante de Ogre, pues se pueden crear Objetos, Entidades, pero para que puedan tener interacción deben estar asociados a un SceneNode. estos nodos la mayoría de las Veces son creados con e SceneManager de esta manera :

SceneNode* NodoDeEscena = mSceneMgr->getRootSceneNode()->createChildSceneNode( "Nodo" );


pero no todo los nodos son hijos de SceneManager (mSceneMgr). También los Nodos pueden ser Hijos de otros nodos, así con esto si el padre se mueve el hijo se mueve con el. Un ejemplo un arma, un bate de baseball. Si creamos un nodo que sea un hombre para cargar un bate sería


SceneNode* NodoHombre = mSceneMgr->getRootSceneNode()->createChildSceneNode( "hombre" );

SceneNode* NodoBate = NodoHombre ->createChildSceneNode( "bate" );



así el bate queda siendo hijo de Hombre y se mueve para donde hombre vaya.


En otra ocasión explicaré los nodos huérfanos.

lunes, 30 de junio de 2008

Crear una aplicación básica en Ogre

Buenas, esto si es un dolor de cabeza para cualquiera que esté empezando con este buen motor.

Requisitos:

-C++ (está demás ponerlo, pero casos se han visto)
-Visual Studio 2005 o 2008 express
-Ogre Eihort version 1.47 o superior


Configuración del visual studio,usando lo básico de Visual C++:

abrimos el Visual C++ y creamos una aplicación nueva y seleccionamos win32project y le colocamos un nombre y pasamos a la siguiente ventana.

Seleccionamos Windows application en la otra ventana y seleccionamos la casilla de empty project. Con esto evitamos que se creen varios archivos innecesarios.

primero agregamos un archivo de tipo cpp, en el menú project, seleccionamos add new item. Le damos un nombre por ejemplo main.

ahora a la parte de la configuración del proyecto. En el menú project, seleccionamos properties o presionamos alt +f7, vamos a configurar para modo de depuración(debug).


imagen 2: C/C++

Seleccionamos C/C++ en el árbol de opciones( señalado en la imagen 2 por un círculo rojo) y pro cedemos a configurar en la etiqueta general la opción: Additional Include Directories agregando


$(OGRE_HOME)\include
$(OGRE_HOME)\samples\include


Ahora con la parte de encadenamiento mal llamada linkeo que en español no existe. Me refiero a la sección del Linker( círculo rojo en la imagen 3).


imagen 3. Linker


colocamos en la etiqueta general la opción Additional Include Directories


$(OGRE_HOME)\lib


y en la etiqueta Input en la opción Additional Dependencies las librerías que se van a encadenar.


OgreMain_d.lib
OIS_d.lib




NOTA:
los errores al compilar el programa que se producen cuando se ve de este estilo " error LNK2019: unresolved external symbol ", es porque faltan algunos de los .lib's o un archivo fuente .cpp( .c en el caso de C puro).

notese que las librerias son llevan un _d acompañando el nombre, esto está indicando que solo son para compilar en modo depuración(debug). Para release las librerías no incluyen esa parte.


Bueno, ya estamos listos para empezar a escribir code.

Usaremos lo que trae Ogre cómo predeterminado para hacer la aplicación. Me refiero a "ExampleApplication.h" y "ExampleFrameListener.h". es suficiente incluir "ExampleApplication.h" ya que este contiene el otro.


#include "ExampleApplication.h"

Hacemos la clase heredada de FrameListener


class testingFrameListener : public ExampleFrameListener
{
private:
SceneManager* mSceneMgr;
public:
testingFrameListener(SceneManager *sceneMgr, RenderWindow* win, Camera* cam)
: ExampleFrameListener(win, cam,false,false),
mSceneMgr(sceneMgr)
{
}

bool frameStarted(const FrameEvent& evt)
{
bool ret = ExampleFrameListener::frameStarted(evt);


return ret;

}

};






class testingApp : public ExampleApplication
{
public:
testingApp()
{}

~testingApp()
{
}

protected:

virtual void createCamera(void)
{
// Creando La camara
mCamera = mSceneMgr->createCamera("PlayerCam");

// Posición a 500 en la dirección Z
mCamera->setPosition(Vector3(0,15,50));
// mirar a lo largo de -Z
mCamera->lookAt(Vector3(0,0,30));
mCamera->setNearClipDistance(5);

}

virtual void createViewports(void)
{
// Crear un viewport
Viewport* vp = mWindow->addViewport(mCamera);
vp->setBackgroundColour(ColourValue(0.1,0.1,0.1));

// Alterar the camera para que concuerde con el wl Viewport
mCamera->setAspectRatio(
Real(vp->getActualWidth()) / Real(vp->getActualHeight()));
}




// Sobrecargar el método createScene es obligatorio
virtual void createScene(void)
{

mSceneMgr->setAmbientLight(ColourValue(0.5, 0.5,0.5));
mSceneMgr->setShadowTechnique(SHADOWTYPE_TEXTURE_MODULATIVE);

//agregando un plano
Plane plane( Vector3::UNIT_Y, 0 );
MeshManager::getSingleton().createPlane("ground",
ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, plane,
1500,1500,20,20,true,1,5,5,Vector3::UNIT_Z);
Entity* planeN = mSceneMgr->createEntity( "GroundEntity", "ground" );

mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(planeN);
planeN->setMaterialName("Examples/Rockwall");
planeN->setCastShadows(false);


// Crear una luz
Light* l = mSceneMgr->createLight("MainLight");
l->setType( Light::LT_POINT );
l->setPosition(-5,100,100);



}

// Create new frame listener
void createFrameListener(void)
{
mFrameListener= new testingFrameListener(mSceneMgr, mWindow, mCamera);
mRoot->addFrameListener(mFrameListener);
}
};





y para poder ejecutarlo se necesita el punto de entrada


#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
#define WIN32_LEAN_AND_MEAN
#include "windows.h"
#endif

#ifdef __cplusplus
extern "C" {
#endif

#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )
#else
int main(int argc, char *argv[])
#endif
{
// Create application object
testingApp app;



try {
app.go();
} catch( Ogre::Exception& e ) {
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
MessageBox( NULL, e.getFullDescription().c_str(), "An exception has occured!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
#else
std::cerr << "Una excepción ha ocurrido: " <<>


Y a compilar, buena suerte en con Ogre, se necesita saber C++ en un grado medio y mucha paciencia.

lunes, 24 de marzo de 2008

WiiMote todo el poder del control del Wii para Ogre

Si, la versión nueva de Ogre, que actualmente está en desarrollo, incluye soporte para usar el control de Wii.

domingo, 23 de marzo de 2008

Físicas

Las físicas son parte fundamental de la programación de vídeo juegos hoy en día. Ogre3d tiene detección de colisiones realizada con rayQueries. Pero afortunadamente existen librerías especializadas en Tratar las físicas que actualmente se le conocen cómo motores físicos ( physics engines) , para Ogre practicamente son adaptables todas las existentes.

Existen diferentes motores y tipos de físicas, de cuerpos rigidos, de colisiones, ragdolls, fluidos, físicas suaves, de ropa y muchas más.

Ogre tiene algunos wrappers que ayudan a integrar 4 motores conocidos:

- Physx de Ageia, antes era novodex pero fue absorbido por ageia se integra con Ogre a través de NxOgre.

- Newton, es una librería solida que tiene gran potencial, su uso es gratis para juegos no comerciales, y su wrapper se llama OgreNewt.

- Ode, es una librería Opensource de gran uso, no solo dentro de Ogre sino otros motores la vienen implementando, su wrapper es OgreOde, actualmente tiene muy buenos ejemplos y el soporte lo proporcionan en el foro de Ogre.

-Bullet es opensource y blender usa está librería para sus físicas rigidas. el wrapper para ogre Se llama OgreBullet.

También existen para soft bodies, pero nos enfocaremos más en rigid bodies.

martes, 11 de marzo de 2008

Level Editors para ogre

Ogre es muy poderoso, pero solo es un framework, así que se usa para construir aplicaciones, por suerte puede ser incluido en GUIs y APIs de desarrollo gráfico cómo WxWidgets, QT, MFC, winforms y el API de Windows. Efectivamente se han ido desarrollado tools que le facilitan la vida a los programadores y esto tiene cómo consecuencia la disminución en el tiempo de desarrollo, además de resultados no tan sometido a prueba y error.

Entre estas tools, están los famosos editores de niveles, que sencillamente son WYSIWYG que permiten ubicar los Modelos y diferentes "cosas" tales cómo partículas y materiales. los contribuidores y seguidores de Ogre han desarrollado tanto OpenSource así cómo comerciales.


Proton Scene editor

Desarrollado con MFC, aun está por definirse la licencia, pero según su autor podría ser GPL

http://www.fun-byte.com/LevelEditor.swf

WEditor, no he visto el video , pero tiene muy buenos comentarios

https://sourceforge.net/project/showfiles.php?group_id=219451&package_id=264820&release_id=582431

Bienvenidos

Hola dejenme darle una cordial bienvenida a este blog, en el cual si el tiempo me lo permite y las ganas mantendré actualizado con respecto a información de programación, games, motores y en especial Ogre3D.