Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





FPS en bloques

Iniciado por DoVerMan_, 01 de Enero de 1970, 01:00:00 AM

« anterior - próximo »

DoVerMan_

                                [Dracula]:
Esta claro, q utilizando d3d, se puede hacer todo eso y mas (como bien dices)a un frame-rate decente, pero tanto diablo, como diablo2 (el cual t puedo aseguro, se puede poner para q rule utilizando directdraw) utilizan 2d, y tmb realizan todo eso, asi como otro monton de juegos en 2d q tmb lo hacen.
No quiero decir con esto q las 3d no sean lo mejor (de hecho si q creo q es lo mejor) para hacer un motor isometrico, lo q pasa es que soy muy novato en esto de las DX y no quiero adentrarme en el tenebroso mundo de D3D hasta no tener un manejo adecuado d un simple engine 2d :ojo:                                

Drácula

                                Supongo que no lo sabes, pero existe un modo de vértice que es 2D. Eso quiere decir que no necesitas PARA nada saber 3D. Se programa igual, igual que si fuera 2D, pero con todas las ventajas:

-Máxima velocidad
-Transparencias y efectos.
-Clipping automático.
-Rotaciones y escalados.

¡Y todo esto sin necesidad de entender el mundo 3D!

                               
ltimas mejoras en Merlín: Multitextura.Control y generación automática de LOD.Importa ASE y X. Frustum Clipping por BB.Render añadido de wireframe y del BB.Animaciones por interpolación.Animaciones de textura...
Actualmente:Octree y jerarquías

DoVerMan_

                                Si todo eso q dices es cierto dime donde me puedo apuntar a ese maravilloso mundo :ojo:

¿Podrias darme alguna direccion?

                               

DoVerMan_

                                [Dracula]:
¿Todo lo q me has dicho, sin utilizar D3D?
Nunca habia oido nada d lo q mencionas, t agradeceria mucho q me dijeras donde puedo conseguir info sobre ese tema, ya sea en castellano o ingles, no atranco a la hora de aprender.                                

Drácula

                                En la SDK de DX.Bájate la última versión, la 8.1, y mira el apartado de FVF. Hay un modo que es el FVF_XYZRHW donde los vértices funcionan como si fuera una pantalla en 2D.

Empieza con los tutoriales y cuando llegues al ejemplo de pintar un triángulo, lo que debes hacer es crear los vértices con este formato y asignar la x,y a sus valores, dejando la w=1
                               
ltimas mejoras en Merlín: Multitextura.Control y generación automática de LOD.Importa ASE y X. Frustum Clipping por BB.Render añadido de wireframe y del BB.Animaciones por interpolación.Animaciones de textura...
Actualmente:Octree y jerarquías

DoVerMan_

                                Muchas gracias Dracula por la info, pero estoy intentando realizar otras pruebas con 8 BPP a ver si obtengo rendimientos decentes, y la cosa parece q va bien.
Me he currao una nueva rutina para colocar bloques con colorkey en 8 BPP, y la he comparado con un BltFast con colorkey, y obtengo los siguientes resultados
*K6-2 450 Ati Rage2C 8Mb 192MbRam Win98
- Media de bloques utilizando BltFastColorKEY = 947 bloques por frame (30 fps)
- Media de bloques utilizando XBltColorKEY = 1917 bloques por frame (30 fps)

*PII-2 450 Riva TNT 32Mb 128MbRam Win2k
- Media de bloques utilizando BltFastColorKEY = 1109 bloques por frame (30 fps)
- Media de bloques utilizando XBltColorKEY = 2675 bloques por frame (30 fps)

¿Que os parecen estos resultados?
¿Creeis q son buenos teniendo en cuenta q la resolucion es 640x480x8?
                               

Drácula

                                Doverman, creo que vas por muy mal camino. Hoy en día, que la gente renderiza a 32bpps y a 1024x768, tu desarrollas un engine basado en 256 colores y 640x480, que además tiene un FrameRate bajo. ¿no piensas que quizás esta pelea tuya por conseguir más fps a costa de perder capacidad está mal encaminada? Sólo tienes que aprender un poco de DX y podrás hacer lo que quieras!
                               
ltimas mejoras en Merlín: Multitextura.Control y generación automática de LOD.Importa ASE y X. Frustum Clipping por BB.Render añadido de wireframe y del BB.Animaciones por interpolación.Animaciones de textura...
Actualmente:Octree y jerarquías

DoVerMan_

                                Te explico Dracula:
