Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - cazagavilan

#1
Solucionado!

Código (cpp) [Seleccionar]
void NucleoMotor::LimpiarVector()
{

   vector<cSprite*>::iterator it = m_vcSprites.begin();
while(it != m_vcSprites.end()) {
         if(*it > 0)
it = m_vcSprites.erase(it);
         else
                 it++;
}
}


Gracias!
#2
Buenas !


Código (cpp) [Seleccionar]
void NucleoMotor::LimpiarVector()
{
  // Elimina los elementos del vector
  vector<cSprite*>::iterator ivSprite;
  for (ivSprite = m_vcSprites.begin();
        ivSprite != m_vcSprites.end();
        ivSprite++)
  {

    delete (*ivSprite);
    m_vcSprites.erase(ivSprite);
    ivSprite--;
  }
}


El error es en la ejecución del programa.

Gracias!
#3
Muchas gracias por responder, seguiré intentándolo a ver.
#4
Buenas!

Tengo un proyecto para probar las fisicas en ogre y me da error:

Primera excepción en 0x0116dd07 en Fisica 1.1.exe: 0xC0000005: Infracción de acceso al leer la ubicación 0x00000000.
Excepción no controlada en 0x0116dd07 en Fisica 1.1.exe: 0xC0000005: Infracción de acceso al leer la ubicación 0x00000000.

Concretamente en esta funcion:

void PhysxManager::simulate(NxReal time)
{
   // Ejecuta las colisiones y la dinamica para el incremento de tiempo desde el ultimo frame
----->   GScene->fetchResults(NX_RIGID_BODY_FINISHED, true);
   GScene->flushStream();
   GScene->simulate(time);
}

He leido que tiene que ver con algun puntero NULL que se intenta desreferenciar, pero no puedo solucionarlo.

Dejo el projecto para descargar ya que es un pelin grande:

http://www.mediafire.com/?m0wtksdd3smc7yq

Gracias.
#5
Diseño Gráfico / Re: OpenGL Texturas
21 Mayo 2012, 21:08 PM
Ups perdon XD
#6
Diseño Gráfico / OpenGL Texturas
21 Mayo 2012, 21:06 PM
Buenas!

Tengo que aplicar una textura de ladrillos a un cubo pero la verdad es que la explicacion que me dan de como se aplican las texturas en los vertex no es muy buena y me gustaria basicamente eso, que a ver si me lo podeis explicar mejor este punto:

glTexCoord2f(1.0f, 1.0f); glVertex3f(0,1,1);

Y de paso os dejo el codigo.

Código (cpp) [Seleccionar]
#include <Windows.h>
#include <GL\GL.h>
#include <GL\GLU.h>
#include <GL\glut.h>
#include <iostream>
#define _USE_MATH_DEFINES
#include <math.h>
using namespace std;
#include <conio.h>
#define BITMAP_ID 0x4D42
GLuint nombres_texturas;
int angulo;

void init(void);
void redraw(void);
void reshape(int, int);

BITMAPINFOHEADER bitmapInfoHeader;
unsigned char* bitmapData;

unsigned char* LoadBitmapFile(char *filename, BITMAPINFOHEADER *bitmapInfoHeader)
{
   FILE *filePtr;                       // Puntero a programa
   BITMAPFILEHEADER bitmapFileHeader;   // Bitmap file header
   unsigned char *bitmapImage;          // Bitmap image data
   int imageIdx = 0;             // Index de la imagen
   unsigned char tempRGB;

   // Abrimos el archivo en binary mode
   filePtr = fopen(filename,"rb");
   if(filePtr == NULL)
      return NULL;

   // Leemos el bitmap file header
   fread(&bitmapFileHeader, sizeof(BITMAPFILEHEADER),1,filePtr);

   // Verificamos que sea un BItmap
   if(bitmapFileHeader.bfType != BITMAP_ID)
   {
      fclose(filePtr);
      return NULL;
   }

   // Leemos la información del bitmap header
   fread(bitmapInfoHeader, sizeof(BITMAPINFOHEADER),1,filePtr);

   // Movemos el puntero al principio del bitmap
   fseek(filePtr, bitmapFileHeader.bfOffBits, SEEK_SET);

   // Guardamos suficiente memoria para el archivo
   bitmapImage=(unsigned char*) malloc(bitmapInfoHeader->biSizeImage);

   // Verificamos la memoria
   if(!bitmapImage)
   {
      free(bitmapImage);
      fclose(filePtr);
      return NULL;
   }
   fread(bitmapImage,1,bitmapInfoHeader->biSizeImage,filePtr);
   if(bitmapImage == NULL)
   {
      fclose(filePtr);
      return NULL;
   }

   // Cambiamos la imagen a RGB
   for(imageIdx = 0; imageIdx<(int)bitmapInfoHeader->biSizeImage; imageIdx+=3)
   {
      tempRGB = bitmapImage[imageIdx];
      bitmapImage[imageIdx]=bitmapImage[imageIdx+2];
      bitmapImage[imageIdx + 2] = tempRGB;
   }

   // Cerramos el archivo y devolvemos la imagen
   fclose(filePtr);
   return bitmapImage;
}

