3D - Bild schwenken - Koordinaten anpassen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Sereyanne

Betreff: 3D - Bild schwenken - Koordinaten anpassen

BeitragDo, Aug 06, 2009 15:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Leute,

ich weiß nich so recht, wie ich mein Problem erklären soll. Vielleicht verstehts ja trotzdem jemand... Wink

Code: [AUSKLAPPEN]

Graphics3D 1024,768,32,1
;Kameraposition:
cx#=64
cy#=20
cz#=64

Const vor=200, zurueck=208, links=203, rechts=205, menu=1, abbruch=14, OK=28
;Esc für menü, backspace für abbruch, enter für OK

Const schwenklinks=82, schwenkrechts=156
;Numpad 0, Numpad Enter

maus=LoadImage("maus.bmp")

SetBuffer BackBuffer()

cam=CreateCamera()
terrain=CreateTerrain(128)
TerrainDetail terrain, 2000,1
TerrainShading terrain, 1 ;shading einschalten

wuerfel=LoadMesh ("wuerfel.x")
PositionEntity wuerfel, 20,0,10
blender=LoadMesh("blender kugel.x")
PositionEntity blender, 50,10,10

texFloor=LoadTexture("floor.bmp")
EntityTexture terrain, texFloor
textur=LoadTexture("textur.bmp")
EntityTexture blender, textur

light=CreateLight(1)

PositionEntity cam, cx#, cy#, cz#
PositionEntity light,10,10,0

RotateEntity cam,50,0,0

While Not KeyHit (1)

If KeyDown(vor) Then
   cz#=cz#+1
   If cz#>120 Then cz#=120
   PositionEntity cam, cx#, cy#, cz#
EndIf
If KeyDown(zurueck) Then
   cz#=cz#-1
   If cz#<-10 Then cz#=-10
   PositionEntity cam, cx#, cy#, cz#
EndIf
If KeyDown(links) Then
   cx#=cx#-1
   If cx#<-10 Then cx#=-10
   PositionEntity cam, cx#, cy#, cz#
EndIf
If KeyDown(rechts) Then
   cx#=cx#+1
   If cx#>128 Then cx#=128
   PositionEntity cam, cx#, cy#, cz#
EndIf
If KeyDown(schwenklinks) Then
   sl#=sl#-1
   RotateEntity cam,50,sl#,0
EndIf
If KeyDown(schwenkrechts) Then
   sl#=sl#+1
   RotateEntity cam,50,sl#,0
EndIf

UpdateWorld
RenderWorld

X=MouseX()
Y=MouseY()
DrawImage maus,x,y

Flip
Wend
End

Also ich versuchs mal: Meine erste Map mit zwei langweiligen Objekten steht. Ich kann mit der Kamera übers Gelände fahren, toll. Jetzt hab ich mich daran gemacht, die Kamera zu schwenken, damit man die Objekte von allen Seiten betrachten kann. Wenn ich die Kamera schwenke, ist es natürlich so, dass die Richtungstasten nur die allgemeinen Koordinaten abfahren, also nicht aus Sicht der Kamera. Ist ziemlich doof, so umdenken zu müssen... Auf einmal ist rechts unten, oben ist links usw.

Wie kann ich denn "den Nullpunkt so setzen", dass die Richtungstasten immer aus Sicht der Kamera funktionieren?

Thorsten

BeitragDo, Aug 06, 2009 15:26
Antworten mit Zitat
Benutzer-Profile anzeigen
MoveEntity

Zitat:
Eine Kamera kann somit immer nach vorne verschoben werden - egal ob man zur Seite guckt oder nach unten oder oben... Auch die Abstände werden relativ zur letzten Position betrachtet.


mfG,

Thorsten

Sereyanne

BeitragDo, Aug 06, 2009 15:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey cool... das hab ich glatt übergangen. Danke!

Nur irgendwie... springt jetzt alles. Ich hab einfach die Befehle positionentity cam mit moveentity cam ausgetauscht, und wenn ich jetzt in eine richtung drücke, ist alles weg (schwarz) und zurück komm ich nicht mehr...

Tankbuster

BeitragDo, Aug 06, 2009 16:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist doch auch logishc. Bitte etwas mehr die Hilfe benutzen. Mit MoveEntity bewegt man ein Objekt, mit PositionEntity positioniert man es.

Das heißt, wenn du ein Objekt bewegen willst, darfst du natürlich nicht den selben wert wie bei der Positionierung nehmen.

Sagen wir, du positionierst das Objekt auf 300,0,0.
Wenn du jetzt MoveEntity 300,0,0 schreibst, bewegt sich das Objekt jede schleife 300 Einheiten auf der X Achse. Da ist es klar, dass du im Nirgendwo landest.
Twitter
Download Jewel Snake!
Windows|Android

Thorsten

BeitragDo, Aug 06, 2009 17:24
Antworten mit Zitat
Benutzer-Profile anzeigen
*hust* Deswegen hob ich das auch in meinem Zitat hervor..

Sereyanne

BeitragFr, Aug 07, 2009 8:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Achso... entschuldigung. Embarassed Da hab ich wohl nicht aufgepasst.

Aber ich zähle doch schon nur um eins hoch:
cz#=cz#+1

Wie soll ich denn anders zählen? +0,01? Hab ich wohl schon probiert!

Danke schonmal.

Tankbuster

BeitragFr, Aug 07, 2009 9:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Du brauchst doch nicht wie bei 2D Die Position immer in einer Variable speichern. Schreib einfach

Zitat:
MoveEntity Entity,0,0,1


Falls du die Position dann dochmal brauchst, helfen dir EntityX, EntityY, EntityZ Wink
Twitter
Download Jewel Snake!
Windows|Android

Sereyanne

BeitragFr, Aug 07, 2009 10:07
Antworten mit Zitat
Benutzer-Profile anzeigen
He-ey...
Das sieht gut aus auf den ersten Blick!
Jetzt darf ich nur noch ein klein wenig basteln.

Vielen Dank!

(Ich liebe dieses Forum... Cool )
 

SiSoFlo

BeitragFr, Aug 07, 2009 11:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Tankbuster hat Folgendes geschrieben:
Du brauchst doch nicht wie bei 2D Die Position immer in einer Variable speichern.


Richtig! Wenn du es trotzdem machst musst du die Variable in jedem Schleifendurchlauf auch wieder verringern.
Also z.B. z = z / 1.5 oder so.

Das hat den Effekt, dass wenn du die Vorwärts-Taste nicht mehr drückst, dass die Kamera nicht apprupt stehen bleibt sondern erst langsamer wird. (Bremsweg)

mfG Flori
So wie ihr von anderen Menschen behandelt werden wollt so behandelt sie auch!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group