Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





¿donde Estan Los Vertices?

Iniciado por Mandelbrot, 27 de Julio de 2005, 10:11:37 PM

« anterior - próximo »

Mandelbrot

Hola, me gustaria saber como puedo obtener los datos de los vertices en OpenGL de primitivas creadas con glBegin, o de objetos cuadraticos, nurbs, etc....  Para despues poder verlos, modificarlos, copiarlos, crear sombras de volumen, guardarlos en disco, etc...

¿donde quedan los datos?, ¿se pierden en la tarjeta grafica despues del renderizado?, ¿quizas se pueden obtener usando listas de presentacion o un buffer de retroalimentacion?, de momento estoy usando matrices de vertices que yo mismo gestiono, pero me gustaria poder tener mas control de los vertices al usar las otras formas de dibujo anteriormente descritas.

a ver si alguien sabe algo.

gracias, y un saludo a todos que soy nuevo en el foro.

samsaga2

 No te acabo de entender... si le has enviado los vertices al OpenGL debes saber donde estan los vertices si no que estas enviando. Si te refieres a leer los vertices que hay guardados en la tarjeta de video (no se porque querrias hacer esto) puedes usar un vertex buffer. Pero repito, si eres tu el que envia los vertices a la tarjeta es que ya sabes de donde sacarlos.

Mandelbrot

me explicare mejor con un ejemplo

yo creo una superficie nurbs usando la funcion gluNurbsSurface y le paso los parametros necesarios, (numero de nudos, puntos de control, tipo de superficie, etc...),  efectivamente en la pantalla me aparece la malla creada.

pero si yo deseo guardar esa malla en un archivo como un objeto 3d en principio no dispongo de las coordenadas de cada vertice porque yo solo conozco los parametros para crear la superficie.

me refiero mas bien a aquellos datos que genera opengl automaticamente, incluida la generacion automatica de normales o de coordenadas de textura, en algun lugar de la memoria debe estar esa informacion.

Creo que usando un buffer de retroalimentacion se puede hacer, que al parecer al activarlo guarda en un buffer la informacion de cada vertice dibujado al que luego se puede acceder, seguire escudriñando a ver si lo consigo pero si alguien sabe algo bienvenido sea.

un saludo.

samsaga2

 Pues te bajas el codigo fuente de las Mesa buscas la funcion de nurbs y ahi lo tienes :P, eso si, copy&paste significa que tu codigo debera ser tambien LGPL.

Ithaqua

 Hay librerías que interceptan las llamadas a opengl. Puede ser una solución muy radical, pero se me ocurre interceptar todos los glVertex que ocurren dentro de las llamadas de nurbs.
thaqua^Stravaganza
http://ithaqua.stravaganza.org

Mandelbrot

 Pero hacer funciones especificas para leer las coordenadas generadas por nubs o por otro objeto solo solucionaria parcialmente el problema, lo ideal seria poder capturar los vertices renderizados en un momento dado.

deberia ser algo asi:

//----------------------------------------------------------------------------------------
GLfloat *Vertices;  // puntero a la lista de vertices
GLuint *Indices;    // puntero a los indices si los hubiera o devuelve null
int numVertices,  numIndices;  //  tamaño de las listas
glEnum tipoPrimitivas;  // GL_TRIANGLES, GL_TRIANGLESTRIP ect...

// comenzamos a capturar
glBeginCaptureVertex3D( Vertices,  &numVertices, &tipoPrimitivas );
glBeginCaptureIndex( Indices, &numIndices );

DibujarEsfera();   // o lo que sea con cualquier metodo o libreria

// indicamos que cese la captura y ya se puede disponer de los datos
glEndCaptureVertex3D();
glEndCaptureIndex();
//----------------------------------------------------------------------------------------

y ya tendria la informacion necesaria para por ejemplo crear una sombra de volumen la cual se obtiene a partir de las aristas del objeto.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.