ProjectedXY() für 3d meshes verwenden?

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

mevos

Betreff: ProjectedXY() für 3d meshes verwenden?

BeitragFr, Okt 13, 2006 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo
Bei dem CameraProject Beispiel in der Online Hilfe wird 2d auf der höhe eines 3d meshes dargestellt.

Code: [AUSKLAPPEN]
   CAMERAPROJECT camera,ENTITYX(cube,1),ENTITYY(cube,1),ENTITYZ(cube,1)
   RENDERWORLD
   OVAL PROJECTEDX()-10,PROJECTEDY()-10,20,20,0
   RECT PROJECTEDX(),PROJECTEDY()-15,1,30,1
   RECT PROJECTEDX()-15,PROJECTEDY(),30,1,1
   TEXT PROJECTEDX()+20,PROJECTEDY()-5,"Mitte Objekt"
   FLIP
WEND
END


(ausschnit aus OH)

Ich möchte aber statt 2d grafik ein 3d Mesh genau dort angezeigt bekommen wo oben
"Mitte Objekt" steht.
Also genau vor der Kamera auf der 2d X und Y breite/höhe.
Wie könnte ich das machen?
 

Dreamora

BeitragFr, Okt 13, 2006 18:46
Antworten mit Zitat
Benutzer-Profile anzeigen
mit CameraPick, PickedX, PickedY, PickedZ
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

mevos

BeitragFr, Okt 13, 2006 23:22
Antworten mit Zitat
Benutzer-Profile anzeigen
wie soll das damit denn gehen? ich möchte ein 3d mesh auf 2d koordinaten anzeigen...
 

Dreamora

BeitragFr, Okt 13, 2006 23:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein du willst ein 3D Mesh in 3D Koordinaten so positionieren, das sie an einer bestimmten 2D Position ist, denn in 2D kannst du keine 3D Objekte positionieren.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

mevos

BeitragFr, Okt 13, 2006 23:52
Antworten mit Zitat
Benutzer-Profile anzeigen
ja das ist richtig, aber wie soll ich das mit CameraPick machen? damit bekomme ich doch nur die position, kann die 2d position aber nicht festlegen

StepTiger

BeitragSa, Okt 14, 2006 17:09
Antworten mit Zitat
Benutzer-Profile anzeigen
zusätzlich praktisch wären winkelfunktionen

sin cos

das reicht
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.
 

Dreamora

BeitragSa, Okt 14, 2006 18:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Alternativ kannst du auch mal nach der Positionierungsformel suchen, welche genutzt wird, um Sprites "pixelgenau" zu positionieren.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Mr.Keks

BeitragSa, Okt 14, 2006 18:57
Antworten mit Zitat
Benutzer-Profile anzeigen
sin und cos haben damit überhaupt nichts zu tun (=.


also, du scheinst das problem nicht zu sehen: auf eine 2dkoordinate kommen seeeehr viele 3dkoordinaten in frage, weil raum halt tief ist. mit camerapick, wie dreamora es vorschlägt, erfährst du zu einer bildschirmkoordinate, welcher punkt im 3draum am nächsten ist und von einem pickbaren mesh gefüllt wird.

um projectedxyz umzukehren musst du nur wissen, wie 3d- in 2d-koordinaten umberechnet werden. hier mal die simpelste formel einfach im kamerakoordinatensystem und ohne zoom:
Code: [AUSKLAPPEN]
x2d = graphicswidth()/2 + x3d / z3d
y2d = graphicsheight()/2 - y3d / z3d
z2d = (z3d>0)*2-1-(z=0) ; das kann dir egal sein

nunja, du hattest in der schule ja bestimmt auch bis zum erbrechen gleichungssysteme. dann sollt es dir auch möglich sein, etwas umzuformen:
Code: [AUSKLAPPEN]
x2d = graphicswidth()/2 + x3d / z3d    |-graphicswidth()/2  | *z3d
<=> (x2d - graphicswidth()/2) * z3d = x3d 

wie du siehst, benötigst du also zwei parameter, um ein x3d zu errechnen: x2d und z3d (graphicswidth nehme ich mal eben als konstant an). am schlausten ist es also unter umständen, einfach einen hübschen wert für z3d zu wählen, sagen wir 512... dann haste da stehen:
Code: [AUSKLAPPEN]
x3d = (x2d - graphicswidth()/2) * 512

ein objekt positionierst du demzufolge so:
Zitat:
positionentity blubb, (x2d - graphicswidth()/2) * 512,(-y2d + graphicsheight()/2) * 512,512



...hmm, bin mir gerade unsicher, ob sich wirklich keine fehler eingeschlichen haben. viel spaß beim ausprobieren! Wink
MrKeks.net

StepTiger

BeitragSo, Okt 15, 2006 13:27
Antworten mit Zitat
Benutzer-Profile anzeigen
also ich finde die idee mit sin und cos nicht schlecht.

da brauchst du nur den sichtwinkel wissen. Im normalfall ist der x-90° und y-67.5°

dann abhängig von der kameraposition via sin und cos den punkt berechnen und das ganze mit der tiefe multiplizieren.

Eventuell schreib ich dir mal einen code rein.
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

Mr.Keks

BeitragSo, Okt 15, 2006 13:54
Antworten mit Zitat
Benutzer-Profile anzeigen
das wird aber nicht funktionieren, weil bei gängiger 3ddarstellung nicht durch den abstand, sondern die tiefe geteilt wird Smile
MrKeks.net

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group