| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
GrayFox
Registrado: 28 Ene 2007 Mensajes: 47
| Publicado: 04/09/2007 1:51 pm | | | Título: |
| A ver esto es lo ultimo que hice y todavia sigue sin funcionar:| Código: | #include <GLWMC.h> #include <windows.h> #include <fstream> #include <gl.h> #include <glaux.h>
using namespace gfs;
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { MSG msg; bool bSalir=false; GLWMC Ventana; Ventana.CreaVentanaGL("Hihdghdf",500,500,false,WndProc); Ventana.InicializaEscenaGL(500,500); glEnable(GL_TEXTURE_2D); std::fstream fsArchivo; AUX_RGBImageRec* Imagen; fsArchivo.open("./Prueba.bmp"); UINT m_uiID; if(fsArchivo.is_open()) { fsArchivo.close(); Imagen=auxDIBImageLoad("./Prueba.bmp"); if(Imagen) { glGenTextures(1,&m_uiID); glBindTexture(GL_TEXTURE_2D,m_uiID); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR ); glTexImage2D(GL_TEXTURE_2D, 0, 3, Imagen->sizeX, Imagen->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, Imagen->data); delete Imagen->data; delete Imagen; } } while(!bSalir) { if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { if(msg.message==WM_QUIT) bSalir=true; TranslateMessage(&msg); DispatchMessage(&msg); } glBegin(GL_QUADS); glTexCoord2f(0.0f,0.0f); glVertex2f(-0.5f,-0.5f); glTexCoord2f(1.0f,0.0f); glVertex2f(+0.5f,-0.5f); glTexCoord2f(1.0f,1.0f); glVertex2f(+0.5f,+0.5f); glTexCoord2f(0.0f,1.0f); glVertex2f(-0.5f,+0.5f); glEnd(); SwapBuffers(Ventana.LeerHDC()); GLenum glError; int i = 0; do{ glError = glGetError(); if(glError) MessageBox(NULL,(char*)gluErrorString(glError),"ERROR",NULL); i++; }while( i < glError && glError != GL_NO_ERROR); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_CLOSE: PostQuitMessage(0); break; case WM_KEYDOWN: switch(wParam) { case VK_ESCAPE: PostQuitMessage(0); break; } break; } return DefWindowProc(hWnd, msg, wParam, lParam); }
|
Aca no hay ninguna clase encapsulando nada. La clase GLWMC se encarga de crear la ventana y funciona perfectamente. En cuanto a texturas hice todo manual y de todos modos en las PC de mis amigos no funciona. Tiro el error de "operacion no valida" pero solo lo probe con los carteles para errores en una sola maquina.
La verdad no entiendo nada, estaba por programar un juego de plataforma tipo Sonic o Mario pero si esto no me sale el personaje me va a quedar medio... cuadrado.
Alguien me puede decir que es lo que anda mal con esto? Me estoy volviendo loco... No me animo a hacer nada mas complejo por miedo a mandarme un super juego que despues no funcione en ninguna maquina.
Alguna idea? |
| | Volver arriba | |  | daltomi
Registrado: 28 Abr 2007 Mensajes: 120 Ubicación: Argentina
| Publicado: 08/09/2007 6:46 am | | | Título: |
| Hola. Ok, he probado tú código y no muestra la textura, el problema es GL_LINEAR_MIPMAP_LINEAR, el mismo debe utilizarse con texturas multimapa creadas/dibujadas manualmente(editor gráfico) quedando una matriz de dibujos, si no es así se puede crer una sóla imágen de alta resolución y utilizar gluBuild2DMipmaps(...) que genera automáticamente texturas multimapa. El filtro GL_TEXTURE_MIN_FILTER soporta también GL_LINEAR y GL_NEAREST,éste último es más rápido el cual utilicé y la textura se dibujó correctamente. No pude encontrar referencia del uso de delete para liberar los datos de la imágen proporsionada por auxDIBImageLoad, si he leido el uso de free:
| Código: | free(Imagen->Data); .... free(Imagen);
|
Tengo entendido que en tú Pc si funciona y en otras no, como la mia. No tengo placa acceleradora de video, tal vez GL_x_MIPMAP_x funcione con Pc's que tiene placas de video aún si la textura no es multimapa.
| GrayFox escribió: | | La clase GLWMC se encarga de crear la ventana y funciona perfectamente |
En el proceso de crear la ventana ¿se utiliza funciones como SetPixelFormat y derivados?
Saludos. |
| | Volver arriba | |  | GrayFox
Registrado: 28 Ene 2007 Mensajes: 47
| Publicado: 09/09/2007 5:37 pm | | | Título: |
| Modifique el codigo de mi primer post:
| Código: | bool Textura::Crear(char *szNombreArchivo) { Eliminar(); std::fstream fsArchivo; AUX_RGBImageRec* Imagen; if(szNombreArchivo) { fsArchivo.open(szNombreArchivo); if(fsArchivo.is_open()) { fsArchivo.close(); Imagen=auxDIBImageLoad(szNombreArchivo); if(Imagen) { m_uiAncho=Imagen->sizeX; m_uiAlto=Imagen->sizeY; glGenTextures(1,&m_uiID); glBindTexture(GL_TEXTURE_2D,m_uiID); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);//Antes GL_LINEAR_MIPMAP_LINEAR glTexImage2D(GL_TEXTURE_2D, 0, 3, m_uiAncho, m_uiAlto, 0, GL_RGB, GL_UNSIGNED_BYTE, Imagen->data); glBindTexture(GL_TEXTURE_2D,NULL); delete Imagen->data; delete Imagen; return true; } } } return false; }
|
Volvi a compilar la libreria, volvi a compilar el juego y se lo pase a una amiga... ... ... ... ... PERFECTO!!!!!!!! WIIIII Un monton de lineas de codigo (No las conte) y se soluciono todo cambiando el parametro de una funcion jajaja. Bueno peor es cuando uno pone "=" en vez de "=="
Gracias a los dos Daltomi y Killrazor y lamento haberlos molestado por semejante ####dez.
ahh cierto el codigo para crear la ventana:
| Código: | bool GLWMC::CreaVentanaGL(char* szTitulo, int nAncho, int nAlto, bool bPantallaCompleta,LRESULT (CALLBACK *WndProc) (HWND,UINT,WPARAM,LPARAM)) { if(m_hWnd) return false; m_WndProc=WndProc; InitWndCls(); if(!Crear(szTitulo,nAncho,nAlto,bPantallaCompleta)) return false; ActivaGL(); return true; } //********************************** //ActivaGL * //********************************** void GLWMC::ActivaGL() { PIXELFORMATDESCRIPTOR pfd; int iFormat; m_hDC = GetDC (m_hWnd); ZeroMemory (&pfd, sizeof (pfd)); pfd.nSize = sizeof (pfd); pfd.nVersion = 1; pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; pfd.iPixelType = PFD_TYPE_RGBA; pfd.cColorBits = 24; pfd.cDepthBits = 16; pfd.iLayerType = PFD_MAIN_PLANE; iFormat = ChoosePixelFormat (m_hDC, &pfd); SetPixelFormat (m_hDC, iFormat, &pfd); m_hRC = wglCreateContext( m_hDC ); wglMakeCurrent(m_hDC, m_hRC ); }
|
InitWndCls() Llena la estructura WNDCLASS Crear() Crea la ventana ActivaGL() Inicializa OpenGL
JAJAJA toy re feliz  Gracias enserio |
| | Volver arriba | |  | | Killrazor
Registrado: 24 Ene 2006 Mensajes: 1182 Ubicación: Barcelona
| Publicado: 10/09/2007 12:01 am | | | Título: |
| Deja que haga una consideracion: cuando trabajes con proyectos, si compilas parte del codigo en un lib, asegurate de que es relativamente correcto, por que si no es muy complicado de debugar. Lo digo por el codigo que me enviaste, era bastante dificil de debugar justo donde era mas probable que estuviera el error.
Parece que al fin y al cabo el error estaba en las diferencias entre ciertas targetas de video, pero lo solucionaste muy bien 
Ahhh, y otra cosa!!! Sobretodo siempre comprueba los errores lanzados por las APIs. Lo podrias haber resuelto mucho antes si lo hubieras hecho. _________________ I wanna heal i wanna feel like I'm close to something real. I wanna find something I've wanted all along somewhere i belong |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |