ExamineWorldCollisions() und #PB_Entity_StaticBody

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: ExamineWorldCollisions() und #PB_Entity_StaticBody

Beitrag von Kaeru Gaman »

@Didi

kann das jetzt aus den Bugs raus verschoben werden?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
captain_hesse
Beiträge: 138
Registriert: 17.05.2009 18:55
Computerausstattung: Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
Wohnort: Saarland

Re: ExamineWorldCollisions() und #PB_Entity_StaticBody

Beitrag von captain_hesse »

Entschuldige dann habe ich da etwas mißverstanden aber dennoch bin ich der Meinung das dieses Verhalten nicht richtig ist denn wenn man einen Ego-shoter programmieren will sieht man ja auch die Waffe vor der Kamera und diese würde dann auch im verlauf des Spiels ihre Sollposition verändern und irgendwann würde der Arm sammt Waffe sehr viel weiter vor der Kamera hängen als er soll. Und dann frage ich mich auch warum das immer anfängt zu Laggen nach ca. 20 - 30 Minuten. Und warum kommt das verhalten erst nach einer Weile und nicht von anfang an, wenn das so gewollt währe dann müsste dieses verhalten doch von anfang an so sein.

@Kearu
sorry hat sich überschnitten
Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
Benutzeravatar
captain_hesse
Beiträge: 138
Registriert: 17.05.2009 18:55
Computerausstattung: Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
Wohnort: Saarland

Re: ExamineWorldCollisions() und #PB_Entity_StaticBody

Beitrag von captain_hesse »

hab noch was vergessen, wenn man den Würfel entfernt wie soll ich dann feststellen ob die Kamerea mit einem Objekt zusammenstößt. Wenn man den Würfel unsichtbar macht findet trotzdem diese Verschiebung statt bei 30 minuten noch relativ leicht aber nach längerer Zeit wird das immer schlimmer man stößt dann mit objekten zusammen die man eigentlicht noch garnicht erreicht hat.
Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: ExamineWorldCollisions() und #PB_Entity_StaticBody

Beitrag von DarkDragon »

captain_hesse hat geschrieben:Entschuldige dann habe ich da etwas mißverstanden aber dennoch bin ich der Meinung das dieses Verhalten nicht richtig ist
Ja, ich meinte damit wieder nur, dass das Verhalten mit den physikalischen Eigenschaften, dass da Masse und Reibung und so nur mit der Gravitation mitwirkt und von #PB_Entity_AbsoluteBodyMove unabhängig ist. Immerhin sagt ja #PB_Entity_AbsoluteBodyMove nur, dass man EntityLocate auch verwenden können soll. ODE ist nunmal nicht PhysX. Ich finde die ODE demos recht träge.

captain_hesse hat geschrieben:denn wenn man einen Ego-shoter programmieren will sieht man ja auch die Waffe vor der Kamera
Da zeigt man den Kopf trotzdem nichtmehr an. Früher wurde das sogar ganz in 2D gemacht, also die Hand und die Waffe. Heutzutage kann man einfach den Body- und Headpart weglassen beim Anzeigen, dann kommt es auch bei allen Animationen nicht zu falschen Effekten.

captain_hesse hat geschrieben:und diese würde dann auch im verlauf des Spiels ihre Sollposition verändern und irgendwann würde der Arm sammt Waffe sehr viel weiter vor der Kamera hängen als er soll. Und dann frage ich mich auch warum das immer anfängt zu Laggen nach ca. 20 - 30 Minuten. Und warum kommt das verhalten erst nach einer Weile und nicht von anfang an, wenn das so gewollt währe dann müsste dieses verhalten doch von anfang an so sein.
Wie gesagt, ich kanns keine 20-30 Minuten durchlaufen lassen, soviel Zeit hab ich nicht. Desshalb hab ich keine Ahnung was für ein "Laggen" du meinst. Das laggen kommt bei mir nichtmal wenn ich das Delay(50) reinsetze oder Speed verändere.


@Kaeru Gaman: Nein, es sollte nicht aus den Bugs verschoben werden, denn das Laggen kann ein Memory Leak sein oder eine fehlerhafte Verwendung von ODE. Außerdem sollte Fred/das PB Team dafür sorgen, dass die Positionen nach dem Rendern neu berechnet werden, wenn ODE nicht in einem eigenen Thread arbeitet. Wenn es in einem eigenen Thread arbeitet wären vielleicht Callbacks sinnvoll.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
captain_hesse
Beiträge: 138
Registriert: 17.05.2009 18:55
Computerausstattung: Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
Wohnort: Saarland

Re: ExamineWorldCollisions() und #PB_Entity_StaticBody

Beitrag von captain_hesse »

DarkDragon hat geschrieben:Da zeigt man den Kopf trotzdem nichtmehr an. Früher wurde das sogar ganz in 2D gemacht, also die Hand und die Waffe. Heutzutage kann man einfach den Body- und Headpart weglassen beim Anzeigen, dann kommt es auch bei allen Animationen nicht zu falschen Effekten.
Im Grunde liegt das Problem eigentlich darin eine Kollision zu erkennen.
Wenn man mit der Kamera mit einem anderen objekt zusammenstößt passiert ja garnix man läuft also durch das Hinderniss hindurch. Um dieses Problem zu umgehen habe ich ein Objekt erstellt mit dem sich die Kamera bewegt. Erstellt man dieses Objekt nun mit #PB_Entity_BoxBody oder mit #PB_Entity_SphereBody ist die Trägheit dieses Objekts so groß das eine vernünftige Steurung nicht möglich ist. Macht man dieses Objekt nun statisch mit #PB_Entity_StaticBody lässt es sich zwar frei bewegen aber wenn das Hinderniss auch statisch ist wird wieder keine Kollision erkannt also ist das Hindeniss kein Hinderniss mehr. Bleibt also nur noch

Code: Alles auswählen

