Logo Espacio Linux       
Portada Taller Linux Descargas Foros Buscar Mapa del sitio Ayuda BlogEL
   Iniciar sesión | Registrarse    
 
Principal

Patrocinadores

Anuncios



Boletín Espacio Linux
Las novedades del sitio y el mundo Linux en tu email.


Usuarios
Bienvenido, Anónimo

     Miembros:
Último: rolandodiscos
Nuevos hoy: 9
Nuevos ayer: 12
Total: 28489

     Navegando:
Anónimos: 331
Miembros: 9
Total: 340


Miembros conectados:

01: dracel
02: pataro
03: dr_no
04: zeka
05: black_magician
06: MarianoC
07: otrebor
08: joserafael
09: Raul_Rodriguez

Mensajes recientes
 Instalación de distribuciones
 problemas para instalar ubuntu 7.10 con vista
 ¿Es normal la forma en la que arranca mi Fedora live-cd?
 Software
 "librerias" de C
 porke se dañan mis archivos rar al descomprimir?
 Hardware
 problemas curiosos con mi nuevo monitor
 problemas con internet
 Programación
 Problemas importantes con hilos... [SIN SOLUCION]
 Editor de textos en terminal
 Sistema
 ¿Hay problema si monto ISO's en /media/cdrom? [SIN SOLUCION]
 Grub Error 17, tutorial
 Seguridad
 inyeccion sql
 Fedora tiene un firewall llamado Fuego?
 Redes y Servidores
 wifi con wpa2
 Internet para Mandriva 2008
 Proyectos
 Mi primer Programa: "Changement"
 Crear Un Sistema Operativo...
 Debates
 KONQUEROR -VS- FireFox
 Ser más explícito en los post para ayudar en las búsquedas.
 El Café
 ¿Qué bebes ahora?
 liberacion de los rehenes secuestrados por las farc
 Desarrollo Web
 Conectar Flash con MySQL y PHP
 Vista preliminar de un pagina para imprimir
 Documentación
 howto: convertir documentos docx a texto simple
 how to como instalar WUSB54GC en Debian etch
 Screenshots
 Linux Mint: The Theme From the Grave
 Mi Screenshot con Ubuntu 8.04
 KDE
 como instalo conky en mandriva???
 No reacciona el paquete de restricted-mana ger-kde
 GNOME
 herramienta para red y bateria?[Soluci onado]
 Genome o KDU
 Otros escritorios y entornos
 mouse theme en xfce
 No puedo usar metacity (SOLUCIONADO)
 X Window
 ¿Problema entre X.Org 7.3 y drivers propietarios NVIDIA?
 instalacion Compiz esfera earth(soluciona do)

[ Entrar a los foros ]
Buscar

Sitios amigos

Espacio Linux :: Ver tema - OPENGL CON C++ Y ECLIPSE...o en ultima instancia Visual c++
ReglamentoReglamento general de los foros
 FAQFAQ  BuscarBuscar  Grupos de usuariosGrupos de usuarios  Miembros  PerfilPerfil
  Mensajes privadosMensajes privados  

OPENGL CON C++ Y ECLIPSE...o en ultima instancia Visual c++

Publicar nuevo tema  Responder al tema  Foros de discusión -> Programación
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
daniel_fisi
Forista Nuevo
Forista Nuevo



Miembro No. 27634
Registrado: Apr 28, 2008
Mensajes: 7
Ubicación: Lima

MensajePublicado: Jue May 08, 2008 9:58 am    Asunto: OPENGL CON C++ Y ECLIPSE...o en ultima instancia Visual c++ Responder citando

Hola a todos, bueno tengo un problema. He prometido a mi profesor de Computacion grafica hacer un Graficador 3D...y si no lo hago bien me jala Confundido Bueno el problema que tengo es este....cuando trabajo con OPENGL y las librerias glut y glu, se acostumbra a dejar la ventana de lado...es decir la ventana donde aparecen los graficos se sacrifica....no se acostumbra a trabajar sobre ella......y se crea asi:

glutInitWindowSize( , )
glutInitWindowPosition( , )

