RSS

10 posts de WordPress que no debes perderte

10 posts de WordPress que no debes perderte.

 
Deja un comentario

Publicado por en 3 agosto, 2012 en SinCategoría

 

La clase panel en funcionamiento

Pues lo que pretendo hacer una clase compleja, por ahora comienza a funcionar haciendo las cosas que ahora mismo necesito. He tenido que investigar un poco bastante para conseguir convertir las coordenadas x,y de un objeto 3d con x,y,z, osea convertir 3d a coordenadas 2d. Esto lo conseguí implementando lo siguiente:

CODIGO

Ogre::Vector2 result;
const Ogre::AxisAlignedBox& AABB = personaje->getEntity()->getWorldBoundingBox(true);
Ogre::Vector3 point = AABB.getCenter(),point2;
point2 = camara->getProjectionMatrix() * (camara->getViewMatrix() * point);
result.x = (point2.x + 1)*0.5*800;
result.y = 1-(point2.y +1)*0.5*600;
Ogre::String numberx = StringConverter::toString(result.x);
Ogre::String numbery = StringConverter::toString(result.y);
panel1->addText("x:"+numberx+" y:"+numbery);
panel1->actualizar(result.x-80,result.y+540);

Esta parte de código la llamo desde EscenaSimple::bucleprincipal() para que se vaya actualizando en bucle durante la ejecución del juego. Me queda como duda por que para que se coloque correctamente en mi pantalla que tengo como un VIEWPORT DE 800X600 tenga que poner result.x-80 y result.y+540, cuando según los ejemplos con getWorldBoundingBox(true) no es neceario, pero a mí si no lo pongo me sale el OVERLAY muy desplazado del lugar de presentación.

Para que vean el resultado de todo junto clase panel y conversión de coordenadas 3d a 2d para colocar overlay sobre el tanque con información del usuario, os cuelgo un video disfrutenlo como yo lo he disfrutado una vez que lo conseguí. Muchas gracias por seguirme.

 
1 comentario

Publicado por en 27 septiembre, 2011 en Ogre3D, OgreOverlay

 

Etiquetas: , ,

Como trabajan las Clases de c++ con Ogre3D

Buenas tardes a todos.

Me encuentro con un dilema con las clases y el manejo de la información internamente y entre clases, especialmente trabajando con Ogre3D. Todo ha venido al querer implementar una clase que me crea un scroll de texto con un OVERLAY. Intento seguir la misma manera que use por ahora para inicializar la clase con un objeto y trabajar con ello, y destruir al salir, no lo consigo, he conseguido compilar pero no me crea el OVERLAY. Como mi interés es documentar los progresos que hago día a día, voy a intentar rellenar un poco este post.

Primero creo panel.h y panel.cpp, en su formato mas básico intentaré crear un panel overlay desde una clase que iré haciendo crecer para manejar paneles.

PANEL.H
#include <Ogre/Ogre.h>
class panel {
public:

panel(void);
~panel(void);
};<

PANEL.CPP
#include "panel.h"

panel::panel(void)
{
}

panel::~panel(void)
{
}

Pruebo a llamar desde EscenaSimple::EscenaSimple(): AplicacionOgre(“Tank3D v0.1”) a panel(); , compilo y todo va bien. Esto ya es algo mas, ahora en la llamada a panel preparare el OverlayManager lo cargaré etc.

Bien ahora ya despues de pruebzs, tengo la clase panel enmarcha aquí el código como ha quedado. Debajo como la implemento en EscenaSimple.
PANEL.H

#include
#include
#include

class panel : public Ogre::Singleton{
protected:
Ogre::OverlayContainer* mPanel;
Ogre::Overlay* mOverlay;
Ogre::OverlayElement* mTextBox;

public:
panel(void);
~panel(void);
void addText(Ogre::String text);
void actualizar(Ogre::Real x, Ogre::Real y);
};

PANEL.CPP
#include "panel.h"

using namespace Ogre;

template<> panel* Singleton::ms_Singleton = 0;

panel::panel(void)
{
mOverlay = OverlayManager::getSingleton().create("ScrollingOverlay");
mPanel = static_cast(OverlayManager::getSingleton().createOverlayElement("Panel", "container1"));
mPanel->setMetricsMode(GMM_PIXELS);
mPanel->setDimensions(800,600);
mPanel->setPosition(0, 0);
mTextBox = OverlayManager::getSingleton().createOverlayElement("TextArea", "pepe");
mTextBox->setMetricsMode(Ogre::GMM_PIXELS);
mTextBox->setDimensions(20, 5);
mTextBox->setWidth(20);
mTextBox->setHeight(5);
mTextBox->setParameter("font_name", "ubuntu");
mTextBox->setParameter("char_height", "20");
mTextBox->setColour(ColourValue::White);
mPanel->addChild(mTextBox);
mOverlay->add2D(mPanel);
}

void panel::addText(Ogre::String text)
{
mTextBox->setCaption(text);
mOverlay->show();
}

void panel::actualizar(Ogre::Real x, Ogre::Real y)
{
mTextBox->setPosition(x,y);
mOverlay->show();
}

panel::~panel(void)
{
}