EntityPhysicBody(0, #PB_Entity_BoxBody,#PB_Entity_AbsoluteBodyMove)
um die Kamera mit dem Objekt mitzuführen. Mal abgesehen von dem Laggen sorgt dann die Positionsverschiebeung die mit der Zeit immer größer wird dafür das auch hier Probleme bei der Steurung und der Kollisionserkennung auftreten.
Ich habe da jetzt schon unmengen an Experimenten gemacht kann aber die gerade beschriebenen Probleme nicht Lösen. Damit Ihr diese Probleme auch sehen könnt gibt es leider keinen anderen Weg als das Programm mindestens mal ein bis zwei stunden laufen zu lassen was ich aber von niemandem hier verlangen kann mir bleibt also nur euch darum zu Bitten.

Gruß
Armin
Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: ExamineWorldCollisions() und #PB_Entity_StaticBody

Beitrag von DarkDragon »

captain_hesse hat geschrieben:
DarkDragon hat geschrieben:Da zeigt man den Kopf trotzdem nichtmehr an. Früher wurde das sogar ganz in 2D gemacht, also die Hand und die Waffe. Heutzutage kann man einfach den Body- und Headpart weglassen beim Anzeigen, dann kommt es auch bei allen Animationen nicht zu falschen Effekten.
Im Grunde liegt das Problem eigentlich darin eine Kollision zu erkennen.
Wenn man mit der Kamera mit einem anderen objekt zusammenstößt passiert ja garnix man läuft also durch das Hinderniss hindurch. Um dieses Problem zu umgehen habe ich ein Objekt erstellt mit dem sich die Kamera bewegt. Erstellt man dieses Objekt nun mit #PB_Entity_BoxBody oder mit #PB_Entity_SphereBody ist die Trägheit dieses Objekts so groß das eine vernünftige Steurung nicht möglich ist. Macht man dieses Objekt nun statisch mit #PB_Entity_StaticBody lässt es sich zwar frei bewegen aber wenn das Hinderniss auch statisch ist wird wieder keine Kollision erkannt also ist das Hindeniss kein Hinderniss mehr. Bleibt also nur noch

Code: Alles auswählen

EntityPhysicBody(0, #PB_Entity_BoxBody,#PB_Entity_AbsoluteBodyMove)
um die Kamera mit dem Objekt mitzuführen.
Das sollst du ja auch. Nur sollte man das kollidierende Objekt nichtmehr zeichnen. Sonst entstehen unschöne Effekte wenn eine Animation hinzukommt. Dann sieht man z.B. die Bewegungen des Mundes von der Ego-Perspektive aus. Und sowas will man ja nicht. Desshalb sage ich, zeichne den Würfel erst garnicht in der Ego-Perspektive, sondern nur in der 3rd Person Perspektive.

Klar, das ist keine Lösung für das Laggen, aber eine Lösung dafür, dass du den Würfel nichtmehr von hinten plötzlich siehst.
Ich vermute du hast noch einen Fehler, den ich hier nicht habe. Du schreibst andauernd etwas von einer dauerhaften Verschiebung. Das könnte daran liegen, dass die Positionsangaben vom PureBasic Wrapper, der OGRE und der ODE unsynchrorn sind.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: ExamineWorldCollisions() und #PB_Entity_StaticBody

Beitrag von Kaeru Gaman »

DarkDragon hat geschrieben:Nein, es sollte nicht aus den Bugs verschoben werden, denn das Laggen kann ein Memory Leak sein oder eine fehlerhafte Verwendung von ODE. Außerdem sollte Fred/das PB Team dafür sorgen, dass die Positionen nach dem Rendern neu berechnet werden, wenn ODE nicht in einem eigenen Thread arbeitet. Wenn es in einem eigenen Thread arbeitet wären vielleicht Callbacks sinnvoll.
dann mach bitte weiter damit, herauszufinden woran es eigentlich liegt, und melde es dann in geeigneter Form im Englischen Bug-Forum.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
captain_hesse
Beiträge: 138
Registriert: 17.05.2009 18:55
Computerausstattung: Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
Wohnort: Saarland

Re: ExamineWorldCollisions() und #PB_Entity_StaticBody

Beitrag von captain_hesse »

DarkDragon hat geschrieben:Das sollst du ja auch. Nur sollte man das kollidierende Objekt nichtmehr zeichnen. Sonst entstehen unschöne Effekte wenn eine Animation hinzukommt
Ok das leuchtet mir ein allerdings verstehe ich nicht ganz was du mit dem Satz
Ich vermute du hast noch einen Fehler, den ich hier nicht habe. Du schreibst andauernd etwas von einer dauerhaften Verschiebung. Das könnte daran liegen, dass die Positionsangaben vom PureBasic Wrapper, der OGRE und der ODE unsynchrorn sind.
meinst, die Verschiebung ist nicht dauerhaft sondern nur sobald man eine Taste drückt um das Objekt zu bewegen, lässt man die Taste wieder los springt das Objekt wieder an seine richtige Position zurück aber je länger das Programm läuft deto größer wird der Sprung den es macht wenn man es bewegt. X,Y,Z des Objektes sind nicht die gleichen wie die der Kamera solange eine Taste gedrückt ist auch wenn das Objekt mit HideEntity verstekt wurde.
Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: ExamineWorldCollisions() und #PB_Entity_StaticBody

Beitrag von DarkDragon »

captain_hesse hat geschrieben:
DarkDragon hat geschrieben:Das sollst du ja auch. Nur sollte man das kollidierende Objekt nichtmehr zeichnen. Sonst entstehen unschöne Effekte wenn eine Animation hinzukommt
Ok das leuchtet mir ein allerdings verstehe ich nicht ganz was du mit dem Satz
Ich vermute du hast noch einen Fehler, den ich hier nicht habe. Du schreibst andauernd etwas von einer dauerhaften Verschiebung. Das könnte daran liegen, dass die Positionsangaben vom PureBasic Wrapper, der OGRE und der ODE unsynchrorn sind.
meinst, die Verschiebung ist nicht dauerhaft sondern nur sobald man eine Taste drückt um das Objekt zu bewegen, lässt man die Taste wieder los springt das Objekt wieder an seine richtige Position zurück aber je länger das Programm läuft deto größer wird der Sprung den es macht wenn man es bewegt. X,Y,Z des Objektes sind nicht die gleichen wie die der Kamera solange eine Taste gedrückt ist auch wenn das Objekt mit HideEntity verstekt wurde.
Dann ist es kein zusätzlicher Fehler mit einer dauerhaften Verschiebung. Wie ich schon sagte löst HideEntity dieses Problem nicht.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
captain_hesse
Beiträge: 138
Registriert: 17.05.2009 18:55
Computerausstattung: Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
Wohnort: Saarland

Re: ExamineWorldCollisions() und #PB_Entity_StaticBody

Beitrag von captain_hesse »

Na ja aber was kann man denn nun dagegen tun daß das Objekt auch wenn man es bewegt an der richtigen Position angezeigt wird ? Also das es sich so verhällt als wie wenn man es mit #PB_Entity_None oder #PB_Entity_StaticBody declarieren würde, weil dann gibt es so eine Verschiebung nicht aber dummerweise auch keine Kollisionserkennung.
Windows 7 Ultimate 64 Bit / AMD Phenom II 1090T, 6x3200 MHz / AMD HD-6850 / PureBasic 5.1 (x86) (x64)
Antworten