con esos comando...y otro que ahorita la verda no recuerdo ¡Uy estoy apenado! jaja...bueno la cosa es que cuando pense hacer ese graficador me imaginaba una interfaz como la de autocad jeje....solo la interfaz pues no creo llegar a hacer algo tan complejo....pero tampoco quiero hacer algo tan simple. Bueno lo que quiero saber es si puede trabajarse esa ventana que se crea, es decir si puedo ponerle botones, menus, cuadros de textos, etc...y claro trabajar con ellos. O si es posible...la verda me pareceria mas facil.... si se pudiera poner esa ventana (aunke es ventana no??) dentro de un Frame creado en Visual c++ (es el unico programa donde se hacer interfaz :S). Ojala puedan ayudarme....y disculpen que me haya extendido tando jeeeeee.
_________________
***Daniel***
Volver arriba
Ver perfil de usuario Enviar mensaje privado
akodo
Forista Medio
Forista Medio



Miembro No. 25400
Registrado: Nov 28, 2007
Mensajes: 154

MensajePublicado: Vie May 09, 2008 4:38 pm    Asunto: Re: OPENGL CON C++ Y ECLIPSE...o en ultima instancia Visual Responder citando

Código:
/* GLUT menu sub-API. */
GLUTAPI int APIENTRY glutCreateMenu(void (GLUTCALLBACK *func)(int));
#if defined(_WIN32) && !defined(GLUT_DISABLE_ATEXIT_HACK)
GLUTAPI int APIENTRY __glutCreateMenuWithExit(void (GLUTCALLBACK *func)(int), void (__cdecl *exitfunc)(int));
#ifndef GLUT_BUILDING_LIB
static int APIENTRY glutCreateMenu_ATEXIT_HACK(void (GLUTCALLBACK *func)(int)) { return __glutCreateMenuWithExit(func, exit); }
#define glutCreateMenu glutCreateMenu_ATEXIT_HACK
#endif
#endif
GLUTAPI void APIENTRY glutDestroyMenu(int menu);
GLUTAPI int APIENTRY glutGetMenu(void);
GLUTAPI void APIENTRY glutSetMenu(int menu);
GLUTAPI void APIENTRY glutAddMenuEntry(const char *label, int value);
GLUTAPI void APIENTRY glutAddSubMenu(const char *label, int submenu);
GLUTAPI void APIENTRY glutChangeToMenuEntry(int item, const char *label, int value);
GLUTAPI void APIENTRY glutChangeToSubMenu(int item, const char *label, int submenu);
GLUTAPI void APIENTRY glutRemoveMenuItem(int item);
GLUTAPI void APIENTRY glutAttachMenu(int button);
GLUTAPI void APIENTRY glutDetachMenu(int button);

Eso es para menus (yo no he trabajado con eso)
No obstante si tienes el glut.h puedes mirar todo lo que puedes hacer ahi.
Lo del boton lo veo factible, aunque no es sencillo. Lo que tendrias que hacer seria algo como capturar el click del raton, comprobar si esta en los limites del boton, y ejecutar lo que sea. Tambien podrias modificar ligeramente el boton al pulsarlo, pero eso es optativo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
daniel_fisi
Forista Nuevo
Forista Nuevo



Miembro No. 27634
Registrado: Apr 28, 2008
Mensajes: 7
Ubicación: Lima

MensajePublicado: Dom May 11, 2008 3:27 pm    Asunto: Re: OPENGL CON C++ Y ECLIPSE...o en ultima instancia Visual Responder citando

Gracias Akodo. Estuve indagando por la internet y encontre algunos tutoriales y ejemplos en los que se usan los comandos que me has proporcionado. Pero por lo que he visto, hasta ahora, solo se puede acceder a los menus interactuando de alguna manera con el programa....mouse, teclado....bueno, lo veo factible. Y estoy pensando hacerlo asi. Pero, por lo que he visto hasta el momento, puedo hacer rotar, trasladar y escalar...pero tambien necesito algo como: ingresar objetos 3D y darle los valores necesarios. Por ejemplo si kiero ingresar una esfera...proporcionar el radio...si es un cubo ...el lado...etc. Es decir necesito digitar valores....como? si no hay cajas de texto Confundido ...a menos que sea por consola, bueno, esa es mi ultima opcion. Bueno...por ahora experimentare con los conocimientos recien adkiridos. Pero cualkier ayuda es bienvenida. Gracias nuevamente.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
akodo
Forista Medio
Forista Medio



Miembro No. 25400
Registrado: Nov 28, 2007
Mensajes: 154

MensajePublicado: Lun May 12, 2008 3:25 pm    Asunto: Re: OPENGL CON C++ Y ECLIPSE...o en ultima instancia Visual Responder citando

Lo que puedes hacer es darle un valor inicial al radio de la esfera, por ejemplo, y modificarla mediante la pulsacion de una tecla. Podrías crear un efecto de interactividad bastante interesante.
El código sería a grandes rasgos:
Código:

