Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





No más DelphiX, quiero DirectX!

Iniciado por Cronodragón, 01 de Enero de 1970, 01:00:00 AM

« anterior - próximo »

Cronodragón

                                He estado usando DelphiX para aprender, pero me gustaría pasarme a los encabezados de DX8. Con DelphiX me he saltado parte del aprendizaje de DX, y ahora tengo algunas dudas. Me gustaría que algún fiebre de Delphi (como Lord Trancos) me diera algunas pistas. Primero, cómo inicializo el modo 3D en ventana y en pantalla completa, y como lo finalizo para restaurar la ventana. Además en DelphiX tengo un timer, cual es el timer en los encabezados? Lo otro es, si ya no voy a usar componentes, pues tengo que hacerlo todo a pie con los encabezados, aún necesito un form? Supongo que si pudiera deshacerme del form tendría aplicaciones más pequeñas, entonces cómo puedo hacer una aplicación 3D mínima? Y sólo me falta preguntar por los controles: ??

Les agradecería infinitamente si pudieran ilustrarme con trozos de código o si me pasaran enlaces a programas sencillos.

Saludos!!
                               

Lord Trancos

                               
Citar
El 2002-08-20 06:00, Cronodragón escribió:
He estado usando DelphiX para aprender, pero me gustaría pasarme a los encabezados de DX8. Con DelphiX me he saltado parte del  

jejeje, bienvenidooooo al maravilloso mundo de DirectX a pelo con Delphi! :riendo:

Citar
pistas. Primero, cómo inicializo el modo 3D en ventana y en pantalla completa, y como lo finalizo para restaurar la ventana. Además  

Esto es muy facil, echale un vistazo a mi pagina donde podras encontrar los tutoriales del SDK de microsoft portados a delphi (tambien puedes encontrar otras conversiones mucho mas estrictas en la pagina de clootie)

Citar
en DelphiX tengo un timer, cual es el timer en los encabezados? Lo otro es, si ya no voy  

Yo no uso timers, normalmente uso el evento onIdle, lo malo es que eso dispara el uso de la CPU... :triste:
Creo que cualquier timer de alta resolucion sirve (es posible que el timer del DelphiX te sirva)

Pregunta a los de VC++; ¿vosotros que usais?

Citar
a usar componentes, pues tengo que hacerlo todo a pie con los encabezados, aún necesito un form? Supongo que si pudiera deshacerme  

no, no hace falta.

Citar
del form tendría aplicaciones más pequeñas, entonces cómo puedo hacer una aplicación 3D mínima? Y sólo me falta preguntar por los controles: ??

te envio por e-mail un ejemplo de una aplicacion minima (sin form)

En cuanto a los controles,... si no usas form y no son controles sino componentes no visuales; aun puedes usarlos. Si quieres usar controles visuales en una aplicacion sin form.... puffff... no vale la pena.

Citar
Les agradecería infinitamente si pudieran ilustrarme con trozos de código o si me pasaran enlaces a programas sencillos.

puedes empezar por mi web :ojo:

y aqui tienes una especie de SDK para directX y delphi hecho a base de demos que la gente ha enviado a borland y que saldran en el companion CD del delphi 7:

http://codecentral.borland.com/codecentral...isting?id=18611

es un buen paquete para empezar. :ojo:

SaludoteZ!
                               
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.

Cronodragón

                                Gracias Lord! Ya tengo tus ejemplos, pero también tengo un problema. Yo instalé DX8, y cuando ejecuto el ejemplo del mirror, me aparece un dialogo diciendo que no se puede iniciar el hardware 3D. Eso está bien porque yo no tengo tarjeta aceleradora. Pero a continuación aparece un dialogo que dice que cambie el modo a 16, 24 o 32 bits... pero ya está en 32 bits, y probé con otros modos, pero igual aparece el error. Qué podrá ser?

Maldito M$-DirectX siempre dando problemas.

- Marco                                

Lord Trancos

                                Te funcionan otros programas de DX8 por software? (Como los ejemplos del SDK de Microsoft o la beta de Merlin de Dracula)
                               
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.

Cronodragón

                                Los del SDK si me funcionan, la mayoría. No he probado los de Drácula. No se si tendré que pasarme a Visual C++... pero no me gusta, la verdad es que en Delphi todo es muy sencillo, incluso he visto programadores experimentados que tratan de pasarse de C++ a Visual Basic para hacer las cosas más fácil. Delphi es un punto intermedio.                                

Cronodragón

                                Estaba viendo que hay cierta diferencia entre la rutina de inicialización de Microsoft y la tuya. Voy a probar con la de MS, pues me funcionó cuando compilé con Visual C++

Pude traducir esto, pero aún no logro utilizarlo:



var

 D3D       : IDirect3D8 = nil;

 D3DDevice : IDirect3DDevice8 = nil;



function InitD3D (Handle : hWnd) : HRESULT;



 var

   DisplayMode       : TD3DDisplayMode;

   PresentParameters : TD3DPresent_Parameters;



