Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: Sergio en 16 de Febrero de 2003, 02:47:26 PM

Título: 2D en DX9
Publicado por: Sergio en 16 de Febrero de 2003, 02:47:26 PM
                                hola
estoy haciendo unas pruebas de 2D en dx9, y bueno, no hago mas que leer que hay que usar poligonos a partir de la version 8.0, etc. entonces estoy intentando usar vertices transformados y con textura, pero no los puedo mover usando matrices, como lo hago??
es que kiero aprovechar la tarjeta 3d para las 2d tb, pero controlando las 2d con las coordenadas de pantalla, por lo q no me vale la proyeccion ortografica, si hay otra forma mas "limpia" de hacerlo en dx9, os agradeceria q me dijerais cual, siempre usando la tarjeta 3D, claro.
gracias de antemano y un saludo!!!                                
Título: 2D en DX9
Publicado por: [Over] en 16 de Febrero de 2003, 03:02:23 PM
                                Hola.

Sino te quieres complicar mucho la vida (sacando un buen resultado), usa la interfaz IDXSPRITE. Miratelo en la ayuda, no te hará falta usar la camara ni nada y puedes usar las coordenadas de pantalla sin problemas.                                
Título: 2D en DX9
Publicado por: Sergio en 16 de Febrero de 2003, 03:27:51 PM
                                pero esos sprites son acelerados por hardware?? es decir, en realidad son poligonos?

gracias por tu ayuda

un saludo!!                                
Título: 2D en DX9
Publicado por: [Over] en 16 de Febrero de 2003, 04:36:34 PM
                                Hola.

Si, tiene aceleración por hardware y demas historias. Y si, son realmente poligonos, solo que te ahorra el tener que crearlos tu, aplicar la textura y dibujarlos (y controlar la camara). Estos poligonos (sprites) dibujados, iran independiente de la camara, por mucho que la muevas, estos no se moveran (a menos que tu se lo indiques mediante el interfaz).
Mirate la ayuda, es muy sencilla.                                
Título: 2D en DX9
Publicado por: Sergio en 16 de Febrero de 2003, 04:40:44 PM
                                muchiiiiiiiiiiiiiiisimas gracias, era justo lo q necesitaba leer :D

gracias de nuevo y un saludo!                                
Título: 2D en DX9
Publicado por: Sergio en 16 de Febrero de 2003, 08:55:06 PM
                                bueno, ya me he construido una clase para manejar mis sprites. ahora estoy intentando pasar un menu para practicar, entonces cuando dibujo lo q es el sprite de fondo (800x600, teniendo una resolucion de 800x600) me sale demasiado grande. puedo solucionar esto sin escalar el sprite??

un saludo!!                                
Título: 2D en DX9
Publicado por: [Over] en 17 de Febrero de 2003, 01:13:55 AM
                                Hola.

No se cual es exactamente tu problema, o no lo has explicado bien o yo no lo he entendido como dios manda. Te diré que tengas en cuenta que al dibujar texturas, estan han de ser potencia de 2 (128x128,256x256,etc..), si tu has cargado una textura de 800x600 y te la dibuja bien, es porque tu tarjeta trabaja con texturas de 1024x1024, ten en cuenta esto porque mucha gente no tiene tarjetas que soporten eso y no es lo más optimo para la memoria. Si tu valor del scale tanto en x como en y es 1.0f, la textura no ha de dibujarse más grande de lo normal.
Una cosa si noté yo (al menos), si dibujas en modo ventana con los buffers (ancho y alto) declarados, ya no solo me bajaban los fps, sino que la imagen parecia dibujarse "mas grande", pruebalo, se nota algo. ¿Quizas es eso lo que tu dices?

En cuanto al tamaño de textura, yo recomiendo que te crees una clase (o algo asi), que te gestiona imagenes, si son mayores que un tamaño de textura expuesto por ti o el mayor permitido por la tarjeta (en ejecucion), pues que las partas (dividas) en varias texturas de ese tamaño elegido. Yo suelo trabajar con texturas de 256x256 (o menores), dando un resultado bastante optimo para todo.                                
Título: 2D en DX9
Publicado por: Sergio en 17 de Febrero de 2003, 07:06:36 PM
                                hola

CitarUna cosa si noté yo (al menos), si dibujas en modo ventana con los buffers (ancho y alto) declarados, ya no solo me bajaban los fps, sino que la imagen parecia dibujarse "mas grande", pruebalo, se nota algo. ¿Quizas es eso lo que tu dices?