//variable global
GLfloat radio = 1.0;
void dibujar_esfera (){
    GLUQuadricObj *esf;
    esf=gluNewQuadric();
    gluSphere(radio,1000,1000);
}
void keyboard(unsigned char key, int x, int y){   //función que va dentro del glutKeyboardFunc(...)
    switch(key)
    case '+' : radio+=0.5;
        glutPostRedisplay();
    break;
    case '-' : radio-=0.5;
        gultPostRedisplay();
    break;
}
void display(){
   //matrices de transformacion
   dibujar_esfera();
   glFlush();
   glutSwapBuffers();
}

Esto tambien lo puedes hacer parametrizando vértices, por ejemplo, para modificar el aspecto de un cubo...
De todas maneras, es algo simple de hacer. Para empezar yo lo haría así, y si encuentro otra manera mejor de hace de esa otra manera.
Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
daniel_fisi
Forista Nuevo
Forista Nuevo



Miembro No. 27634
Registrado: Apr 28, 2008
Mensajes: 7
Ubicación: Lima

MensajePublicado: Mar May 20, 2008 2:26 pm    Asunto: Re: OPENGL CON C++ Y ECLIPSE...o en ultima instancia Visual Responder citando

Hola otra vez. Gracias Akodo, por la ayuda. He estado experimentando como dije que haria, y bueno...he decidido hacer mi graficador 3D asi: utilizar menus para las transformaciones mas comunes, como trasladar, rotar y escalar...pero como complemento de eso necesitare la consola. Me explico: cuando se haga click en el menu rotar, trasladar o escalar...(si es que solo uso esos 3) mediante consola se pedira los datos a ingresar, respectivamente. O sino, poder rotar, trasladar o escalar con el mouse. Pero esto no es lo unico que tengo pensado, sino que quiero que mediante consola se puedan ingresar comandos para ingresar, borrar o transformar objetos.Me parece que es lo ideal...y lo mas conveniente, considerando que no tengo mucho tiempo para hacer este trabajo. Bueno, pero eso en si no es el problema....el problema es, ¿como hago para que la consola siempre este esperando el ingreso de un comando?

Por ejemplo, supongamos estoy trasladando un objeto (con el mouse)...entonces decido dejar de trasladar, ahora quiero rotar. Pero no quiero escoger la opcion rotar de un menu. Sino ingresar en consola "rotar" (para rotar un objeto), e inmediatamente me pida los datos a ingresar o de ser el caso....inmediatamente poder rotar el objeto con el mouse. Eso es lo que me aqueja ahora. Todo lo anterior ya se como hacerlo. Aunque no lo tengo implementado todo aun, se que ya puedo hacerlo. Pero necesito poder trabajar con la consola para hacerlo mas practico.

Espero puedan ayudarme. Hablamos.

Daniel
Volver arriba
Ver perfil de usuario Enviar mensaje privado
akodo
Forista Medio
Forista Medio



Miembro No. 25400
Registrado: Nov 28, 2007
Mensajes: 154

MensajePublicado: Mie May 21, 2008 3:04 pm    Asunto: Re: OPENGL CON C++ Y ECLIPSE...o en ultima instancia Visual Responder citando

¿Por qué no usar el glutKeyboardFunc para saber lo que tiene que hacer?
Si por ejemplo, quieres rotar, que pulse la tecla 'r' y se ponga una variable a true indicando que se esta rotando el objeto. De esta forma te evitarias usar el teminal.

Si lo vas a hacer con el terminal, como lo has planteado, intentaría poner el menu y todo eso dentro del glutIdleFunc. El efecto es que estaría esperando siempre alguna entrada desde el terminal para procesarla. No se si funcionará como esperas, pero no se me ocurre otra forma.

El código sería algo así:
Código:

void myidle (){
   mostrar_menu();
   respuesta=leer_respuesta();
   procesar_respuesta(respuesta);
   modificar parametros de estado
   glutPostRedisplay();
   glutSwapBuffers();
}
int main(...){
   ----inicializacion-----
   glutDisplayFunc(mydisplay);
   glutIdleFunc(myidle);
}

El problema de este código es que no estoy seguro de si seguiría respondiendo a eventos, porque siempre se quedaría esperando una respuesta del terminal.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
daniel_fisi
Forista Nuevo
Forista Nuevo



Miembro No. 27634
Registrado: Apr 28, 2008
Mensajes: 7
Ubicación: Lima