begin

 D3D := Direct3DCreate8 (D3D_SDK_VERSION);



 if D3D = nil then

 begin

   Result := E_FAIL;

   Exit;

 end;



 if Failed (D3D.GetAdapterDisplayMode (D3DADAPTER_DEFAULT, DisplayMode))

   then

 begin

   Result := E_FAIL;

   Exit;

 end;



 ZeroMemory (@PresentParameters, SizeOf (PresentParameters));

 PresentParameters.Windowed := True;

 PresentParameters.SwapEffect := D3DSWAPEFFECT_DISCARD;

 PresentParameters.BackBufferFormat := DisplayMode.Format;



 if Failed (D3D.CreateDevice (D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, Handle,

   D3DCREATE_SOFTWARE_VERTEXPROCESSING, PresentParameters, D3DDevice)) then

 begin

   Result := E_FAIL;

   Exit;

 end;



 Result := S_OK;

end;



procedure Cleanup;

begin

 D3DDevice := nil;

 D3D := nil;

end;



procedure Render;

begin

 if not Assigned (D3DDevice) then

   Exit;

 D3DDevice.Clear (0, nil, D3DCLEAR_TARGET, D3DCOLOR_XRGB (0, 0, 255), 1.0, 0);

 D3DDevice.BeginScene;



 D3DDevice.EndScene;

 D3DDevice.Present (nil, nil, 0, nil);

end;



                               

Lord Trancos

                                A que te refieres cuando dices que no logras utilizarlo ?
                               
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.

JPeP

                                [Lord Trancos]
Gracias por el link del "SDK", hay ejemplos muy buenos como un tal smile invaders... :ojo:

[Cronodragon]
Me pasa lo mismo que a ti, algunos ejemplos (sobre todo los de 3d) me dan errores y me indican que cambie la profundidad de color. Otros me dicen que mi tarjeta no esta preparada, pero es que yo creo que con una VOODOO 3 3000 que tengo deberia bastar, asi que debe ser algun fallo de los programas.                                

Cronodragón

                                Lord: Me refiero a que estoy tratando de llamar las rutinas InitD3D, Render, y Cleanup... pero no se desde donde debería llamarlas. Probé poniendolas en estos eventos pero no pasa nada:



procedure TForm1.FormCreate(Sender: TObject);

begin

 if Failed (InitD3D (Application.Handle)) then

   Application.Terminate;

end;



procedure TForm1.FormDestroy(Sender: TObject);

begin

 Cleanup;

end;



procedure TForm1.Timer1Timer(Sender: TObject);

begin

 Render;

end;



Luego, corriendo el código paso por paso me di cuenta de que ni siquiera crea el D3D, o sea que la línea

D3D := Direct3DCreate8 (D3D_SDK_VERSION);

siempre asigna nil a D3D haciendo que todo se caiga desde un principio. Talvez estoy llamando a la función en un momento inoportuno. ??

JPeP: Sí, ese mismo es mi problema, pero a mi no me corre nada hecho en Delphi que no tenga DelphiX.

Yo mismo: Tendré que comprar tarjeta aceleradora???... Maldito DX, parece que le tiene fobia a los compiladores de Borland. Habrá que poner FINIT de línea por medio.                                

BeRSeRKeR

                                Yo no sé nada de DirectX + Delphi pero bueno ahí va una sugerencia..prueba a iniciar D3D en el evento OnActivate, a lo mejor es que necesita algo que en OnCreate aún no se ha creado...

Saludos
                               
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

DraKKaR

                                Ten en cuenta que el evento OnActivate se llama cada vez que la ventana recibe el foco de la aplicacion. Así que tendras ke tener cuidado para inicializar D3D solo la primera vez.

P.D.: Es ke aki nop se habla nunca de OpenGL? v.v                                

Lord Trancos

                               
Citar
Luego, corriendo el código paso por paso me di cuenta de que ni siquiera crea el D3D, o sea que la línea  

D3D := Direct3DCreate8 (D3D_SDK_VERSION);

siempre asigna nil a D3D haciendo que todo se caiga desde un principio. Talvez estoy llamando a la función en un momento inoportuno. ??

Que raro.. :-?
Que valor tiene D3D_SDK_VERSION ?
                               
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.

HaltedMode

                                Jejeje Lord Trancos mola mucho ver tu nick plantado en la pagina de Borland, se nota que te estas mojando con el mundo Delphi. Sigue asi.
Saludos                                

Cronodragón

                                Bueno, solo voy a probar una vez mas con el metodo OnActivate... mejor me paso a C++, seguire trabajando en Delphi para otros proyectos. Puesto que esta corriendo bien con DirectX 7, y que DX tiene problemas con los compiladores de Borland, puedo sacar como conclusion que la version 8 de DX no se ejecuta en una aplicacion Delphi a menos que uno tenga tarjeta aceleradora... culpa de Microsoft. Pero bueno, cuando empence con esto de DX revise los ejemplos en C++ y entendia muy poco, ahora que ya tengo mas experiencia, se ven faciles, y hasta me he entusiasmado un poco. En todo caso no es bueno para un programador cerrarse en un solo lenguaje, ya sea Basic, C o Pascal. Voy a aprender algo nuevo. Gracias por las ayudas, seguramente les voy a estar preguntando sobre C en los proximos dias. :riendo:

- Marco
                               

Lord Trancos

                                Ok, pero que conste q a mi el ejemplo por software si que me funcionaba :lengua:

:loco:
                               
i>SaludoteZ de Lord Trancos!
http://www.dxlab.tk - http://dxlab.host.sk - programación de DirectX con Delphi.






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.