• Jueves 28 de Marzo de 2024, 16:22

Mostrar Mensajes

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


Mensajes - Karkayu

Páginas: [1]
1
OpenGL / Re: Capturar Pantalla
« en: Jueves 27 de Marzo de 2008, 10:32 »
Ya esta resuelto y de una forma mas o menos correcta  :)

Para ello he usado la librería netpbm que viene ya instalada en linux (si no esta instalada usas el apt-get o el gestor de paquetes que use tu distro).

Luego, para capturar la pantalla, construimos una funcion que realice llamas con system de la siguiente forma:

xwd -root -screen -out captura  //Obtenemos formato grafico nativo .xwd
xwdtopnm captura > captura.pnm //Pasamos a pnm
pnm2png captura.pnm > captura.png //Obtenemos un formato mas estandar .png


Aparte habría que controlar que cada captura tuviese un nombre diferente (añadiendole al final un numero pej) y borrar los ficheros .xwd y .pnm que se crean durante el proceso.

Con este método podemos capturar en cualquier escritorio X-Windows

Un saludo

2
OpenGL / Re: Capturar Pantalla
« en: Martes 25 de Marzo de 2008, 11:55 »
Cita de: "su -"
Hay mas de una forma (como usar SDL).
Este tutorial te ayudara.
Gracias por tu respuesta!!!  B)

El tutorial ese ya lo había visto (visito mucho esa página), pero mi intención es no usar SDL. Me han comentado que existen unas librerías llamadas ¿Corona? que sirven para lo que quiero hacer. Sin embargo, no he encontrado mucho sobre el tema. ¿Alguien sabe algo?

De todas formas, y dado ando unpoco excaso de tiempo y que la aplicación solo se va a ejecutar en ordenadores con X-Windows, estoy viendo que terminare por hacer una chapuza (tipo llamada al comando XWD con system o algo similar)  <_<

Un saludo y gracias otra vez

3
OpenGL / Capturar Pantalla
« en: Lunes 24 de Marzo de 2008, 00:02 »
Hola a todos:

A ver si alguno puede orientarme. Necesito implementar la típica opción de que, al pulsar una tecla, se me vuelque la escena que se esta visualizando en un fichero .jpg (o .bmp) ¿Como lo hacéis vosotros? ¿existe alguna librería para ello?

Yo habia pensado en volcar el contenido del framebuffer, pero me genera archivos  .raw y yo necesito algo mas estandar.

Uso C y Glut, bajo Linux ¿Alguna idea?

Un saludo

4
OpenGL / Re: Movimiento De Camara
« en: Sábado 8 de Marzo de 2008, 13:47 »
Cita de: "escondido"
hola Karkayu tengo el mismo problema de QUOTE, pero aun no logro move rla camara, un favor puedes mostrarme la funcion modulo(cam);, de antemano te agradezco saludos
La función modulo tan solo calcula el modulo del vector pcam-obj. Siendo pcam la posicion donde esta colocada la camara y obj hacia que punto mira la camara.

Dicho esto, el codigo es este:
Código: Text
  1. //Devuelve el modulo del vector pcam-obj
  2. float modulo(camara *cam){
  3.  
  4.   GLfloat camx, camy, camz;
  5.   GLfloat objx, objy, objz;
  6.  
  7.  
  8.   //Inicializamos las variables temporales
  9.   camx = cam->pcamx;
  10.   camy = cam->pcamy;
  11.   camz = cam->pcamz;
  12.  
  13.   objx = cam->objx;
  14.   objy = cam->objy;
  15.   objz = cam->objz;
  16.  
  17.   return sqrt((camx-objx)*(camx-objx) + (camy-objy)*(camy-objy) +(camz-objz)*(camz-objz));
  18.  
  19. }//modulo
  20.  

El tipo camara que uso lo tengo definido asi:
Código: Text
  1. struct tipo_camara{
  2.   //Posicion de la camara
  3.   GLfloat camx, camy, camz;
  4.   GLfloat objx, objy, objz;
  5.   GLfloat vx, vy, vz;
  6.  
  7.   //Valores para Orto
  8.   GLfloat xmin,xmax;
  9.   GLfloat ymin,ymax;
  10.   GLfloat zmin,zmax;
  11. }camara;
  12.  

Un saludo