MensajePublicado: Vie Jun 13, 2008 9:44 pm    Asunto: Re: OPENGL CON C++ Y ECLIPSE...o en ultima instancia Visual Responder citando

Hola denuevo. Despues de tiempo que vuelvo a escribir sobre este tema. es que ya no tenia problemas, hasta ahora Confundido . Ojala que alguien pueda ayudarme con esto...pues esta bastante complicado. Bueno, prosegui con mi proyecto (el graficador 3D, con openGL y c++) y esta bastante respetable...esta mucho mejor de lo que yo esperaba...en realidad, esta chevere ! jeje. Me gusta bastante. Bueno, el problema es este....en mi proyecto hay la opcion rotar un objeto 3D...con el mouse...por ejemplo rotacion en los ejes "x" e "y"....con un movimiento del mouse (movimiento vertical) se maneja la rotacion en el eje X...mientras que con el otro movimiento del mouse (movimiento horizontal) se maneja la rotacion en el eje Y. Lo que sucede es esto...supongamos que roto primero en el eje Y...mmm....90 grados. Luego roto en el eje X, y todo funciona a la perfeccion. No hay nada raro...PERO, cuando roto primero en el eje X....mmm...90 grados. Luego roto en el eje Y...pasa algo bastante frustrante, se pierde el eje Y. Con SE PIERDE...me refiero a que la rotacion en realidad no se esta dando en el eje Y...sino en el eje Z (si hemos rotado 90 grados en el eje X, claro esta). Pues el eje Y del objeto kedaria en el eje Z de la escena. La verda no se si me entenderan !...es algo bastante confuso...es necesario ver, MIRAR el movimiento del objeto para darse cuenta. Espero que si alguien tiene tiempo...intente hacer algo como eso....rotar en dos ejes, y vean si ocurre lo mismo que conmigo. Pues ni mi profe me sabe explicar porké funciona asi. Estoy pensando que asi funciona el OPENGL,,,entonces seria un problema del open GL????....un error??...ojala alguien pueda explicarme
Volver arriba
Ver perfil de usuario Enviar mensaje privado
akodo
Forista Medio
Forista Medio



Miembro No. 25400
Registrado: Nov 28, 2007
Mensajes: 154

MensajePublicado: Mie Jun 25, 2008 3:46 pm    Asunto: Re: OPENGL CON C++ Y ECLIPSE...o en ultima instancia Visual Responder citando

Segun lo cuentas, lo que creo que pasa es que mueves el objeto, y con el los ejes. Al hacer un rotate en el eje x de 90 grados, el eje y queda en la posición del eje z según tu visión.
Seguro que al hacer las rotaciones tienes el glMatrixMode(GL_MODELVIEW), lo que creo que deberias hacer es mover la cámara en vez del objeto.
Código:

//variables globales
GLfloat elevacion =   45.0;
GLfloat azimitud  =   0.0;
GLfloat giro      =   -45.0;
GLfloat lejania   =   0.0;

//al comienzo del display
glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
    glTranslatef (0.0, 0.0, -9.0-lejania);//Establecemos la posicion de la camara
    glRotatef(-elevacion, 1.0, 0.0, 0.0);//Rota la camara en el eje x
    glRotatef(-giro, 0.0, 1.0, 0.0);//Rota la camara en el eje y
    glRotatef(azimitud,0.0, 0.0, 1.0);//Rota la camara en el eje z
    glMatrixMode(GL_MODELVIEW);
<continua el display>

void onMouse(int button, int state, int x, int y)
//Recoje eventos del raton
{
     if ( (button == GLUT_LEFT_BUTTON) & (state == GLUT_DOWN) )//Recoje las coordenadas del puntero mientras mantengo el boton izquerdo del raton pulsado
        {
          pero = x;
          yo = y;
          bizq=1;
     
        }
     if ( (button == GLUT_RIGHT_BUTTON) & (state == GLUT_DOWN) )//Recoje las coordenadas del puntero mientras mantengo el boton derecho del raton pulsado
        {
          io = x;
          jo = y;
          bder=1;
        }
     if ( (button == GLUT_LEFT_BUTTON) & (state == GLUT_UP) )//Indica que el boton izquerdo del raton ha dejado de ser pulsado
        {
          bizq=0;     
        }
     if ( (button == GLUT_RIGHT_BUTTON) & (state == GLUT_UP) )//Indica que el boton derecho del raton ha dejado de ser pulsado
        {
          bder=0;   
        }
}

