|
Mostrar Mensajes
|
Páginas: [1] 2 3 4 5 6 7 8 9
|
2
|
Programación / Programación C/C++ / Duda iterator // Vector iterator not decrementable
|
en: 13 Agosto 2013, 23:22 pm
|
Buenas ! 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!
|
|
|
4
|
Programación / Programación C/C++ / Error Prueba de Ogre Con fisicas
|
en: 1 Noviembre 2012, 19:02 pm
|
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/?m0wtksdd3smc7yqGracias.
|
|
|
6
|
Media / Diseño Gráfico / OpenGL Texturas
|
en: 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. #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 / Programación C/C++ / Re: OpenGL
|
en: 26 Abril 2012, 16:47 pm
|
Solucionado. #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 / Programación C/C++ / Re: ayuda programa c++
|
en: 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 / Programación C/C++ / OpenGL
|
en: 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. #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
|
Programación / Programación C/C++ / [Solucionado]Nuevo problemilla en herencia
|
en: 24 Abril 2012, 05:31 am
|
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. #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".
|
|
|
|
|
|
|