AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Modelando en 3D con Firemonkey

Ein Thema von DP News-Robot · begonnen am 17. Jun 2019
Antwort Antwort
Benutzerbild von DP News-Robot
DP News-Robot

Registriert seit: 4. Jun 2010
14.964 Beiträge
 
#1

Modelando en 3D con Firemonkey

  Alt 17. Jun 2019, 18:40
Firemonkey proporciona la capacidad de utilizar modelos de alambre en 3D en los formatos OBJ, DAE y ASE, que son los más utilizados por los programas de modelado (p.ej blender...)
Para ahorrar tiempo, en vez de crear los modelos nosotros mismos hay sitios web que los ofrecen de forma gratuita y sin pagar royalties.
Uno de los muchos sites que hay es www.turbosquid.com




En esa página hay miles de modelos que podremos utilizar en nuestro programa.
Para empezar tenemos que abrir RAD Studio y crear una nueva Multi-Device Application 3D (tienen los pasos a seguir en este post)
La estructura de los componentes será la siguiente:








El componente tModel3D (Model3D1) deberá colgar de un tDummy (DummyScene) y el objeto de malla en formato OBJ lo tendremos que indicar desde la propiedad MeshCollection (lo indico en color amarillo en la imagen superior).
Nos encontraremos con el incoveniente que el componente tModel3D no tiene asignada la propiedad "MaterialSource" por defecto, por lo que la tenemos que asignar en el evento OnCreate:


procedure TForm1.FormCreate(Sender: TObject);
var mesh : TMesh;
begin
for mesh in Model3D1.MeshCollection do
mesh.MaterialSource := LightMaterialSource1;
end;




También tendremos que añadir un manejador de eventos para conseguir que la figura de malla se mueva según la dirección del ratón y haga un zoom cuando se mueva la rueda del ratón:


procedure TForm1.FormGesture(Sender: TObject;
const EventInfo: TGestureEventInfo; var Handled: Boolean);
var delta: integer;
begin
if EventInfo.GestureID = igiZoom then
begin
if (not (TInteractiveGestureFlag.gfBegin in EventInfo.Flags))
and (not (TInteractiveGestureFlag.gfEnd in EventInfo.Flags)) then
begin
delta := EventInfo.Distance - UltimaDistancia;
DoZoom(delta > 0);
end;
UltimaDistancia := EventInfo.Distance;
end;
end;



Igualmente hay que manejar los eventos OnMouseDown, OnMouseMove y OnMouseWheel del componente ViewPort3D1


procedure TForm1.MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Single);
begin
Punto := PointF(X, Y);
end;

procedure TForm1.MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Single);
begin
if (ssLeft in Shift) then
begin
DummyCamera.RotationAngle.X := DummyCamera.RotationAngle.X - ((Y - Punto.Y) * ROTATION_STEP);
DummyCamera.RotationAngle.Y := DummyCamera.RotationAngle.Y + ((X - Punto.X) * ROTATION_STEP);
Punto := PointF(X, Y);
end;
end;

procedure TForm1.MouseWheel(Sender: TObject;
Shift: TShiftState; WheelDelta: Integer; var Handled: Boolean);
begin
DoZoom(WheelDelta > 0);
end;


Después ejecutaremos la aplicación y podremos ver la figura en 3D desde todos los ángulos posibles,
se puede rotar, ampliar, girar, etc... realmente es espectacular lo que hemos conseguido con unas pocas líneas de código.











Descargar el programa



También te puede interesar
Simular el movimiento de burbujas

Simular el movimiento de electrones en un campo eléctrico


Modelado 3D con Delphi


Una app para visualizar moléculas en 3D Diseñando hypercubos de N dimensiones










Suscribirse :



Weiterlesen...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz