Anuncios Google

Md2 Quake II

Bueno, a ver si alguien me puede explicar un poco esto, resulta que me he estado ojeando la documentacion que existe sobre estos modelos que usaba el viejo quake 2 (1997) , partes del código y demás,  y me he montado un cargador para esos modelos md2 animados.

Testeandolo en el pc primero, con open gl y glu, funciona estupendamente, (menos las texturas, que no consigo que se vean...), pero al pasarlo a ds, el modelo directamente s ve deformado, tanto que ni se parece al original,  para pasarlo a ds lo adapté, pero solo la parte que dibuja la normales, por lo que no creo que sea por eso, el resto está igual que en la version de pc.

tal vez, esté metiendo la pata y el código que he usado en pc no funcione igual en ds aunque sean las mismas funciones, pero no se como solucionarlo ¿?, pongo el codigo de dibujado, a ver si es que he puesto una burrada, para la ds, sé que AntonioND, utiliza md2 en su motor, pero creo que luego los pasa a bin con su editor, así que tal vez sea algo de eso.

	int index=0;
	glBegin(GL_TRIANGLES);
		for (index=0;index< m_header.numTriangles;index++)
		{
 
			v1[0] = m_glVertexData[m_triData[index].vertexIndices[2]].x - m_glVertexData[m_triData[index].vertexIndices[1]].x;
			v1[1] = m_glVertexData[m_triData[index].vertexIndices[2]].y - m_glVertexData[m_triData[index].vertexIndices[1]].y;
			v1[2] = m_glVertexData[m_triData[index].vertexIndices[2]].z - m_glVertexData[m_triData[index].vertexIndices[1]].z;
 
			v2[0] = m_glVertexData[m_triData[index].vertexIndices[1]].x - m_glVertexData[m_triData[index].vertexIndices[0]].x;
			v2[1] = m_glVertexData[m_triData[index].vertexIndices[1]].y - m_glVertexData[m_triData[index].vertexIndices[0]].y;
			v2[2] = m_glVertexData[m_triData[index].vertexIndices[1]].z - m_glVertexData[m_triData[index].vertexIndices[0]].z;
 
			//normales
			v3[0] = v1[1]*v2[2] - v1[2]*v2[1];
			v3[1] = v1[2]*v2[0] - v1[0]*v2[2];
			v3[2] = v1[0]*v2[1] - v1[1]*v2[0];
 
			glNormal3f(v3[0],v3[1],v3[2]);
 
 
glVertex3f( m_glVertexData[m_triData[index].vertexIndices[2]].x,
						    m_glVertexData[m_triData[index].vertexIndices[2]].y,
						m_glVertexData[m_triData[index].vertexIndices[2]].z);
			glVertex3f( m_glVertexData[m_triData[index].vertexIndices[1]].x,
						m_glVertexData[m_triData[index].vertexIndices[1]].y,
						m_glVertexData[m_triData[index].vertexIndices[1]].z);
			glVertex3f( m_glVertexData[m_triData[index].vertexIndices[0]].x,
						m_glVertexData[m_triData[index].vertexIndices[0]].y,
						m_glVertexData[m_triData[index].vertexIndices[0]].z);
		}
	glEnd();

 

Otra cosa que no sé es si estos modelos así en bruto, con ciento y pico frames, pueden consumir mucha memoria, o hay que limitarse a modelos sin animacion para que la ds los soporte ¿?

Bueno espero que alguien pueda decirme que ocurre ;)

saludos!

 

 

 


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de copete23

XD, yo ya sabia que hacias

XD, yo ya sabia que hacias algo con los md2, pero no sabia exactamente que XD

Es verdad, lo de los floats XD no me acordaba, maldita ds..., mirando el src de libnds, he visto que por ejemplo glVertex3f lo va pasando a glVertex3v16, y claro, eso consumirá un monton (anda que hacer una consola que no soporta bien la coma flotante a estas alturas....), lo de la limitación a +/- 7.99 no tenia ni idea, osea, que el modelo que cargues tiene que ser mas pequeño... bueno, me miraré ese cargador a ver que tal :)

Y respecto a lo de si consumen mucha memoria?, esque he leido por ahi que no es bueno utilizarlos en sistemas con poca ram porque al parecer si por ejemplo el modelo tiene 130 frames seria como si cargases en ram 130 modelos ¿?, por lo que he visto en la documentacion que he encontrado, creo que no es así, ocumaria mas o menos lo que pese el modelo, pero  no se...

 

Bueno, gracias por la aclaracion :)

El formato de los vértices

El formato de los vértices en 16 bits, si no recuerdo mal, es 4 bits parte entera + 12 bits parte decimal. Como tiene signo, nos quedamos en que los máximos valores son:

Máx: 0x7FFF = 7.999755859375

Min: 0x8000 = -8.00000000000

De ahí la limitación en el tamaño. La solución sería, por ejemplo, reducir el modelo en el ordenador a un cubo de 1.0 de arista y hacer glScale para devolverlo al tamaño original en la DS.

 

Lo de la RAM... pues realmente no se una solución mucho mejor a cargarlo todo... Piensa que la lectura desde FAT es lenta, así que si tienes muchos modelos animados a la vez podría dar problemas... De todos modos, piensa en que, con el límite de polígonos de la DS, los modelos tampoco pueden ocupar mucho. Si ocupan demasiado es que tienen demasiados polígonos, asi que no va a poder dibujar muchos más modelos y no tienes que cargar mucho más en la RAM...

Imagen de copete23

aaam, pero aún así si por

aaam, pero aún así si por ejemplo el archivo md2 pesa 60kb, al leerlo y pasarlo a ram ocupará lo mismo 60kb ¿no?

Toma, eso está claro xD.

Toma, eso está claro xD. Pero 60 KB no es nada... Puedes tener tranquilamente un par de docenas de modelos así en la RAM, el binario del juego, y que te quede sitio para música y más cosas... El problema no es que ocupen mucho, es no saber administrar la memoria.

Imagen de copete23

XD ok, entendido, por cieto,

XD ok, entendido, por cieto, el cargador del enlace que me pusiste está estupendo, ahora entiendo las burradas que ponia en el mio XD (burradas para una ds).

gracias por la ayuda!!

Te puedo asegurar que

Te puedo asegurar que AntonioND no usa MD2 en su motor... xD Y, por lo que mas quieras... NO uses ese código, ni aunque funcione en ordenador:

1-La DS tiene las coordenadas limitadas a +/-7.99... así que cualquier modelo que se salga se verá mal. Por eso se ven mal los modelos que usas.

2-NO USES FLOATS. MD2 lo único que tiene son floats, es un formato horrible para la DS. Hay un cargador bueno: http://payk.drunkencoders.com/ (en proyects) que lo que hace es convertirlo todo a fixed point antes.

 

Para el Nitro Engine lo que hago es convertir el formato a uno que solo usa fixed point, para que sea infinitamente más rapido de dibujar que el MD2.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.