ProjectedXY() für 3d meshes verwenden?
Übersicht

mevosBetreff: ProjectedXY() für 3d meshes verwenden? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
mit CameraPick, PickedX, PickedY, PickedZ | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
mevos |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
wie soll das damit denn gehen? ich möchte ein 3d mesh auf 2d koordinaten anzeigen... | ||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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! ![]() |
||
MrKeks.net |
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
Mr.Keks |
![]() Antworten mit Zitat ![]() |
---|---|---|
das wird aber nicht funktionieren, weil bei gängiger 3ddarstellung nicht durch den abstand, sondern die tiefe geteilt wird ![]() |
||
MrKeks.net |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group