Como ya te dije antes, el problema no es aprender a base de documentos, codigo, o cualquier otra cosa, el problema es q la tarjeta esta de la kk (Ati Rage2c 8Mb) no me deja comprobar absolutamente ninguno de los codigos que me bajo de la red o de los q vienen con el sdk 8.1, por ejemplo me remito a lo q me dijiste d los tutoriales de D3d q trae el sdk: cualquiera de ellos los puedo compilar, pero no los puedo ejecutar, es decir si q los puedo ejecutar, pero no me sale absolutamente nada, lo cual es desquiciante.
Yo empece a aprender DX hace aprox 1 mes, y ya he tocado tanto directdraw, como directinput. Y t puedo asegurar q el motivo por el cual me puse a programar en 2d en vez de 3d, es el q t he comentado mas arriba, ya q para mi habria sido mas sencillo (a pesar dq son infinitamente mas complicadas) ir directamente a aprender D3D.

Por favor, si se t ocurre alguna idea sobre el problema q tengo para ejecutar D3D, no dejes de comentarmelo.                                

Lord Trancos

                                [DoVerMan_]

 Justo ayer estaba probando a dibujar 1200 bloques de 16x16 (y luego una imagen con alpha blend que ocupaba toda la pantalla encima) usando el metodo que te comenta Dracula (osea, usar trianglulos tranformados).

 En mi modesto p233MMX + VooDoo Banshee me iba a unos 55 fps (640x480x16 y 800x600x16)

 Vale la pena que averigues pq no te va Direct3D...                                
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.

mICrO

                               
Citar
El 2002-05-06 19:59, DoVerMan_ escribió:
Bien, el problema quiza no sea un problema, la cosa es q estoy intentando hacer un engine isometrico utilizando directdraw, y como tengo la intencion de implementar translucencia utilizando alpha blend, decidi hacerme mis propios blt, utilizando asm en linea bajo c++.
Me he currado un blt que me coloca unos 700 bloques de 64x32 a 30 fps utilizando colorkey y con una res 640x480x16. Pero la verdad me parece un rendimiento bastante pobre, ya que imagino un mapeado, con transparencia e iluminación, y creo que necesitare bastante mar rendimiento. He buscado información, pero casi todo me lleva a utilizar mmx, y eso lo haria incompatible con maquinas antiguas.
Utilizo el siguiente planteamiento:
- Triple buffer en vram
- Surface de trabajo en memoria principal
- Surface de graficos en memoria principal

* utilizando mi blt coloco los bloques del surface de graficos al de trabajo
* una vez concluido el frame, copio el surface de trabajo al backbufer con bltfast
* hago un flip.

¿Podria sacar mas rendimiento utilizando alguna otra tecnica, q no pase por colocar todos los surfaces en vram?

gracias de antemano.


He estado mirando tu rutina y bueno quizas te venga bien conocer el par de manera que usabamos en los viejos tiempos para hacer esto rapido, por software.

Claro.

1º Tecnica. Pre-Analisis de segmentos
Vamos a ver, antiguamene cogiamos los graficos y los "preanalizabamos", buscando los segmentos que habia de gracio, por ejemplo
para el grafico :

OOO121OOO210
OO443212OO12
OO1111111111

Siendo O un pixel negro y los demas de color.
De ese graico sacabamos 5 tiras

tira 0 del pixel (3,0) longitud 3
tira 0 del pixel (9,0) longitud 2
tira 2 del pixel (2,1) longitud 6
tira 3 del pixel (2,1) longitud 2
tira 4 del pixel (10,10) longitud 2

Luego las poniamos en una estructura del tipo..
offsetx:offsexty
longitud
[datos]

Asi la podiamos recorrer y con un puntero y unas bonita sumas hacer memcpy de los datos para pintar simple y otras operaciones para
transparencias y demas.

Habia una mejor que era guardar las tiras "de color variados" por un lado y las de color uniforme por oro (rle) y entonces hacer memcpy y memset

El resultado pintas todas las tiras sin hacer ninguna comparacion menos la del propio bucle en si

2º Metodo. Precompilar
Una vez realizado el primer metodo se podia ir aun mas alla...
Cogias las tiras y generabas codigo ASM que al ejecutarse hacia las operaciones, ya desparecia incluso el bucle era un trozo de codigo que al ejecutarse pintaba

Bueno espero que te sirva de algo

Saludos

PD: Revisando el correo quizas hay algo que no quede claro.

La precompilacion consitia en generar una subrutina, opcodes y datos, y cargarla en memoria con sus stowb, reps,  o lo que fueran.

[ Este Mensaje fue editado por: mICrO el 2002-05-10 15:54 ]                                
ICrO : log off






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.