void onMotion(int x, int y)
//Metodo en el cual indicamos que se hace cuando se realizan las acciones indicadas por el raton
{
     if(bizq==1)//Si mantengo pulsado el boton izquerdo
     {
                 elevacion = (elevacion + (y - yo));//Si la y cambia modifica la elevacion de la camara
                 giro = (giro + (x - pero));//Si la y cambia modifica el angulo de giro de la camara
     }
     if(bder==1)//Si mantengo pulsado el boton derecho
     {
                lejania = (lejania + (y - jo));//Si la y cambia modifica la lejania de la camara
                azimitud = (azimitud + (x - io)); //Si la y cambia modifica el angulo azimut de la camara
     }
     pero = x; yo = y; io = x; jo = y;
     glutSwapBuffers();//utilizamos doble buffer
     glutPostRedisplay();//tras actualizar los valores volvemos a lanzar el display
}

Este es el código que uso para mover la camara. Mira a ver si te sirve.

El problemilla que tengo yo es muy parecido. Mover una bola en los ejes x z, mediante teclas, de tal forma que al pulsar una se mueve para el eje x positivo y al pulsar otra va al lado contrario. Al mover la cámara, lo que pasa es que la bola sigue igual, pero la impresión del usuario es que los controles están cambiados.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
daniel_fisi
Forista Nuevo
Forista Nuevo



Miembro No. 27634
Registrado: Apr 28, 2008
Mensajes: 7
Ubicación: Lima

MensajePublicado: Vie Jun 27, 2008 9:37 am    Asunto: Re: OPENGL CON C++ Y ECLIPSE...o en ultima instancia Visual Responder citando

Hola pues Akodo, a los años Bromeando. Bueno lei tu idea, la verdad pense que podria funcionar. Se que funciona, lo que pasa es que, en el proyecto que estoy haciendo ya tengo una opcion para mover la camara, con las teclas en realidad (UP, DOWN, RIGHT, LEFT) y el otro problema es que en la escena puede haber mas de un objeto, entonces no se moveria uno, sino todos los objetos. Bueno, me dieron otra idea: es que en mi proyecto no he utilizado nada de PUSHMATRIX ni POPMATRIX, la verda no se como usarlos correctamente, pero me han dicho que usando esas funciones pueda arreglar el problema. No he tenido tiempo de hacerlo.

Y con respecto a lo que dijiste, que pueda estar moviendo el objeto con todos los ejes, no es asi. Estoy seguro (creo...jeje). Bueno, se que PUSHMATRIX y POPMATRIX es para empilar una matriz de transformacion en toda la escena, o eliminarla. Entonces, como no estoy usando esas funciones no estoy rotando el objeto y los ejes a la vez. Ademas me he tomado la precaucion de dibujarle los ejes a la escena (con rojo) y los ejes de cada objeto que ingreso (con verde). Y al rotar el objeto se ve que no se mueven los ejes de la escena, sino del objeto.

Otra cosa a la que llegamos mi profe, yo y otro "patita" que quiso ayudar, es que si las transformaciones son matrices, entonces;

AxB != BxA

y mi codigo es asi:

glRotatef(ang, 1,0,0);
glRotatef(ang, 0,1,0);
glRotatef(ang, 0,0,1);

(exactamente no es asi, pero esa es la idea)

(copiaria parte de mi codigo, pero tendria que pegar otras partes de mi codigo, y esa parte de mi codigo obligaria a pegar otras partes....jeje)

la cosa es que cambiando el orden de las transformaciones, desaparecia el problema, pero aparecia en otro lado.

La verda estaba pensando en presentar mi proyecto asi, pero lo que yo quiero saber, es porque pasa esto????? no quiero quedarme con la duda.

Ablamos
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes anteriores:   
Publicar nuevo tema  Responder al tema  Foros de discusión -> Programación Todas las horas son GMT - 6 Horas

Página 1 de 1



No puedes publicar nuevos temas en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en encuestas en este foro



Powered by phpBB © 2001 phpBB Group
phpBB port v2.1 based on Tom Nitzschner's phpbb2.0.6 upgraded to phpBB 2.0.4 standalone was developed and tested by:
ArtificialIntel, ChatServ, mikem,
sixonetonoffun and Paul Laudanski (aka Zhen-Xjell).

Version 2.1 by Nuke Cops © 2003 http://www.nukecops.com

Forums ©
 

Copyright | Términos de uso | Política de privacidad | Publicidad | Contáctanos | Blog