3D-Koordinaten in 2D-Koordinaten umrechnen
- NicTheQuick
- Ein Admin
- Beiträge: 8807
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
3D-Koordinaten in 2D-Koordinaten umrechnen
Tagchen mal wieder!
Da ich momentan einen Ferienjob bei der Bosch hier um die Ecke mache
und zwischen dem Abarbeiten der Teile auf dem Fließband immer wieder
jede Menge Zeit bleibt, die ich zum Ideen sammeln, grübeln und rechnen
verwende, fällt ab und zu mal ein brauchbarer Code an.
Einen davon stelle ich hier mal vor.
Mit folgender Include kann man eine oder mehrere virtuelle Kameras im
3D-Raum mit Drehung um alle drei Achsen erstellen und sogar den
Öffnungswinkel einstellen. Dazu gibt es eine Procedure, die
3D-Koordinaten in die 2D-Koordinaten aus Sicht der Kamera umrechnet.
Außerdem kann man die relativen Koordinaten zur Kamera zurückgeben
lassen.
Convert3Dto2D.pbi
Und jetzt ein kleiner Beispielcode mit einem farbigen Würfel und einer Pixel-Kugel drumherum.
Example.pb (Link tot)
Die Steuerung:
Maus:
- links/rechts: Drehung um Y-Achse
- hoch/runter: Drehung um X-Achse
Tastatur:
- links/rechts: Bewegung nach links oder rechts
- hoch/runter: Bewegung nach vorne oder hinten
- links/rechts + STRG: Bewegung nach oben oder unten
- hoch/runter + STRG: Drehung um X-Achse
- A/Y: Drehung um X-Achse
- S/X: Drehung um Z-Achse
- D/C: Ranzoomen oder Rauszoomen
- ESC: Beenden
Bemerkung:
Das langsamste an der Include ist die Berechnung der Kamera-Achsen,
wenn ein oder mehrere Winkel geändert wurden. Die Umrechnungs-
Procedure selbst kommt ohne Winkelfunktionen aus und ist
daher auch recht schnell. Ruckelfreies Berechnen von über 200.000
Koordinaten ist problemlos möglich! Auf schnelleren Rechnern als meinem
geht es sicherlich noch höher.
Viel Spaß damit!
Auch wenn der Code in diesem Forum steht, freue ich mich über
Feedback, Verbesserungsvorschläge, Kritik, usw.
///Edit1:
Codes durch Links ersetzt.
Da ich momentan einen Ferienjob bei der Bosch hier um die Ecke mache
und zwischen dem Abarbeiten der Teile auf dem Fließband immer wieder
jede Menge Zeit bleibt, die ich zum Ideen sammeln, grübeln und rechnen
verwende, fällt ab und zu mal ein brauchbarer Code an.
Einen davon stelle ich hier mal vor.
Mit folgender Include kann man eine oder mehrere virtuelle Kameras im
3D-Raum mit Drehung um alle drei Achsen erstellen und sogar den
Öffnungswinkel einstellen. Dazu gibt es eine Procedure, die
3D-Koordinaten in die 2D-Koordinaten aus Sicht der Kamera umrechnet.
Außerdem kann man die relativen Koordinaten zur Kamera zurückgeben
lassen.
Convert3Dto2D.pbi
Und jetzt ein kleiner Beispielcode mit einem farbigen Würfel und einer Pixel-Kugel drumherum.
Example.pb (Link tot)
Die Steuerung:
Maus:
- links/rechts: Drehung um Y-Achse
- hoch/runter: Drehung um X-Achse
Tastatur:
- links/rechts: Bewegung nach links oder rechts
- hoch/runter: Bewegung nach vorne oder hinten
- links/rechts + STRG: Bewegung nach oben oder unten
- hoch/runter + STRG: Drehung um X-Achse
- A/Y: Drehung um X-Achse
- S/X: Drehung um Z-Achse
- D/C: Ranzoomen oder Rauszoomen
- ESC: Beenden
Bemerkung:
Das langsamste an der Include ist die Berechnung der Kamera-Achsen,
wenn ein oder mehrere Winkel geändert wurden. Die Umrechnungs-
Procedure selbst kommt ohne Winkelfunktionen aus und ist
daher auch recht schnell. Ruckelfreies Berechnen von über 200.000
Koordinaten ist problemlos möglich! Auf schnelleren Rechnern als meinem
geht es sicherlich noch höher.
Viel Spaß damit!
Auch wenn der Code in diesem Forum steht, freue ich mich über
Feedback, Verbesserungsvorschläge, Kritik, usw.
///Edit1:
Codes durch Links ersetzt.
Zuletzt geändert von NicTheQuick am 27.06.2007 15:19, insgesamt 3-mal geändert.
Hallo Nic,
welcome back!
Das fehlt eine If- und eine With-Zeile am Anfang der Proc. 
Grüße ... Kiffi
welcome back!

NicTheQuick hat geschrieben:Auch wenn der Code in diesem Forum steht, freue ich mich über
Feedback, Verbesserungsvorschläge, Kritik, usw.
Code: Alles auswählen
Procedure.d Camera_FOV

Grüße ... Kiffi
a²+b²=mc²
- NicTheQuick
- Ein Admin
- Beiträge: 8807
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Das Forum macht Unsinn, wenn ich die beiden Procedures poste:
- Procedure.d Camera_FOV(*Camera.Camera, FOV.d = -1) ;Setzt "Field of view" der Kamera in Grad (0 < FOV < 180) oder gibt es zurück
- Procedure Camera_Size(*Camera.Camera, MinX.d, MaxX.d, MinY.d, MaxY.d) ;Setzt die maximalen Ausgabekoordinaten
Scheinbar immer bei "<180"
Ich werde den Code heute Mittag einfach hochladen, wenn ich von der Arbeit
komme. Also bis dann.
- Procedure.d Camera_FOV(*Camera.Camera, FOV.d = -1) ;Setzt "Field of view" der Kamera in Grad (0 < FOV < 180) oder gibt es zurück
- Procedure Camera_Size(*Camera.Camera, MinX.d, MaxX.d, MinY.d, MaxY.d) ;Setzt die maximalen Ausgabekoordinaten
Scheinbar immer bei "<180"
Ich werde den Code heute Mittag einfach hochladen, wenn ich von der Arbeit
komme. Also bis dann.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
- NicTheQuick
- Ein Admin
- Beiträge: 8807
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
- mueckerich
- Beiträge: 220
- Registriert: 13.09.2004 11:33
- Wohnort: Am schönsten Flecken der Erde, zwischen PC und Motorrad