Probleme mit MeshesIntersect [Gelöst] =\

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Tankbuster

Betreff: Probleme mit MeshesIntersect [Gelöst] =\

BeitragMo, Nov 03, 2008 18:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Es handelt sich hierbei um einen Ausschnitt aus einer Funktion.
Ziel ist es, zu prüfen, ob das Spieler-Mesh (P\mdl) mit dem Schuss-Mesh (S\mdl) kollidiert. Wenn das passiert, soll der Schuss gelöscht werden. Wie auch immer, hier der Code

Zitat:

Function .....()
[...]
If EntityDistance(P\mdl,S\mdl)<10
If MeshesIntersect(P\mdl,S\mdl) Then L_Free=1
EndIf
[...]
If L_Free=1 Then FreeEntity S\mdl:Delete S
[...]
End Function


Das Problem ist, dass MeshesIntersect nicht funktioniert. Entitydistance funktioniert einwandfrei. Das erkenne ich daran, dass es funktioniert, wenn ich den Code wie folgt ändere:

Zitat:

Function .....()
[...]
If EntityDistance(P\mdl,S\mdl)<10
L_Free=1
EndIf
[...]
If L_Free=1 Then FreeEntity S\mdl:Delete S
[...]
End Function

Nur damit habe ich den Effeckt der Poly-Poly kollision ja nichtmehr .... =\

Woran könnte das liegen? Neutral
In der Hilfe steht auch nichts darüber.
Twitter
Download Jewel Snake!
Windows|Android
  • Zuletzt bearbeitet von Tankbuster am Mo, Nov 03, 2008 22:27, insgesamt einmal bearbeitet
 

BIG BUG

BeitragMo, Nov 03, 2008 20:51
Antworten mit Zitat
Benutzer-Profile anzeigen
MeshesIntersect prüft nur, ob sich die Triangles/Kanten überschneiden, nicht ob sich ein Objekt in einem anderen befindet. Wenn Deine Kugel also ein relativ kleines Mesh ist und entsprechend schnell bewegt wird kann sein, dass sich die Kugel in den meisten Fällen gar nicht mit der Außenhaut des Zielmeshs schneidet.
Ein eigener lang gezogener Kollisionsmesh verschafft hier Abhilfe.
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Nov 03, 2008 20:54
Antworten mit Zitat
Benutzer-Profile anzeigen
MeshesIntersect ''kollidiert'' vielleicht nicht so, wie man es gerne haben würde. Es werden lediglich Überschneidungen einzelner Triangles registriert. Befindet sich zum Beispiel der Schuß genau im inneren eines Gegners, so wird dann auch nichts registriert. Aus diesem Grund werden auch immer Radius oder Box -Kollisionen benutzt. Nicht nur weil diese wesenlich weniger Rechenaufwand benötigen, sondern auch aus folgenden Gründen:

- Es lassen sich recht einfach Trefferzonen erstellen. Also bestimmte Objektteile ''empfindlicher'' machen.

- Es werden auch solche Kollisionen registriert, wo aufgrund einer schnellen Bewegung zwischen zwei Frames ein Kollisionsobjekt ''durchfeuert'' werden würde.

Edit1: Oder so, wie BIG BUG beschreibt. Das langezogene Objekt sollte dann aber mindestens die Länge der Relativgeschwindigkeit zum Zielobjekt haben.

Tankbuster

BeitragMo, Nov 03, 2008 22:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ach sry, falscher Alarm. Ich hatte vergessen, dass mein Objekt (P\mdl) kein Objekt in dem Sinne ist. Da das Ausgangsmodell für P\mdl mit LoadAnimMesh geladen wurde, und aus vielen einzelnen Teilen besteht, muss ich natürlich alle erstmal mit FindChild rausfiltern und dann auf Poly-Poly- Kollision prüfen. Quasi war es so, als wollte ich mit MeshesIntersect einen Pivot auf Überschneidung mit dem Schuss testen. Das geht natürlich nicht, weil ein Pivot keine Polys, ect hat. >_<

(bis ich darauf gekommen bin, hat es aber ganz schön gedauert)

Außerdem bin ich mir natürlich voll und ganz bewusst über die Nachteile (aber auch Vorteile Razz )von MeshesIntersect.

Sry für diesen Thread, aber ich stand echt auffem Schlauch Embarassed

MFG: Tanki
Twitter
Download Jewel Snake!
Windows|Android

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group