![]() |
3D-Objekt
ich probiere mich gerade mit 3D-Objekten und habe ein Problem:
Ich möchte auswählen können, ob ich eine TSphere, einen TCylinder TCube usw. haben möchte. Ich möchte also auswählen können, welches Objekt ich möchte. Gibt es eine 3D-Form, wo ich sozusagen auswählen kann, ob ich eine Tsphere möchte oder etwas anderes (also während das Programm läuft)? Mit dem Tmodel3D kann man andere Dateien hinzufügen, aber ich möchte eigentlich nur die oben gewählten Formen haben. Vielen Dank für eure Hilfe |
AW: 3D-Objekt
Du kannst die gewünschten 3D-Formen entweder zur Designzeit erstellen und je nach Bedarf das benötigte 3D-Objekt zur Laufzeit sichtbar schalten. Hierfür kannst Du entweder eine "Geräteübergreifende Anwendung" als "3D-Anwendung" erstellen oder eine "Leere Anwendung"mit einem ViewPort3D-Object darin.
Zur einfacheren Handhabung würde ich das mit einem TDummy-Object verwenden (erleichtert die Positionierung im Raum) und darin die benötigten 3D-Controls erzeugen. Das wäre die einfachste Variante. Wenn Du zur Laufzeit mehr Flexibilität haben willst und eine unterschiedliche Anzahl von 3D-Objekten zur weiteren Verwendung erzeugen willst, könntest Du globalisierte Routinen schreiben, die je nach 3D-Objekt halt das Objekt entsprechend behandeln (Klick, Move, usw). Hier mal ein (stark reduzierter) Auszug aus einem Demoprogramm von mir (in einer ListBox sind Namen von 3D-Formen gespeichert und je nach Auswahl wird zur Laufzeit ein 3DControl erzeugt (im eigentlichen Demo kann man noch Farbe, Texturen oder Licht hinzufügen):
Delphi-Quellcode:
procedure TF_Main.bnAdd3DControlClick(Sender: TObject);
var s: string; C3D: TControl3D; begin if cb3DObjNames.ItemIndex <> -1 then begin s := cb3DObjNames.Items[cb3DObjNames.ItemIndex]; if s = 'Sphere' then begin C3D := TControl3D (TSphere.Create(Dummy1)); TSphere (C3D).SubdivisionsAxes := 50; TSphere (C3D).SubdivisionsHeight := 50; end; if s = 'Cube' then begin C3D := TControl3D (TCube.Create(Dummy1)); end; if s = 'Cone' then begin C3D := TControl3D (TCone.Create(Dummy1)); TCone (C3D).SubdivisionsAxes := 50; TCone (C3D).SubdivisionsHeight := 50; end; C3D.Name := C3D.ClassName + Dummy1.ChildrenCount.ToString; C3d.Parent := Dummy1; C3D.Width := 2; C3D.Height := 2; C3D.Depth := 2; C3d.Visible := True; C3D.Position.X := -2; // Set Eventhandlers to react on User-Actions C3D.OnMouseDown := Control3DMouseDown; C3D.OnMouseMove := Control3DMouseMove; C3D.OnMouseUp := Control3DMouseUp; // Add created 3D-Object to List, to select programaticaly at runtime or by user cbCreated3DObjects.Items.AddObject(c3D.name, C3D); C3d.BringToFront; Viewport3D1.Repaint; end; end; |
AW: 3D-Objekt
Entschuldigung für die späte Antwort... ich danke Ihnen vielmals!:)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz