@Derren:
Jo, aber das ich eine andere Situation. Der Bildschirm hat ja wirklich eine Aufspannung von X und Y und Z geht in die Tiefe.
Wenn ich mich aber in einer 3D-Welt bewege, dann mach ich das auf einem gedachten Boden, der meiner Meinung nach die X-Y-Ebene repräsentiert, und Z die Höhenangabe ist.
@Thema:
Habe nun einen Weg gefunden, wie ich die Camera in ihrem lokalen System drehen lassen kann:
Ich Stelle die Camera in ein Node und drehe das Node.
Komischerweise funktioniert das relative drehen von Nodes wirklich in ihrem lokalen Koordinaten System.
Wer es gerne selber sehen will, hier mal der Code:
Code: Alles auswählen
InitEngine3D()
InitSprite()
InitMouse()
Enumeration
	#Window
	#Camera
	#Texture
	#Material
	#BillboardGroup
	#Node
EndEnumeration
OpenWindow(#Window, 0, 0, 800, 600, "Demo", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#Window), 0, 0, WindowWidth(#Window), WindowHeight(#Window), 1, 0, 0)
CreateTexture(#Texture, 1, 1)
StartDrawing(TextureOutput(#Texture))
	Plot(0, 0, $FFFFFF)
StopDrawing()
CreateMaterial(#Material, TextureID(#Texture))
CreateBillboardGroup(#BillboardGroup, MaterialID(#Material), 1, 1)
For N = 1 To 10000
	AddBillboard(#PB_Any, #BillboardGroup, Random(400)-200, Random(400)-200, Random(400)-200)
Next
CreateCamera(#Camera, 0, 0, 100, 100)
CreateNode(#Node)
AttachNodeObject(#Node, CameraID(#Camera), #PB_Node_Camera)
Repeat
	
	Repeat
		Select WindowEvent()
			Case #PB_Event_CloseWindow
				End
			Case #Null
				Break
		EndSelect
	ForEver
	
	ExamineMouse()
	Yaw.f = MouseDeltaX()/10
	Pitch.f = MouseDeltaY()/10
	Roll.f = MouseWheel()*10
	
	CompilerIf 0
		RotateNode(#Node, -Pitch, -Yaw, -Roll, #PB_Relative)
	CompilerElse
		RotateCamera(#Camera, -Pitch, -Yaw, -Roll, #PB_Relative)
	CompilerEndIf
	
	RenderWorld()
	FlipBuffers()
	
ForEver
Drehe ich die Camera relativ erhalte ich nicht das gewünschte Ergebnis.
Nutze ich stattdresse das Node, funktioniert es.