ich hänge bei einem kleinen Testprogramm an folgendem merkwürdigem Problem fest. Ich erstelle eine Billboardgruppe mit mehreren Billboards und lasse die "wandern", zugleich wandert die Kamera in die andere Richtung. Das ganze geht auch ein zwei mal gut (Billboard läuft durch den Bildschirm, aber beim dritten mal oder vierten mal verschwindet das Billboard (ist schwierig zu erklären). Vor allem verschwindet das Billboard einfach mitten beim "wandern" und nicht wenn es erst "am Ende des Bildschirms" ist. Hier eine ganz einfaches Beispiel dazu:
Code: Alles auswählen
EnableExplicit
If InitEngine3D()
If InitSprite() And InitKeyboard() And InitMouse()
If OpenWindow(0, 0, 0, 1200, 720, "Purebasic", #PB_Window_TitleBar | #PB_Window_ScreenCentered)
If OpenWindowedScreen(WindowID(0), 0, 0, WindowWidth(0), WindowHeight(0), 0, 0, 0, #PB_Screen_WaitSynchronization)
Debug "Hardware init done!"
Else
Debug "Error: can't open windowed screen!"
End
EndIf
Else
Debug "Error: can't open window!"
End
EndIf
Else
Debug "Error: can't init screen, keyboard and mouse!"
End
EndIf
Else
Debug "Error: can't init 3d engine!"
End
EndIf
Define.i i, ExitProgram, billboard
Define.f x, y, z
CreateTexture(0, 32, 32)
StartDrawing(TextureOutput(0))
For i = 0 To TextureHeight(0)/2-1
Circle(TextureWidth(0)/2, TextureHeight(0)/2, TextureHeight(0)/2-i, RGB(15*i,15*i,15*i))
Next
StopDrawing()
CreateMaterial(0, TextureID(0))
CreateNode(0)
CreateBillboardGroup(0, MaterialID(0), 4, 4)
billboard = AddBillboard(0, 0, 0, Random(30)-15)
CreateCamera(0, 0, 0, 100, 100)
RotateCamera(0, -90, 0, 0, #PB_Absolute)
MoveCamera(0, 0, 50, 0, #PB_Absolute)
AttachNodeObject(0, CameraID(0))
AttachNodeObject(0, BillboardGroupID(0))
Repeat
If IsWindow(0)
While WindowEvent() : Wend
EndIf
If ExamineKeyboard()
If KeyboardReleased(#PB_Key_Escape)
ExitProgram = #True
EndIf
EndIf
ExamineMouse() ; not used here
MoveNode(0, 0, 0, -0.05)
MoveBillboard(billboard, 0, 0, 0, 0.1)
If CameraProjectionY(0, BillboardX(billboard, 0), BillboardY(billboard, 0), BillboardZ(billboard, 0)) = -1
x = BillboardX(billboard, 0)
y = 0.0
z = NodeZ(0)-10
BillboardLocate(billboard, 0, x, y, z)
Debug "Distance from node to billboard: " + Sqr( Pow( NodeX(0) - x , 2 ) + Pow( NodeZ(0) - z , 2 ) )
EndIf
RenderWorld()
FlipBuffers()
Until ExitProgram = #True
End 0