void init(void)
{
   glClearColor(1.0,1.0,1.0,0.0); // Color fondo pantalla
   glEnable(GL_CULL_FACE);
   glEnable(GL_DEPTH_TEST); // Test de profundidad !IMPORTANTE
   glShadeModel(GL_SMOOTH); // Modo sombreado de poligonos
   glMatrixMode(GL_MODELVIEW);
   gluLookAt(3,-3,3,0,0,0,0,1,0);

   glEnable(GL_TEXTURE_2D);
   glGenTextures(1,&nombres_texturas); // Genero el nombre de la textura

   glBindTexture(GL_TEXTURE_2D, nombres_texturas); // Activamos la textura
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
   bitmapData = LoadBitmapFile("agua.bmp", &bitmapInfoHeader);
   gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, bitmapInfoHeader.biWidth,
      bitmapInfoHeader.biHeight, GL_RGB, GL_UNSIGNED_BYTE, bitmapData);

}

void animacion(void)
{
   angulo = (angulo+1)%360;
   Sleep(50);
   glutPostRedisplay();
}

void redraw()
{
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
   glPushMatrix();
   // Activo la textura

   glRotatef(angulo,0,1,0);
   glBindTexture(GL_TEXTURE_2D, nombres_texturas);

   // Primera cara
   glBegin(GL_POLYGON);
   glTexCoord2f(0.0f, 0.0f); glVertex3f(-1,0,1);
   glTexCoord2f(1.0f, 0.0f); glVertex3f(1,0,1);
   glTexCoord2f(0.5f, 1.0f); glVertex3f(0,2,0);
   glEnd();

    // Segunda cara
   glBegin(GL_POLYGON);
   glTexCoord2f(0.0f, 0.0f); glVertex3f(1,0,1);
   glTexCoord2f(1.0f, 0.0f); glVertex3f(1,0,-1);
   glTexCoord2f(0.5f, 1.0f); glVertex3f(0,2,0);
   glEnd();

   // Tercera cara
   glBegin(GL_POLYGON);
   glTexCoord2f(0.0f, 0.0f); glVertex3f(1,0,-1);
   glTexCoord2f(1.0f, 0.0f); glVertex3f(-1,0,-1);
   glTexCoord2f(0.5f, 1.0f); glVertex3f(0,2,0);
   glEnd();

   // Cuarta cara
   glBegin(GL_POLYGON);
   glTexCoord2f(0.0f, 0.0f); glVertex3f(-1,0,-1);
   glTexCoord2f(1.0f, 0.0f); glVertex3f(-1,0,1);
   glTexCoord2f(0.5f, 1.0f); glVertex3f(0,2,0);
   glEnd();

   // Quinta cara
   glBegin(GL_POLYGON);
   glTexCoord2f(0.0f, 0.0f); glVertex3f(-1,0,1);
   glTexCoord2f(1.0f, 0.0f); glVertex3f(-1,0,-1);
   glTexCoord2f(1.0f, 1.0f); glVertex3f(1,0,-1);
   glTexCoord2f(0.0f, 1.0f); glVertex3f(1,0,1);
   glEnd();
   glPopMatrix();
   glutSwapBuffers();
}