5
C/C++ / Re: Problema Con Programa "fallo En Vector"
« en: Martes 21 de Agosto de 2007, 00:15 »
OK. Lo que vos digais. No voy a seguir discutiendo.


De todas formas, creo hay mejoras formas de dirigirse a la gente.

Un saludo

6
C/C++ / Re: Problema Con Programa "fallo En Vector"
« en: Lunes 20 de Agosto de 2007, 23:02 »
Pretetender enseñar todo de golpe es un error. Se empieza enseñando lo facil (aunque sea lo menos correcto) y posteriormente se continua con lo mas dificil.
El enseñar Pascal y Turbo C (sinceramente dudo que hoy dia enseñen pero bueno) es por motivos didacticos.  Pero eso es otro tema que no tiene nada que ver con el hilo.

He visto resolver el problema de las N reinas en un FOR y no por eso creo que sea correcto usar el FOR para eso.

Y en cuanto a lo de perder el tiempo, cada uno es libre de hacer con su tiempo lo que quiera ¿cierto o no?

Has desviado el tema de este hilo y no creo que ni tan siquiera hayas mirado el codigo del muchacho, verdad? .Y si lo has mirado tiene mas delito el hecho de que hallas "gastado tu tiempo" en poner la puntilla a mis mensajes que en ayudar al muchacho.

La verdad es que para ser moderador no entiendo tu actitud.

La finalidad del foro es ayudar a la gente que lo necesita, no?? En ningun momento he dicho nada que no sea cierto y en todo momento he respetado la opinion del resto. Es mas, te he dado la razon en todo. En ningun momento he pretendido discutir con nadie y siento si esa ha sido la sensacion que he dado.

Tampoco me parece correcto que digas algo y luego cierres el hilo.
¿No aceptas criticas constructivas?

Recuerda que nadie tiene la verdad absoluta de ningun tema (sea temas de informatica o no).

Pd.- Una vez leas el mensaje, puedes borrarlo tranquilamente. Es mas, te agradecira que lo hicieras dado que ensucia el subforo.

7
C/C++ / Re: Problema Con Programa "fallo En Vector"
« en: Lunes 20 de Agosto de 2007, 21:47 »
Cita de: "Eternal Idol"
En cuanto a for, es perfecto y muchisimo mas legible que(while (para mi gusto). Podes usar la condicion que quieras y ademas usar break y continue ... e incluso un for (;;) ... no veo ningun caso donde no usarlo y en la practica en el 99% de las veces (por no decir 100) es lo mas adecuado.

 
No digo que no sea perfecto, simplemente en cualquier lado te enseñan a usar While en vez de For para recorrer una estructura de elementos cuando buscas uno en concreto.
Por supuesto que hay mil maneras de recorrer la estructura y todas son correctas, pero como te he dicho antes, a la hora de enseñar (hablo de la facultad) te indican que uses While. Aparte que en los primeros cursos de programacion, no suele ser normal que metan mas de una condicion en el for.
De todas formas, el muchacho usaba el For SIN ningun tipo de condicion , break o nada parecido. Con lo que recorria toda la estructura siempre.

Encuanto al tema de la depuracion...para C yo suelo usar el gdb en linux y nada me impide el "ayudarme" a solucionar de forma rapida mis errores escribiendo sencillos trozos de codigo en el programa. Lo he usado siempre y para mi es mas comodo.

Pero bueno, para gustos colores y gracias a dios, todos podemos programar/depurar como queramos  ;)

Un saludo

8
C/C++ / Re: Problema Con Programa "fallo En Vector"
« en: Lunes 20 de Agosto de 2007, 14:03 »
Cita de: "Eternal Idol"
En realidad esa costumbre es perjudicial a la larga, lo ideal es usar un depurador en tiempo de ejecucion. No creo ser capaz de cuantificar el beneficio que se obtiene con esta practica.
Hablo de programas de este tipo que son con estructuras sencillas y no son muy extensos.

Por supuesto que es mejor usar un depurador en tiempo de ejecucion, pero no creo que sea malo el programarte tu mismo pequeños procedimientos que aceleren la busqueda de posibles errores.

Un saludo

9
C/C++ / Re: Problema Con Programa "fallo En Vector"
« en: Lunes 20 de Agosto de 2007, 13:13 »
Hola otra vez.... :D

He hecho asi de rapidez lo que te he dicho antes (un metodo para ver los elementos del vector) y cuando modificas la direccion la concatenas al DNI :S Por eso no te encuentra luego el DNI.

