Objekt an Bildschirmkoordinate platzieren

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

ChristianK

Betreff: Objekt an Bildschirmkoordinate platzieren

BeitragSa, Jun 23, 2007 12:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Kann man irgendwie die Bildschirmkoordinaten in Weltkoordinaten umrechnen? In etwa so wie beim Picking. Das Problem ist nur das ich nichts zum picken habe, also keinen Hintergrund.

Puccini

BeitragSa, Jun 23, 2007 13:19
Antworten mit Zitat
Benutzer-Profile anzeigen
und wenn du einen pivot als pickedentity angibts??

dann kannste anhand von dme dann alles weitere ausrichten oder??
-=Achtung=-
Suche Hobby-Modelliere der hin und wieder bock hat ein kleines Objekt zu erstellen. Bei Interesse PM
www.ragesoft.de
Passwortmanager: http://ragesoft.de/index.php?o...;Itemid=39

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Jun 23, 2007 13:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Weltkoordinaten zu Bildschirmkoordinaten geht mit ql:CameraProject

Bildschirmkoordinaten zu Weltkoordinaten geht nicht, da es keine Koordinaten dazu gibt. Das was ''entsteht'' ist eine unedlich lange Linie, deren lediglich der Vector bestimmbar ist.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

ChristianK

BeitragSa, Jun 23, 2007 14:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke erstmal.

Hab gerade mal nachgeschaut: SpriteCandy kann seine Sprites pixelgenau platzieren. Ich hab es zwar nicht, deshalb weiss ich nicht, ob es stimmt, aber auf der Website steht Folgendes:

Zitat:
HUD_PositionObject ( Group_Handle%|Object_Handle%, x#, y#, [onScreen%] )

Positions an object (or all objects of a group) either at an absolute screen coordinate (as seen on the monitor) or using the (relative) coordinate system of it's parent layer (which could be rotated or scaled, for example).

Habt ihr eine Idee, wie x-pressive das hinbekommen hat?

Edit:
@Puccini, ich versteh nicht ganz, was du meinst. Smile

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSa, Jun 23, 2007 14:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Zwei Möglichkeiten, Sprites pixelgenau positionieren zu können:

1. Man bewegt die Kamera um die hälfte der Bildschirm-X-Auflösung nach hinten, dann werden alle Sprites die in der Z-Ebene 0 gezeichnet werden, Pixelganau verschoben (eine Weltkoordinate = ein Pixel auf Bildschirm).

2. Bei CameraProjMode=2 werden Entfernungen nicht verzogen, daher muss ein Zoomfaktor her. Der geht so: CamerZoom camera,1.0/(GraphicsWidth()/2.0). Dann ist wieder eine Weltkoordinate = ein Pixel auf dem Bildschirm.

Bei beiden geht das ganze natürlich auch einfacher, wenn man einfach ein Pivot an die Kamera hängt. Dann kann man mit der Kamera ganz normal durch die Gegend laufen, und alle Sprites werden dann ans Pivot gezeichnet. Siehe dazu Draw3D https://www.blitzforum.de/foru...hp?t=21659 wo ich es genauso gemacht habe (in den nächsten Tagen, kommt eine neue Version).

Oder hier ein Beispiel:

Code: [AUSKLAPPEN]
Graphics3D 800,600,0,2
SetBuffer BackBuffer()

camera=CreateCamera()
sprite=CreateSprite()
PositionEntity camera,400,-300,-400
;PositionEntity camera,0,0,-400
HidePointer




While Not KeyHit(1)
 mx=MouseX()
 my=MouseY()

 PositionEntity sprite,mx,-my,0
 RenderWorld

 Rect mx-3,my-3,6,6,0
 Text 0,0,mx+" "+my
 Flip
Wend
End
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

ChristianK

BeitragSa, Jun 23, 2007 15:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, hectic! Very Happy
Genau das, was ich brauche.
 

Shark

BeitragDi, Jul 10, 2007 10:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Guten Tag!

Ich bin durch das Suchen zu diesem Theard gelangt und hab mal spontan versucht hectic's zweite Version zu programmieren, um Sprites pixelgenau positionieren zu können.
Leider funktioniert sie nicht so wie die Erste, deshalb wollte ich fragen was ich falsch gemacht haben, denn ich hab mich an deine Anweisungen gehalten hectic.

Hier der Code:
Code: [AUSKLAPPEN]
Graphics3D ScreenW,ScreenH,0,2
SetBuffer BackBuffer()

Const ScreenW=800,ScreenH=600

camera=CreateCamera()
sprite=CreateSprite()

ScaleSprite sprite,10,10

CameraProjMode camera,2
CameraZoom camera,1.0/(ScreenW/2.0)

HidePointer
MoveMouse ScreenW/2,ScreenH/2

Repeat
 mx=MouseX()
 my=MouseY()

 PositionEntity sprite,mx,-my,0
 RenderWorld()

 Rect mx-3,my-3,6,6,0
 Text 0,0,mx+" "+my
 Text 0,15,EntityX(sprite)+" "+EntityY(sprite)
 Flip
Until KeyHit(1)
End


mfg Shark

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDi, Jul 10, 2007 11:32
Antworten mit Zitat
Benutzer-Profile anzeigen
CameraProjMode macht keine perspektivische Verzerung, denoch aber muss man die Kamera nach hinten ziehen um was zu sehen. Also: In der Entfernung von 0 oder gar hinter der Kamera wird natürlich nicht angezeigt.

Setze mal MoveEntity camera,0,0,-10 oder so da ein. Alles ab -1 bis -KameraRange kannst du da eingeben, es wird immer gleich angezeigt.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group