void reshape( int anchura, int altura)
{
   glViewport(0,0,(GLsizei) anchura, (GLsizei)altura);
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   gluPerspective(40.0, (GLfloat) anchura/(GLfloat) altura, 1.0, 20.0);
   glMatrixMode(GL_MODELVIEW);
}

   void keyboard(unsigned char tecla, int x, int y)
   {
      if(tecla==27) exit(0);
      if(tecla=='a') glutIdleFunc(animacion);
      if(tecla=='p') glutIdleFunc(NULL);
   }

   void main( int argc, char*argv[])
   {
      glutInit(&argc, argv);
      glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
      glutInitWindowSize(320, 240);
      glutCreateWindow("Mapa de Bits");
      init();
      glutDisplayFunc(redraw);
      glutReshapeFunc(reshape);
      glutKeyboardFunc(keyboard);
      glutIdleFunc(animacion);
      glutMainLoop();
   }


Gracias!
#7
Programación C/C++ / Re: OpenGL
26 Abril 2012, 16:47 PM
Solucionado.

Código (cpp) [Seleccionar]
#include <gl\glut.h>

void init(void);
void dibujar(void);
void redimensionar(int, int);
void teclado (unsigned char, int);

void init(void)
{
glClearColor(0.0,0.0,0.0,0.0);
glEnable(GL_DEPTH_TEST);
glShadeModel(GL_FLAT);
}

void redimensionar(int ancho, int alto)
{
glViewport(0,0,(GLint)ancho, (GLint)alto);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(35,((float)ancho/alto), 0.1, 1000);
}

void dibujar(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(3,2,3,0,0,0,0,1,0);
glPushMatrix();
glRotatef(45, 0, 0, 1);
// Primera cara
glBegin(GL_TRIANGLES);
glColor3f(1.0,0.5,1.0);
glVertex3f(0,1,0);
glVertex3f(1,0,1);
glVertex3f(-1,0,1);
glEnd();
// Segunda cara
glBegin(GL_POLYGON);
glColor3f(1.0,1.0,0.0);
glVertex3f(0,1,0);
glVertex3f(-1,0,1);
glVertex3f(-1,0,-1);
glEnd();
// Tercera cara
glBegin(GL_POLYGON);
glColor3f(0.5,0.9,1.0);
glVertex3f(0,1,0);
glVertex3f(-1,0,-1);
glVertex3f(1,0,-1);
glEnd();
// Cuarta cara
glBegin(GL_POLYGON);
glColor3f(0.5,0.9,1.0);
glVertex3f(0,1,0);
glVertex3f(1,0,-1);
glVertex3f(1,0,1);
glEnd();
glutSwapBuffers();
}

void teclado(unsigned char key, int x, int y)
{
if(key==27) exit(0);
}

void main( int argc, char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
glutInitWindowSize(320,240);
glutCreateWindow("Intro");

// Registrar funciones
init();
glutKeyboardFunc(teclado);
glutDisplayFunc(dibujar);
glutReshapeFunc(redimensionar);

// Bucle de eventos principal
glutMainLoop();
}[code=gml]
[/code]
#8
Programación C/C++ / Re: ayuda programa c++
26 Abril 2012, 08:23 AM
Por experiencia propia(soy novato) aprendes muchísimo mas si te buscas un poco la vida, creas tu código y luego si tienes algo mal o que no entiendas te ayudan. Aun que el codigo sea desastroso ( a mi me ha pasado) no importa... Lo que importa es que te esfuerces de verdad por que aprendes mas y te  sentiras mucho mejor que si no haces nada.

Suerte!
#9
Programación C/C++ / OpenGL
25 Abril 2012, 22:46 PM
Hola!

Se supone que tengo que crear un triangulo y rotarlo a 45 grados en el eje y el problema esta en que en el curso que hago no explica bien la implementacion de glRotatef... y me da error.

Código (cpp) [Seleccionar]
#include <Windows.h>
#include <gl\glut.h>
#include <gl\gl.h>
#include <gl\GLU.h>
void animacion(void);
void init(void);
void dibujar(void);
void redimensionar(int, int);
void teclado (unsigned char, int);
void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z);

void init(void)
{
glClearColor(0.0,0.0,0.0,0.0);
glEnable(GL_DEPTH_TEST);
glShadeModel(GL_FLAT);
}

void redimensionar(int ancho, int alto)
{
glViewport(0,0,(GLint)ancho, (GLint)alto);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(35,((float)ancho/alto), 0.1, 1000);
}