si con lo de declarar los buffers te refieres a darles un valor de ancho y alto en la estructura D3DPRESENT_PARAMETERS, si, lo he hecho, sino, explicame (si no te importa) lo que he de hacer para probar a que se me dibuje mas pequeño. porque he conseguido ajustar el sprite (de 800x600, igual que la resolucion) a toda la pantalla ajustando la escala, pero me parece un metodo un poco chapucero y creo q debe haber otra forma. He probado a hacer el bitmap cuadrado en potencia de 2 y escalar para que en realidad me quede en 800x600, pero sigue apareciendo mas grande.

pues eso, muchas gracias por tu ayuda

un saludo!!!!!!!!!                                
Título: 2D en DX9
Publicado por: Sergio en 21 de Febrero de 2003, 09:55:35 PM
                                hola
bueno, investigando por ahi "he descubierto" que cuando cargas una textura que no es potencia de dos, automaticamente lo transforma a la potencia de 2 mas cercana. el texto en cuestion era este:

CitarQ. When I draw an image using ID3DXSprite::Draw() with 1:1 scaling, the sprite is different than the original image size.  Why?
Since the image file is loaded into a texture, the bitmap is scaled to match the capabilities of the hardware. In general, this means that images that have dimensions that are not powers of 2 will be scaled up to the nearest power of 2.

When loading an image with D3DXCreateTextureFromFileEx(), you can pass a pointer to a D3DXIMAGE_INFO structure, which will be filled with information about the source image. You can then get the size of the texture using IDirect3DTexture::GetLevelDesc() and calculate the required scaling factor for 1:1 rendering:

LPDIRECT3DTEXTURE8 pText;
D3DXIMAGE_INFO info;
D3DXCreateTextureFromFileEx(....,&info,....,&pText);
D3DSURFACE_DESC desc;
pText->GetLevelDesc(0,&desc);
D3DXVECTOR2 vScaling;
vScaling.x=info.Width/desc.Width;
vScaling.y=info.Height/desc.Height;

que lo disfruteis!!!  :P

saludos!!!                                
Título: 2D en DX9
Publicado por: [Over] en 22 de Febrero de 2003, 03:24:10 PM
                                Hola.

Creo que no me entendiste bien o puede que sea yo el que lo explicara mal.
Yo no uso el calculo del scale correcto por el siguiente motivo:
Yo cargo una surface que será el fichero (tamaño 800x600, supongamos), a continuación calculo el numero de texturas necesarias tanto para el alto como para el ancho (de la surface), teniendo en cuenta el tamaño de textura que yo expongo, que puede ser el maximo permitido por tu tarjeta o uno forzado por ti (yo lo fuerzo a 256x256 o menores segun el tamaño de la surface). Una vez que ya conozco cuantas texturas en total necesito, proceso a leer desde la surface y copiar en la textura creada, si la textura es de 256x256, leere 256 pixeles de ancho y 256 pixeles de alto de la surface y los copiaré en la textura y asi hasta haber copiado toda la surface en las diferentes texturas. Teniendo al final un array de texturas de 256x256 que contiene la misma surface (la imagen del fichero), pero en texturas potencia de 2 que puede manejar mi tarjeta.
Es posible que si tu cargas una textura de 800x600, la pase al tamaño mas cercano potencia de 2 y como tu tarjeta puede manejar hasta texturas de 1024x1024 (por lo que veo) no tienes problemas, salvo en el escalado, que lo hace incorrecto. Pero esa aplicación no podrá ser ejecutada en tarjetas que usen texturas menores.
Tal como yo lo dibujo, eligiendo 1:1 de escalado, lo hace perfectamente.

Chao.                                
Título: 2D en DX9
Publicado por: Sergio en 22 de Febrero de 2003, 05:12:44 PM
                                Hola.
Ahora entiendo lo que dices. No te habia pillado :P. Bueno, y una vez que has dividido la imagen en varias texturas de potencia de 2, dibujas un sprite con cada una de ellas o como lo haces?

Gracias de nuevo.
Un saludo!!                                
Título: 2D en DX9
Publicado por: Repoker en 07 de Marzo de 2003, 03:14:33 AM
                                Donde haya un buen glLoadIdentity(); .. que se quite lo demás  :D

tsk tsk .... gl roxorz ..