JirkaDellOro / Prima

Repository for the module "Prototyping interactive media-applications and games" at Furtwangen University
https://jirkadelloro.github.io/Prima
10 stars 17 forks source link

Collision Detection does not work properly #55

Closed UmbertoFalkenhagen closed 2 years ago

UmbertoFalkenhagen commented 2 years ago

Sorry for only posting it now but i wasn't able to post it earlier. However, here is the description of my problem: So I have the collision detector component on all of my laser beams. (4 per laser) It is the same collision detection that we created in the lessons so the calculation should be alright Screenshot_CollsionCheck but still it doesn't work properly. I tried using 2 different ways of implementing the collisions: The first one was using it in my Main Screenshot_UsageInMain but this leads to the problem that when testing it, the collision only seems to be working on one of each beams per laser (I assume the first one) and once the agent touches this one it puts out an intersecting message of all of the beams or at least it puts out this message 4 times. Screenshot_ConsoleLogWhenUsedInMain When I try using it in my collision detectors update method however Screenshot_UsageInCollsionCheckComponent it permanently puts out messages of the agent intersecting with the lasers even though it obviously doesn't.

I tried several other things but none of them worked so I would be happy if somebody could find the problem. My repo can be found here: https://github.com/UmbertoFalkenhagen/PRIMA-own

JirkaDellOro commented 2 years ago

Push die letzte Version, die Audio-files scheinen zu fehlen

JirkaDellOro commented 2 years ago

Mir scheint, Du hast neben der Skalierung auch noch die Position und Rotation der Beams in mtxPivot des Meshes gespeichert. Im Code arbeitest Du aber nur mit der Skalierung. Du müsstest schon alle Information hernehmen. Ich empfehle es aber so zu machen, wie ich es erklärt hatte, nämlich nur die Skalierung und die Translation im Mesh zu haben, die Rotation dagegen im Knoten. Dann passt auch dein Code bezüglich der Rücktransformation.

UmbertoFalkenhagen commented 2 years ago

Danke für die schnelle antwort. Jedoch bin ich mir nicht sicher, ob ich sie richtig verstehe. Die Komponente, die die Laser rotieren lässt, gibt es nur einmal pro Laser und liegt auch dementsprechend nur auf dem Knoten...

Die Audiofiles sollten jetzt auch enthalten sein.

JirkaDellOro commented 2 years ago

Wenn ich in deine JSON schaue, sehe ich Pivots bei den Beams mit Translation und Rotation

UmbertoFalkenhagen commented 2 years ago

Screenshot_LaserPrefab

Also meine Bemas besitzen eine Mesh Komponente und die Verfügt eben auch über translations, rotations und scalings. Nach meinem Verständnis ist das ja aber notwendig um meine beams zu positionieren, damit am ende dieser kreuzförmige Laser entsteht...

UmbertoFalkenhagen commented 2 years ago

Rotiert wird aber letztlich nur über die Transformkomponente im Knoten

JirkaDellOro commented 2 years ago

Du kannst ja nochmal in meinem Beispiel schauen. Es geht aber auch anders, dann solltest Du die mtxWorld der Mesh-Komponente zur Kollisionserkennung heranziehen und auf die Knotentransformation verzichten. Dann prüfst Du gegen -0.5 bis +0.5 in beiden Dimensionen

UmbertoFalkenhagen commented 2 years ago

Screenshot_CollsionCheck Aber genau das mach ich doch in meinem collision check oder etwa nicht? der collision detector befindet sich auf den beams und zieht (zumindest so wie ich es lese) zur berechnung der collision die meshkomponente des nodes heran auf dem der collision detector liegt...

JirkaDellOro commented 2 years ago

Du nutzt die inverse Welttransformationsmatrix des Knotens und vergleichst dann gegen ein skaliertes Mesh dessen Position Du zu kennen glaubst. Deine Meshes sind aber auch rotiert und negativ transferiert. Also entweder alle Meshtransformationen identisch machen und die Knotentransformationen für die Rotation nutzen, oder die Welttransformationsmatrix des Meshes nutzen und selbst invertieren.