void dibujar(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(3,2,3,0,0,0,0,1,0);
glPushMatrix();
glRotatef(45, 0, 0, 1);
// Primera cara
glBegin(GL_TRIANGLES);
glColor3f(1.0,0.5,1.0);
glVertex3f(0,1,0);
glVertex3f(1,0,1);
glVertex3f(-1,0,1);
glEnd();
// Segunda cara
glBegin(GL_POLYGON);
glColor3f(1.0,1.0,0.0);
glVertex3f(0,1,0);
glVertex3f(-1,0,1);
glVertex3f(-1,0,-1);
glEnd();
// Tercera cara
glBegin(GL_POLYGON);
glColor3f(0.5,0.9,1.0);
glVertex3f(0,1,0);
glVertex3f(-1,0,-1);
glVertex3f(1,0,-1);
glEnd();
// Cuarta cara
glBegin(GL_POLYGON);
glColor3f(0.5,0.9,1.0);
glVertex3f(0,1,0);
glVertex3f(1,0,-1);
glVertex3f(1,0,1);
glEnd();
glPopMatrix();
glutSwapBuffers();
}

void teclado(unsigned char key, int x, int y)
{
if(key==27) exit(0);
}

void main( int argc, char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
glutInitWindowSize(320,240);
glutCreateWindow("Intro");

// Registrar funciones
init();
glutIdleFunc(animacion);
glutKeyboardFunc(teclado);
glutDisplayFunc(dibujar);
glutReshapeFunc(redimensionar);

// Bucle de eventos principal
glutMainLoop();
}


Muchas gracias.
#10
Hola!

Ya tengo el codigo casi acabado... solo me da un error y es que no me almacena el nombre completo del propietario, solo la primera letra.

Código (cpp) [Seleccionar]
#include<iostream>
#include<cstring>
using namespace std;
//Declaracion clase VEHICULO
class vehiculo
{
protected:
char *cad;
int litros;
int kphMas;
int kphMenos;
int veloActual;
int capaDepo;
int año;
int capDepo;
int liDepo;
public:
vehiculo(int veloInicial, int liInicial, int capDepoInicial, int anioInicial, const char *c);
~vehiculo();
void imprimir();
void llenarDepo();
void acelerar(int kphMas);
void frenar(int kphMenos);
char *leer(char *c);
};

//Declaracion derivada MOTO
class moto : public vehiculo
{
protected:
int cilindrada;
int cilinInicial;
char *tipo;
public:
moto(int veloInicial,int liInicial, int capDepoInicial, int anioInicial,  int cilinInicial, const char* c, const char *c1);
~moto();
char* leer1(char* c1);
void imprimir();
};

//Declaracion derivada COCHE
class coche : public vehiculo
{
protected:
int asientos;
int asientosInicial;
char *marca;
public:
coche(int veloInicial,int liInicial, int capDepoInicial, int anioInicial,  int cilinInicial, const char* c, const char *c1);
~coche();
char * leer1(char* c1);
void imprimir();
};


//Constructor VEHICULO
vehiculo::vehiculo(int veloInicial, int liInicial, int capDepoInicial, int anioInicial, const char *c)
{
veloActual = veloInicial;
liDepo = liInicial;
capDepo = capDepoInicial;
año = anioInicial;
cad = new char[strlen(c)+1];
strcpy(cad, c);

}

//Destructor VEHICULO
vehiculo::~vehiculo()
{
delete [] cad;
}

//Metodo leer VEHICULO
char *vehiculo::leer(char* c)
{
strcpy(c, cad);
return c;
}

// Metodo llenar deposito  VEHICULO
void vehiculo::llenarDepo()
{
cout << "Estas llenando el deposito..." << endl;
for(; liDepo < capDepo; liDepo++)
{
}
cout << "El deposito esta lleno: " << liDepo<< " Litros."<< endl << endl;
}

// Metodo imprimir VEHICULO
void vehiculo::imprimir()
{
cout << "La velocidad actual es: "<< veloActual << endl;
cout << "El año del coche es: " << año << endl;
cout << "En el deposito hay: " << liDepo << endl;
cout << "El nombre del propietario es: " << cad <<endl << endl;
}

