Kamerabewegung

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Mr. P

Betreff: Kamerabewegung

BeitragSo, Feb 05, 2017 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Leute, habe folgendes Problem:
Ich habe vor eine Art Shooter zu programmieren nur scheitere ich leider schon bei der Kamerabewegung. Diese bewegt sich zwar jeweils um die X- und die Y-Achse, aber es passiert auch, dass diese eine schiefe Position annimmt. Wie kann ich dieses "Verdrehen" beseitigen, vielen dank im Voraus. Hier ist der Code:

BlitzBasic: [AUSKLAPPEN]

Graphics3D 800,600,32,1

SetBuffer BackBuffer()

light = CreateLight()
cam = CreateCamera()
cube = CreateCube()

PositionEntity cube,0,-10,0
PositionEntity cam,0,0,-10
PositionEntity light,0,10,0

Repeat

move(cam)
UpdateWorld
RenderWorld

Flip

Until KeyHit(1)

Function move(e)
If KeyDown(200)
MoveEntity e,0,0,-1
EndIf
If KeyDown(208)=True
MoveEntity e,0,0,1
EndIf
If KeyDown(203)
MoveEntity e,1,0,0
EndIf
If KeyDown(205)
MoveEntity e,-1,0,0
EndIf
TurnEntity e,-MouseYSpeed(),-MouseXSpeed(),0
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
End Function


*edit
das problem mit rotateentity ist, dass ich mit mousexspeed und mouseyspeed() - beim bildschirmrand angelangt - keinen wert mehr für beide funktionen habe

Hab das ganze jetzt gelöst wie Xeres es gesagt hat mit movemouse graphicswidth()/2, graphicsheight()/2
und dann immer die mausgeschwindigkeiten zu der rotation addiert. thx
  • Zuletzt bearbeitet von Mr. P am Di, Feb 07, 2017 15:48, insgesamt 3-mal bearbeitet

Xeres

Moderator

BeitragSo, Feb 05, 2017 20:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde immer mit den absoluten Koordinaten und Funktionen arbeiten: also PositionEntity und RotateEntity statt MoveEntity und TurnEntity.
Positionen in 3D sind immer floats und die sind immer ungenau. Wenn du ein Objekt 100x um eine Strecke bewegst, haben sich 100x Rundungsfehler akkumuliert. Außerdem musst du irgendwann sowieso wissen, wo exakt ein Objekt sich befindet - es ist sinnvoller die Positionen und Winkel selber zu verwalten.

Denn Roll-Winkel des Objekts zu nullen, ist dann trivial oder gar unnötig.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

FireballFlame

BeitragMo, Feb 06, 2017 19:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Xeres: Bei der mausgesteuerten Rotation ergibt das Sinn, aber warum du PositionEntity statt MoveEntity benutzen willst, verstehe ich nicht ganz.
Warum die Objektposition selbst verwalten, wenn Blitz3D das im Hintergrund eh schon macht? Ob du nun 100x dein Objekt mit MoveEntity bewegst, oder 100x die Addition selbst machst, dürfte für den Rundungsfehler (verglichen mit welchem "korrekten" Wert eigentlich?) egal sein. Wenn du die Koordinaten für irgendetwas brauchst, kannst du sie auch mit EntityX/EntityY/EntityZ abfragen.
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Xeres

Moderator

BeitragMo, Feb 06, 2017 21:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn man die Verwaltung BB überlassen will, kann man das sicher tun - aber Trennung von Model und View (oder was in BB als dieses durchgehen könnte) hat sich vielerorts als positiver Ansatz herausgestellt.
Bewege ein Objekt gegen eine Schräge mit Kollision: Okay, du bekommt die neue Position des Objekts nach dem sliden, aber wo hätte das Objekt sein sollen? Vielleicht kann die Differenz mal wichtig sein.

Die eigene Positionierung kann wie bei Geld-Werten auch mit Integer Zahlen und einem beliebigen Skalierungsfaktor erfolgen: Kommastellen gehen nicht einfach so verloren.

@Mr. P:
Bewege den Mauspointer immer wieder in die Bildschirmmitte. Wenn du Menüs o.ä. benutzt, braucht es halt noch eine Bedingung, damit man da wieder raus kommt.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group