En EscenaSimple.h no me olvido de agregar #include “panel.h” para que la clase forme parte de EscenaSimple y al comienzo incluyo class panel; para que panel trabaje con EscenaSimple, aun no tengo muy bien definido el funcionamiento de esta linea, clases amigas etc. Defino panel* panel1; en EscenaSimple.h tanto en crearEscena creo el panel con panel1= new panel; ya se inicializó, accedo a sus funciones que en mi caso son dos addText() y actualizar(). Donde hago..

panel1->addText(“hola”); //Esto me cambia el texto del OverlayText del panel por el que hay entre las comillas.
panel1->actualizar(x,y); //Posiciona el OverlayText en las coordenadas x,y a las que se llama.

Gracias a la función actualizar consigo lo que en el siguiente post voy a mostrar, que es colocar sobre el objeto 3d un panel 2d. Bueno eso será otro post. Hasta luego.

 
Deja un comentario

Publicado por en 27 septiembre, 2011 en Ogre3D, OgreOverlay

 

Etiquetas: , , , ,

OgreBullet primeras pruebas.

Otra tarde mas nos encontramos aquí para seguir con nuestro pequeño juego Tank. Como decidí a implementar OgreBullet para la física, me bajé bullet de http://www.bulletphysics.com. En el momento de hacer este post la versión es 2,79, compilo bullet y seguidamente voy al SVN de ogreaddons y me bajo el ogrebullet para así conseguir la última versión. Incluyo aquí el source de la demo que ejecuté para poder estudiar que todo estuviera bién configurado, compruebo que así fué.

Source bullettest para Visual c++ express 2010

Si quieres que te ayude a compilar el surce o configurar Visual c++ express 2010 comentar. Saludos y buenas tardes.

 

 
4 comentarios

Publicado por en 20 septiembre, 2011 en Ogre3D, OgreBullet

 

Etiquetas: , , ,

Mas objetos para Tank

Barril y cajas con blender, como nos ha comentado G.León este fué su primer trabajo en lod low poligon, mapeados con UV. Desde aquí gracias y  seguiré guardando todo celosamente para ir dando cada vez mas vida al proyecto. Gracias. Aprovecho para comunicar desde este post que la música DJ.Lups, genial diskjockey de Mallorca que compone el mismo sus canciones,  el mismo nos va a poner música a las escenas y menu, siguiendo su maravilloso estilo, genial para un juego de guerra con tanques. Gracias a todos IncaIB.

 
Deja un comentario

Publicado por en 20 septiembre, 2011 en Ogre3D

 

Etiquetas: , , ,

Mi visión del Espacio 3D

Despues de toda una semana estudiando Clases y formas de implementar CEGUI o MyGUI, me decido por MyGUI, hoy he decidido descansar un poco de ese tema y dedicarme todo el día a practicar posicionamiento y tamaños de los objetos 3D de blender a Ogre3D. Me explico aun tengo algunos problemas para conocer la escala de presentación de los objetos.

Que aventura cuando intento crear un array de Ogre:.Entity para poder colocar diez cubos y comprobar las distancias y la colocación y me dice que no puedo crear array de entity. Entonces me da que pensar y si lo hago por nodo?. Voy a probar Ogre::SceneManager* nodo[10];

Ayer me quedé bloqueado sobre como crear desde un mismo mesh con array Gracias a la ayuda de Mind Calamity.

for (int i = 0; i < (sizeof(entity) / sizeof(entity[0])); i++) // Loop through the entities { // Elemento de array comienza en 0 , agregamos 1, entidad y nodo comienzan en uno :) Ogre::String number = Ogre::StringConverter::toString(i + 1); // Agregar el número de elemento actual al nombre del nodo entidad / escena para evitar confusiones entity[i] = gestorEscena->createEntity("Head " + number, "cubo.mesh");
node[i] = gestorEscena->getRootSceneNode()->createChildSceneNode("Node " + number);
// Distancia de los nodos entre sí, por lo que no se encuentran en el mismo lugar, y luego unirlos
node[i]->setPosition(0 , 0 ,i*2.5);
node[i]->attachObject(entity[i]);
// Dice cuantas entidades se tienen en la pantalla, completamente innecesario
printf("Entidad creada No. %i \n", i);
}

Habiendo conseguido correr este código perfectamente ya tenemos 10 cubos ahora voy a crear la imagen ampliando x,y,z donde es i*2.5 en el código es Z

x node[i]->setPosition(i*2.5 , 0 , 0);

Y node[i]->setPosition(0 , i*2.5 , 0);

Z node[i]->setPosition(0 , 0 ,i*2.5);

Como me propuse aquí muestro la diferencia en poner 10 cubos en x,y,z para así poder verlo con mas claridad. Saludos.

 
Deja un comentario

Publicado por en 17 septiembre, 2011 en Ogre3D

 

Etiquetas: ,

Partículas como las integré.

Saludos OgreManiaks, otra tarde mas me siento antes de comenzar con CEGUI, voy a publicar en el blog un vídeo del resultado de aplicar partículas de humo a todo el objeto, com ya saben son pruebas nada es definitivo, cuando esté todo decidido iremos colocando las position y el tema camaras. Aquí os ingreso el vídeo.

 
Deja un comentario

Publicado por en 12 septiembre, 2011 en Ogre3D