Strategiespiel-Kameraführung

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Yoda

Betreff: Strategiespiel-Kameraführung

BeitragMo, Okt 10, 2005 18:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi @ all,

ich hätte da mal ein paar fragen, die mit Kameraführung zusammenhängen.
Also hier ist erstmal mein Code:

BlitzBasic: [AUSKLAPPEN]
Graphics3D 1024,768,32,1

SetBuffer BackBuffer()

Type Kasten
Field X
Field Y
Field Z
End Type

Dim Superkasten.Kasten(500)
Dim Kegel(500)


For I = 0 To 499
Superkasten(I) = New Kasten
Superkasten(I)\X = Rand(1000)
Superkasten(I)\Y = Rand(5)
Superkasten(I)\Z = Rand(1000)
Next



For J = 0 To 499
Kegel(J) = CreateCone(8)
PositionEntity Kegel(J),Superkasten(J)\X,(Superkasten(J)\Y)+10,Superkasten(J)\Z
EntityColor Kegel(J),Rand(255),Rand(255),Rand(255)
Next


Kamera = CreateCamera()

MoveEntity Kamera,0,50,100
RotateEntity Kamera,30,0,0

CameraViewport Kamera,200,0,824,568
WireFrame 0

Minicam = CreateCamera()
MoveEntity Minicam,15,50,-5
RotateEntity Minicam,60,0,0

CameraViewport Minicam,1024-200,768-200,200,200

MoveMouse 30,30

Timer = CreateTimer(30)

Repeat
Cls
Color 255,255,255
Text 10,10,\"MouseX(): \"+MouseX()
Text 10,25,\"MouseY(): \"+MouseY()
Text 10,40,\"MouseZ(): \"+MouseZ()

Zoom = MouseZ()
If Zoom < 1 Then Zoom = 1
CameraZoom Kamera,Zoom
CameraZoom Minicam,Zoom

If MouseY() < 15 Then
MoveEntity Kamera,0,1.5,2.5
ElseIf MouseY() > 750 Then
MoveEntity Kamera,0,-1.5,-3
ElseIf MouseX() < 15 Then
MoveEntity Kamera,-1.5,0,0
ElseIf MouseX() > 1010 Then
MoveEntity Kamera,1.5,0,0
EndIf

Plot MouseX(), MouseY()
WaitTimer Timer
RenderWorld
Flip
Until KeyHit(1)
End


wenn man oft nach ganz vorne und hinten scrollt, entfernen sich die Kisten
langsam(bzw. die Kamera von den Kisten)Frage: Kann man das auch anders lösen, als ich das probiert habe? Ich denke da an die Kameraführung von Warcraft 3 oder Age of Empires...
Meine zweite Frage ist ob jemand eine Idee für eine Dreh-Funktion der Kamera hat(quasi Umgucken) Ich habs probiert, das ganze ist aber in einem einzigen Chaos geendet Rolling Eyes Also mit
BlitzBasic: [AUSKLAPPEN]
RotateEntity Kamera,10,0,0
wenn man eine bestimmte Taste drückt...

freue mich über (fast) alle Antworten Wink

Yoda

P.S.: fragt mich nicht wie ich auf "Superkasten" gekommen bin!
 

Ava

Gast

BeitragMo, Okt 10, 2005 18:28
Antworten mit Zitat
Ich habe mal eine sehr komplexe Kamera-Verwaltung geschrieben, wenn ich den Code dafür noch wiederfinde, würde ich Dir die Funktionen mal kopieren. Dann darfst Du sie verwenden - oder daraus lernen, ganz wie Du magst.

Als erstes möchte ich Dir aber gern schon mal einen Tipp geben, dass Du mit Parents/Childs arbeiten solltest bei Deiner Kameraführung. Das macht das korrekte Ausrichten und Bewegen wesendlich einfacher. Smile

PS: wie bist denn Du auf Superkasten gekommen?? Razz
 

Ava

Gast

BeitragMo, Okt 10, 2005 18:45
Antworten mit Zitat
BlitzBasic: [AUSKLAPPEN]
; wegeditiert :P



Huhu nochmal. Ich habe den Code wiedergefunden - aber wahrscheinlich ist er Dir so nicht wirklich hilfreich, oder? Ist halt doch sehr komplex und schwer, sich dort einfach so reinzufinden. Confused Vorallem bei dieser unvorteilhaften Formatierung hier im Forumtext. Ich glaube createControlledCamera() und updateCamera() sind die einzigen Befehle, die man für den Anfang benötigt, um damit testweise eine Camera einzubinden. Falls Du daran interesse has, könnte ich Dir mal ein kleines Demo-Programm dazu schreiben. Falls Dich das so überhaupt gar nicht interessiert, lasse ich es. Wink *g*



[/edit]

Maahhh, shit. Hab grad gesehen, dass da auch noch Funktionen aus anderen Modulen auftauchen. Confused *hmpf*
  • Zuletzt bearbeitet von Ava am Mo, Okt 10, 2005 20:52, insgesamt einmal bearbeitet
 

Yoda

BeitragMo, Okt 10, 2005 19:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Ava,

danke erstmal für deinen Quelltext, auch wenn ich, wie du schon richtig vermutet hast, nicht wirklich durchsteige Neutral Wie funktioniert das mit Parent/Child? Und nicht vergessen-du schreibst an einen Anfänger! Wink
 

Ava

Gast

BeitragMo, Okt 10, 2005 20:50
Antworten mit Zitat
Mit dem Parent/Child funktioniert es so, dass Du ein Object (das Child) an ein anderes Object (das Parent) "ranheftest". Das Child wird dann anschliessend von jeder Bewegung, die das Parent macht, mitbeeinflusst.

Ich würde Dir den Tipp geben, erstelle Deine Camera-Konstruktion aus drei Objekten: Zwei Pivots (als Hilfestellung) und eben der Camera selbst. Das Ganze solltest Du dann so aufbauen, dass der erste Pivot die "Basis" darstellt. An diese "Basis" heftest Du nun die Camera und einen zweiten Pivot fest. Der zweite Pivot ist das "Target", also das Ziel der Camera.

Wenn Du nun die Camera bewegst, dann bewegst Du nur die Basis.
Wenn Du die Camera rotierst, dann rotirst Du die Basis oder bewegst das Target.

Die Camera muss anschliessend immer auf das Target gerichtet werden! (PointEntity())

Ein kleines Beispiel, um dies zu veranschaulichen:
BlitzBasic: [AUSKLAPPEN]
cameraBase = CreatePivot()
cameraTarget = CreatePivot(cameraBase)
camera = CreateCamera(cameraBase)

TranslateEntity camera, 0, 100, 0 ; nur de Camera in die Höhe bewegen, dadurch entsteht der Blickwinkel
MoveEntity cameraTarget 0, 0, 100 ; das Ziel etwas nach vorne bewegen, damit die Camera nicht direkt nach unten schaut

PointEntity camera, cameraTarget


;wenn Du die Camera nun bewegen willst
MoveEntity cameraBase, 0, 0, 1


;wenn Du die Camera nun rotieren willst
TurnEntity cameraBase, 0, 1, 0



So, ich hoffe damit konnte ich Dir diesmal etwas besser helfen. Smile
 

Yoda

BeitragDi, Okt 11, 2005 16:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Ava,

VielenDank für dein Beispiel, es klappt jetzt Very Happy
Die Kamera lässt sich zoomen, scrollen und drehen

Also Vielen Dank nochmal

Yoda
 

Ava

Gast

BeitragDi, Okt 11, 2005 19:01
Antworten mit Zitat
Freut mich, dass ich helfen konnte! Smile

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group