// Metodo acelerar VEHICULO
void vehiculo::acelerar(int kphMas)
{
if(liDepo - kphMas / 10 > 0)
{
cout << "Estas acelerando!" << endl;
   veloActual = veloActual + kphMas;
   liDepo = liDepo - kphMas / 10;
   cout << "Su velocidad actual es: " << veloActual << endl;
   cout << "Su deposito actual es: " << liDepo << endl << endl;
}
else
{
cout << "El deposito esta vacio!" << endl << endl;
veloActual = 0;
}
}

// Metodo frenar VEHICULO
void vehiculo::frenar(int kphMenos)
{
if( veloActual - kphMenos > 0)
{
cout << "Estas frenando!" << endl;
veloActual = veloActual - kphMenos;
cout << "Su velocidad actual es: " << veloActual << endl << endl;
}
else
{
veloActual = 0;
cout << "Ya estas parado!" << endl << endl;
}
}

// Constructor MOTO
moto::moto(int veloInicial,int liInicial, int capDepoInicial, int anioInicial,  int cilinInicial,const char* c,  const char *c1):
vehiculo( veloInicial,  liInicial,  capDepoInicial, anioInicial, c)
{
cout << "Ha salido la moto del taller!" << endl << endl;
veloActual = veloInicial;
liDepo = liInicial;
capDepo = capDepoInicial;
año = anioInicial;
cilindrada = cilinInicial;
cad = new char[strlen(c)+1];
strcpy(cad, c);
tipo = new char[strlen(c1)+1];
strcpy(tipo, c1);
}

// Destructor Moto
moto::~moto()
{
delete [] tipo;
}

// Metodo leer MOTO
char *moto::leer1(char* c1)
{
strcpy(c1, tipo);
return c1;
}

// Metodo imprimir MOTO
void moto::imprimir()
{
cout << "La velocidad actual es: "<< veloActual << endl;
cout << "El año del Moto es: " << año << endl;
cout << "En el deposito hay: " << liDepo << endl;
cout << "El nombre del propietario es: " << cad <<endl;
cout << "La cilindrada de la moto es: " << cilindrada  <<endl;
cout << "El tipo de la moto es: " << tipo << endl << endl;
}

//Constructor COCHE
coche::coche(int veloInicial,int liInicial, int capDepoInicial, int anioInicial,  int asientosInicial,const char* c,  const char *c1):
vehiculo( veloInicial,  liInicial,  capDepoInicial, anioInicial, c)
{
cout << "Ha salido el coche del Parking!" << endl << endl;
veloActual = veloInicial;
liDepo = liInicial;
capDepo = capDepoInicial;
año = anioInicial;
asientos = asientosInicial;
cad = new char[strlen(c)+1];
strcpy(cad, c);
marca = new char[strlen(c1)+1];
strcpy(marca, c1);
}

// Destructor COCHE
coche::~coche()
{
delete [] marca;
}

// Metodo leer COCHE
char *coche::leer1(char* c1)
{
strcpy(c1, marca);
return c1;
}

// Metodo imprimir COCHE
void coche::imprimir()
{
cout << "La velocidad actual es: "<< veloActual << endl;
cout << "El año del Moto es: " << año << endl;
cout << "En el deposito hay: " << liDepo << endl;
cout << "El nombre del propietario es: " << cad <<endl;
cout << "El coche tiene: " << asientos << " asientos"  <<endl;
cout << "La marca del coche es: " << marca << endl << endl;
}

int main()
{
coche ferrari(0, 90, 90, 2012, 2, "Jonathan Gavilan Mora", "Ferrari");
ferrari.acelerar(60);
ferrari.acelerar(60);
ferrari.acelerar(100);
ferrari.acelerar(60);
ferrari.acelerar(40);
ferrari.frenar(100);
ferrari.frenar(100);
ferrari.frenar(120);
ferrari.llenarDepo();
cout << "Datos actuales de Ferrari: " << endl;
ferrari.imprimir();
moto honda(0, 50, 50, 2010, 1000,  "Jonathan Gavilan Mora", "Carretera");
honda.acelerar(100);
honda.acelerar(150);
honda.acelerar(100);
honda.frenar(200);
honda.acelerar(100);
honda.acelerar(100);
honda.llenarDepo();
cout << "Datos atuales de Honda: " << endl;
honda.imprimir();

system("pause");
return 0;
}


Muchas gracias!


Edit: El problema estaba en la funcion imprimir() de coche y moto, estaban asi "*cad" y era asi "cad".