Revisa el codigo de modificar (y haz lo del metodo de depuracion, es una buena costumbre hacer eso al programar).

Un saludo

10
C/C++ / Re: Problema Con Programa "fallo En Vector"
« en: Lunes 20 de Agosto de 2007, 13:00 »
He mirado el codigo por encima (luego lo miro mejor) y me gustaria darte un par de consejos.

El programa parece un ejercicio (o examen) de la facultad, cierto?  :D
Siempre que programes intenta intercarlar sentencias y/o procedimientos que te ayuden a DEPURAR. Eso te sirve para solucionar de forma rapida problemas como el que comentas.
Create un procedimiento que te muestre todas las entradas del vector y lo llamas cuando te haga falta para ver si insertas/actualizas/ordenas ... bien en el vector.
Por supuesto cuando finalices el programa puedes borrar dicho procedimiento.

Otra cosa que debes tener en cuenta a la hora de programar es la eleccion de las estructuras adecuadas y bucles adecuados para recorrerlas (esto lo valoran muuucho en la facultad).

Si solo buscas un elemento del vector (un empleado con un dni concreto) no uses FOR. FOR recorre todo el vector. Imagina que el empleado es el primer elemento del vector y tu vector tiene 200 empleados mas. Con FOR los miras todos.
Usa un While con la condicion adecuada de modo que al encotrar el elemento buscado, te salgas de la busqueda.

Tambien, hay cosas en los que en vez de usar IF...ELSEIF...ELSEIF podrias usar un Switch y te quedaria mas ordenado  ;)

En general, el codigo esta bien (salvo ese par de detalles). Esta tarde lo mirare mas afondo (ahora estoy en el curro).
De todas formas, programa el metodo ese que te he comentado al principio para que te ayude a depurar y encuentres el error.

Un saludo

11
OpenGL / Re: Movimiento De Camara
« en: Lunes 2 de Julio de 2007, 19:27 »
Cita de: "Ricardoo"
Hola Karkayu:
Estoy haciendo un sistema solar en opengl, ya lo tengo casi terminado, lo unico que me falta es mover la camara por la galaxia, para ello utilizo la funcion gluLookAt, pero no logro variar de forma correcta los parametros.

No logro rotar los 360 grado y cuando roto un poco ni siquiera me desplaso hacia donde estoy mirando.

podrias ayudarme con esto ?
podrias mostrarme de que forma varias las coordenadas de gluLookAt ?

te lo voy a agradecer muchisimo
Lo que yo hago es pasar a coordenadas esfericas, me muevo y luego deshago el cambio.

Las formulas para estos cambios la spuedes encontrar en cualquier libro de matematicas. De todas formas te pongo las que uso:

ROTACIONES DE LA ESCENA
x = distancia * sin (azim) * cos (elev);
y = distancia * sin (elev);
z = distancia * cos (azim) * cos (elev);


La funcion glutLookAt la tengo asi:
Código: Text
  1. gluLookAt(camx,camy,camz,objx,objy,objz,vx,vy,vz);
  2.  

Para calcular las coordenadas esferericas aplico las formulas:

Código: Text
  1.     //Operamos segun las formulas
  2.     camx=objx+distancia*sin(M_PI/180*azim)*cos(M_PI/180*elev);
  3.     camy=objy+distancia*sin(M_PI/180*elev);
  4.     camz=objz+distancia*cos(M_PI/180*azim)*cos(M_PI/180*elev);
  5.      
  6.     camx2=objx+distancia2*sin(M_PI/180*azim2)*cos(M_PI/180*elev2);
  7.     camy2=objy+distancia2*sin(M_PI/180*elev2);
  8.     camz2=objz+distancia2*cos(M_PI/180*azim2)*cos(M_PI/180*elev2);
  9.      
  10.     vx = camx2-camx;
  11.     vy = camy2-camy;
  12.     vz = camz2-camz;
  13.  

Luego para mover la camara, solo debes variar el valor de los angulos azimutal y elevacion:

