AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Delphi-PRAXiS - Lounge Delphi-News aus aller Welt Modelo 3D del vehículo Perseverance realizado con Firemonkey
Thema durchsuchen
Ansicht
Themen-Optionen

Modelo 3D del vehículo Perseverance realizado con Firemonkey

Ein Thema von DP News-Robot · begonnen am 9. Aug 2021
Antwort Antwort
Benutzerbild von DP News-Robot
DP News-Robot

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

Modelo 3D del vehículo Perseverance realizado con Firemonkey

  Alt 9. Aug 2021, 12:50








A continuación les muestro un ejemplo sobre cómo cargar el modelo de malla del rover Perseverance que actualmente está en Marte para obtener información del clima y del suelo de este planeta.
Este modelo lo ha puesto a disposición de todos la NASA y está en formato glb.
Si les interesa este tema y quieren ampliar más información sobre el programa de exploración de marte lo pueden consultar aquí
Los archivos glb contienen un modelo de un objeto 3D guardado en el formato de transmisión GL (glTF).
Almacena información sobre un modelo 3D, como la jerarquía de nodos, cámaras y materiales, animaciones y mallas en formato binario. Los archivos GLb son la versión binaria de los archivos GLTF.
Los archivos GLB pueden utilizarse para guardar y compartir activos digitales entre diferentes herramientas de modelado 3D, de forma similar a los archivos .DAE. Sin embargo, también están optimizados para la velocidad de descarga y el tiempo de carga en tiempo de ejecución, lo que hace que sean más fáciles de usar en programas de modelado 3D basados en móviles y en la web. También son un formato más racionalizado para cargar y descargar desde bases de datos de activos digitales en línea, como 3D Warehouse y Remix 3D.



Para descargar el modelo usa el componente tNetHTTPClient, ( también se podría utilizar tIdHTTP ), que lo que hace descargar el modelo desde la URL

https://mars.nasa.gov/system/resourc...rseverance.glb

y almacenarlo en un tMemoryString.
Luego utiliza la clase TGLBModel para crear los nodos, el escalado, los materiales con el fin de crear la hoja de malla que visualizaremos en el tViewPort y que nos permitirá girar, rotar o escalar el modelo del rover.

Dentro del ViewPort se ha definido un componente tLight y un tDummy que contendrá toda la imagen del vehículo.

Lo bueno de utilizar Firemonkey es que de una forma transparente al usuario utiliza la capacidad de cálculo de la GPU del equipo para renderizar la imagen prácticamente en tiempo real.

El código es el siguiente:

unit Perseverance.FMX.Main;

interface

uses
System.SysUtils,
System.Types,
System.UITypes,
System.Classes,
System.Variants,
System.JSON,
FMX.Types,
FMX.Controls,
FMX.Forms,
FMX.Graphics,
FMX.Dialogs,
FMX.StdCtrls,
FMX.Controls.Presentation,
FMX.Edit,
FMX.Objects,
FMX.Layouts,
FMX.Types3D,
System.Net.URLClient,
System.Net.HttpClient,
System.Net.HttpClientComponent,
System.IOUtils,
System.Math.Vectors,
FMX.Controls3D,
FMX.Objects3D,
FMX.Viewport3D,
FMX.MaterialSources,
Execute.GLB.FMX, FMX.TreeView;

type
TMainForm = class(TForm)
Layout1: TLayout;
Text1: TText;
edURL: TEdit;
btGo: TButton;
NetHTTPClient: TNetHTTPClient;
Viewport3D1: TViewport3D;
Light1: TLight;
root: TDummy;
procedure btGoClick(Sender: TObject);
procedure Viewport3D1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Single);
procedure Viewport3D1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Single);
procedure Viewport3D1MouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; var Handled: Boolean);
procedure FormCreate(Sender: TObject);
private
{ Déclarations privées }
FDown: TPointF;
FModel: TGLBFMXModel;
FMesh: TMesh;
FMat: TMaterialSource;
public
{ Déclarations publiques }
end;

var
MainForm: TMainForm;

implementation

{$R *.fmx}

procedure TMainForm.FormCreate(Sender: TObject);
//var
// Stream: TFileStream;
begin
FModel := TGLBFMXModel.Create(Self);
FModel.Parent := root;

// Stream := TFileStream.Create('..\..\..\VCL\win32\debug\TEST. GLB', fmOpenRead);
// FModel.LoadFromStream(Stream);
// Stream.Free;
end;

procedure TMainForm.btGoClick(Sender: TObject);
var
GLB: TMemoryStream;
begin
GLB := TMemoryStream.Create;
try
{$IFDEF DEBUG}
if FileExists('Perseverance.glb') then
begin
GLB.LoadFromFile('Perseverance.glb');
end else begin
{$ENDIF}
NetHTTPClient.Get(edURL.Text, GLB);
{$IFDEF DEBUG}
GLB.SaveToFile('Perseverance.glb')
end;
{$ENDIF}
GLB.Position := 0;
FModel.LoadFromStream(GLB);
finally
GLB.Free;
end;
end;

procedure TMainForm.Viewport3D1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Single);
begin
FDown := PointF(X, Y);
end;

procedure TMainForm.Viewport3D1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Single);
begin
if (ssLeft in Shift) then
begin
root.RotationAngle.X := root.RotationAngle.X + (Y - FDown.Y) * 0.3;
root.RotationAngle.Y := root.RotationAngle.Y + (X - FDown.X) * 0.3;
FDown.X := X;
FDown.Y := Y;
end;
if (ssRight in Shift) then
begin
root.Position.Z := root.Position.Z - (Y - FDown.Y) * 0.3;
FDown.Y := Y;
end;
end;

procedure TMainForm.Viewport3D1MouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; var Handled: Boolean);
begin
root.Position.Z := root.Position.Z - ((WheelDelta / 120) * 0.3);
end;

end.

------------------

Este sería el diseño del form:






Estructura del programa:







Programa terminado en Firemonkey








Código fuente

Archivo ejecutable



El programa se ha realizado con Delphi 10.4.1


El autor del código es Paul Toth (MVP Embarcadero), su github es el siguiente:


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 16: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