Código: Text
  1. void moverArriba(camara *cam){  
  2.   distancia = modulo(cam);
  3.   elev += 2;
  4.   elev2 += 2;
  5.   calcularCoordenadas(cam);
  6. }//moverArriba
  7.  
  8. void moverAbajo(camara *cam){
  9.   distancia = modulo(cam);
  10.   elev -= 2;
  11.   elev2 -=2;
  12.   calcularCoordenadas(cam);
  13. }//mover abajo
  14.  
  15. void moverIzq(camara *cam){
  16.   distancia = modulo(cam);
  17.   azim -= 2;
  18.   azim2 -= 2;
  19.   calcularCoordenadas(cam);
  20. }//moverIzqu
  21.  
  22. void moverDer(camara *cam){
  23.   distancia = modulo(cam);
  24.   azim += 2;
  25.   azim2 += 2;
  26.   calcularCoordenadas(cam);
  27. }//moverDer
  28.  

El tipo CAM es una struct con los valorres de los vectores cam,obj y V (lo hago asi por comodidad).
La función módulo clacula el módulo del vector cam-obj

Perdon por tardar en responder  :rolleyes:

Ya me contaras si te va. Un saludo

12
OpenGL / Re: Texto En La Escena
« en: Miércoles 21 de Marzo de 2007, 09:45 »
Voy a mirarlo.
Muchas gracias por la respuesta!!  ;)

13
OpenGL / Re: Texto En La Escena
« en: Martes 20 de Marzo de 2007, 19:18 »
Cita de: "killrazor"
Eso que pides es basicamente un billboard. Lo que necesitarias es renderizar el texto en una textura, y esa textura aplicarla a un cuadro, y depues usamos el cuadro como billboard. No se bien bien como se hace pero yo empezaria por ahi.
Puff! Eso tambien lo habia pensado yo, pero pienso que es demasiado follon para la sencilla animacion que quiero realizar (La ruta se va dibujando en plan "Vuelta Ciclista a España" :D ), no?

Gracias por responder y apunto el nombre Billboard. Buscare a ver que encuentro  ;)

Un saludo

14
OpenGL / Texto En La Escena
« en: Lunes 19 de Marzo de 2007, 21:36 »
Aqui estoy otra vez  :P

Necesito saber como poner texto dentro de la escena. Yo se poner texto usando glOrtho2d y glRasterPos2f(x,y), pero con esto el texto va "pegado" a la ventana. Es decir, si muevo la camara o aumento el zoom, el texto se va a ver igual siempre.

Lo que yo quiero es dibujar una ruta de puntos y encima de cada punto colocarle un nombre. Si muevo la camara, y por tanto los puntos de la escena, quiero que el texto se mueva con cada punto. No se si me he explicado bien  :D

Me gustaria que me orientaseis o en su defecto que me digais cual es el nombre de la técnica (y asi puedo buscar informacion por internet).

Un saludo

15
OpenGL / Re: Movimiento De Camara
« en: Sábado 17 de Marzo de 2007, 16:20 »
Bueno, ya esta solucionado  :D
Realizaba mal la inicializacion de los valores.

Solo calculaba las coordenadas esfericas en el momento de pulsar alguna tecla y, obviamente, la primera vez la camara no tendria porque estar en el sitio que yo la colocaba.

Lo he resuelto llamando a la funcion calcularCoordenadas en el main. Asi me coloca bien la camara al principio y no da el salto al girarla.

Un saludo y gracais a los que me habeis leido  :)

16
OpenGL / Re: Movimiento De Camara
« en: Viernes 16 de Marzo de 2007, 19:03 »
Hola a todos:

Estoy modelando una escena con openGL/GLUT y me gustaria poder rotar la camara alrededor de dicha escena.

Mi intencion es que la camara gire alrededor de un punto de la escena (como si la escena estuviera dentro de una esfera y la camara se moviera por ella). Para ello usaria los cursores.
Usando arriba/abajo la camara se deberia mover siguiendo el recorrido de un meridiano y con izquierda/derecha la camara se moveria siguiendo el recorrido de un paralelo.

He visto varios tutoriales sobre el movimiento de la camara pero en todos ellos lo que hacen es rotar la escena (con gltranslate y glrotate). Eso no es lo que yo busco ya que, para mi, eso es una perdida de rendimiento importante (sobre todo si no se posee una celeradora 3D) ya que mi escena comienza a ser ostentosa en contenido.

Mi idea es mover la camara variando para ello los valores de los parametros de la funcion gluLookAt .
Para ello paso las coordenadas de la posicion de la camara  a coordenadas esfericas (usando las correspondientes formulas matematicas), hago un incremento del angulo azimutal o elevacion (segun el movimiento que vaya a hacer) y vuelvo a pasar de esfericas a coordenadas de mundo.

El problema que tengo es el siguiente:
Haciendo lo antes comentado, la primera vez que toco alguna tecla para mover la camara (en cualquier direccion), la camara me da un salto y se coloca en otro sitio en el espacio  :blink:
Una vez realizado ese salto, ya gira todo correctamente.

¿Como evito ese salto?

El salto en cuestion mueve literalmente la camara de sitio (he ido mirando los valores de las variables que uso en el gluLookAt en cada momento y cambian bruscamente la primera vez que pulso una tecla).

¿Alguna idea/sugerencia?
¿Es correcto el metodo que estoy usando o conoceis otro mejor?

Un saludo

PD.- Programo con OpenGL/GLUT, en C y bajo Linux  :comp:

17
OpenGL / Re: ¿de Dónde Lo Bajo?
« en: Jueves 5 de Mayo de 2005, 19:51 »
Que tal???  :lol:

A ver si te sirve esto:

MESA instalacion

De todas formas, las ultimas distribuciones de Linux ya traen la GLUT.
Que distribucion usas???
Has probado a instalar esos paquetes (OpenGL y GLUT)????


A cuidarse  B)

18
OpenGL / Re: Rotaciones De Camara En Una Escena Simple
« en: Jueves 5 de Mayo de 2005, 19:47 »
Hola!!! :lol:

Te agredezco mucho que respondieras.
El problema estaba en que machacaba los valores de las variables que almacenaban los angulos (tres pu*os dias para descubrir eso) :angry:

Una vez solucionado eso voy a pasar a meterme con los materiales y la iluminacion.
Seguro que teneis noticias mias  :kicking:
Por lo pronto he pensado que, para no equivocarme mucho, lo mejor es hacerme una rutina que me calcule las normales de todos los poligonos en escena(LINES, LINE_STRIP, QUADS...) y que me las pinte.
Una vez hecho esto me dedico a la iluminacion y todo eso.

Una vez mas, Gracias por responder. :smartass:

A cuidarse   B)

19
OpenGL / Rotaciones De Camara En Una Escena Simple
« en: Domingo 24 de Abril de 2005, 11:48 »
Saludos a todos.

Estoy empezando a programar en OpenGl y me surgen unas dudillas.
Por ahora no son muy complicadas y seguro que con vuestro nivel me las
sabreis responder  :D .

Bueno, al grano.
He programado una escena donde, por ahora, solo tengo puntos y lineas
que dibujan una casita en 3D (si, lo se, es muy triste)  :( .

Al pulsar una tecla, cambio la proyeccion: de paralela a conica y
viceversa.
Para ello he usado glFrustum y glOrtho. Redibujo la escena con cada una
dependiendo del caso.
Luego, situo la camara con gluLookAt

Mi problema viene al intentar mover la camara alrededor de la casita.
Cada vez que pulse alguno de los cursores, la camara debe rotar segun
la direccion correspondiente.
He pensado que lo mas facil es transformar a coordenadas esfericas cada
vez que quiera moverla, variar el angulo correspondiente y recalcular
las nuevas coordenadas.

Pues no va.  :(
No se que hago mal (segurisimo que es una tonteria... :huh: ).

Os explico un poco como lo hago:
camx,camy,camz ==> posicion de la camara
objx,objy,objz ==> posicion del objeto
Estos son los argumentos que tiene el gluLookAt.

dist ==> es la distancia entre esos dos puntos, es decir el modulo de
ese vector.

Cada vez que pulso un cursor, pej Arriba, calculo los angulos
azim y elev usando las formulas:

azim = (M_PI/180) * atan(camx/camz);
elev = (M_PI/180) * asin(camy/dist);

Ahora incremento uno de los dos angulos, en este caso el elev,
elev += 15.0*(M_PI/180);

Recalculo las nuevas coordenadas camx,camy,camz usando las formulas (no

las pongo pq estas son largas....)
Y redibujo la escena con glutPostRedisplay();

De esta forma, como camx,camy,camz son argumentos de gluLookAt y estos
argumentos han variado, deberia funcionar, no?????

Sabeis que hago mal????
Gracias por leer este post tan largo y muchisimas gracias de antemano
para todos los que intenteis ayudarme.

A cuidarse.   B)

Páginas: [1]