EntityRadius Problem

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

count-doku

Betreff: EntityRadius Problem

BeitragMo, Jun 14, 2010 14:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Ich habe ein Problem mit dem erstellen eines Kollisionsradius um ein Objekt.
Immer wenn der Radius 1,1 ist geht alles.
Wenn ich jetzt nur den X Radius erhöhe, geht das Objekt trotzdem auch mehr nach oben. Woran liegt das?

Code:
BlitzBasic: [AUSKLAPPEN]
Function CreateSpeeder%(Scale#,posx#,posy#,posz#)
Local modl=LoadMesh("Media\Models\Ship.3ds")
RotateMesh modl,0,90,0
ScaleEntity modl,Scale,Scale,Scale
PositionEntity modl,posx,posy,posz
ShowEntity modl

EntityRadius modl,30,1
EntityType modl,TYPE_Boot

Return modl
End Function


Bild:
user posted image

lg,
count-doku

faeX

BeitragMo, Jun 14, 2010 18:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Wahrscheinlich wird dein Schiff einfach hochgedrückt, wenn es mit der schrägen Wand kollidert.
Ansonsten konnte ich keine Anomalien feststellen:

BlitzBasic: [AUSKLAPPEN]
Graphics3D 1024, 768, 32, 2
SetBuffer BackBuffer()

Collisions 1, 2, 2, 2

floRadius1# = .5
floRadius2# = .5

camCamera = CreateCamera()

entCollider = CreateCube()
entScene = CreateCube()
lightMain = CreateLight()

ScaleEntity entScene, 1, .5, 1
ScaleEntity entCollider, .5, .5, .5

PositionEntity entScene, 0, -1, 0
PositionEntity entCollider, 0, 1, 0
PositionEntity camCamera, 0, 0, -5
PositionEntity lightMain, 2, 5, 0

EntityColor entScene, 0, 0, 255
EntityColor entCollider, 255, 0, 0

EntityType entCollider, 1
EntityType entScene, 2


While Not KeyHit(1)

floRadius1 = floRadius1 + .001*(KeyDown(3) - KeyDown(2))
floRadius2 = floRadius2 + .001*(KeyDown(5) - KeyDown(4))
If KeyHit(6) Then floRadius1 = .5 : floRadius2 = .5
If KeyDown(7) Then floRadius2 = floRadius1

EntityRadius entCollider, floRadius1, floRadius2
TranslateEntity entCollider, .01*(KeyDown(205) - KeyDown(203)), .01*(KeyDown(200) - KeyDown(208)), 0

UpdateWorld

RenderWorld

Text 0, 0, "1/2 to change Radius1: " + floRadius1
Text 0,12, "3/4 to change Radius2: " + floRadius2
Text 0,36, "Arrow keys to move collider"
Text 0,60, "5: Reset"
Text 0,72, "6: Set Radius2 as Radius1"

Flip

Wend

count-doku

BeitragMo, Jun 14, 2010 20:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

das dachte ich auch erst, Wink
aber es startet da wo keine Insel ist, nur Wasser, und ist trotzdem so hoch.
Außerdem kommt es überm Wasser mit TranslateEntity modl,0,-0.75,0 auch nicht wieder runter.

Sonst noch ne Idee?
Falls nötig, kann ich auch den kompletten Code zeigen...



lg,
count-doku
 

flashmaxel

BeitragDi, Jun 15, 2010 10:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Nur geraten: Es könnte sein, dass wenn du bei EntityRadius nur den erste Größenparameter angibst(also X), der Wert auch für den Y-Radius genommen wird.

Wenn du also erst die Entity mit
Code: [AUSKLAPPEN]
 EntityRadius modl,2,2
erstellst und dann den X-Wert mit
Code: [AUSKLAPPEN]
EntityRadius modl,3
erhöhen willst, wird auch der Y-Radius 3.
Dementsprechend müsstest du also schreiben
Code: [AUSKLAPPEN]
EntityRadius modl,3,2
um nur den X-Radius zu erhöhen.

Wie gesagt nur geraten, ich kenn ja nicht deinen ganzen Code ..
 

Omenaton_2

BeitragDi, Jun 15, 2010 11:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Stelle fest, ob es tatsächlich an der Kollision liegt. Schalte kurz die Kollisionen aus um zu sehen wie es sich dann verhält.
(Das wird wahrscheinlich nicht helfen, aber es ist gut darüber Bescheid zu wissen.)

Dann kannst du dich fragen, ob es wirklich an dem Boot liegt und nicht an dem, womit es kollidiert (Landschaft, Objekte).

Ich glaube spherische Kollision mit Breite UND Höhe geht nur ab einer relativ neuerem BlitzBasic3D Version. Hast du eine relativ aktuelle Programmversion ?

Bedenke es, daß dein Schiff wenn du das als 30,1 definierst, eine recht große, sehr flache SCHEIBE ist und nicht eine "Zigarre". Das bedeutet, daß wenn das Boot so wie auf dem Screenshot nahe an der Küste entlangfährt, obwohl es grafisch nicht sichtbar ist, schon mit der Küste kollidiert und vermutlich hochslidet.
Erstelle testweise einen Zylinder, das exakt die Größe und Position wie dein Kollisionsentity hat (und ein Child davon ist) um zu sehen, wie weit sich das ausdehnt.

count-doku

BeitragDi, Jun 15, 2010 18:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Danke für deine Tips Omenaton.

Ohne Kollisions, oder mit Kollisionsradius 1,1 ist es auf dem Wasser.
Mit großerem Kollrad, geht es langsam immer höher.

Es liegt definitiv am Boot, weil auch da wo kein Land ist, das Wasser ist ein Plane,
ist es noch so hoch.
Das Wasser selbst ist mit Koll Typ Polygon versehen, hat also keinen falschen Radius.

Meine B3D Version ist die neueste Wink

Ich habe mal eine Sphere erstellt, und so skaliert, wie den Koll Rad, passt.
Ist wirklich eine flache Scheibe, die aber nicht das Land berührt.

@faeX, ich gebe den Kollisionsradius nur einmal an. Undzwar in der CreateSpeeder Funktion,
welche auch im ersten Post zu sehen ist.

Noch eine Frage,
Um den Kollisionsradius zu einer Zigarre zu machen, was müsste ich da angeben?
Geht das überhaupt`?

lg,
count-doku

Xeres

Moderator

BeitragDi, Jun 15, 2010 20:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Eine "Zigarre" ist Volumentechnisch kaum von einem Quader zu unterscheiden, also EntityBox.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

count-doku

BeitragMi, Jun 16, 2010 14:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt Xeres.
Nur das Collisions als Quellobjekt immer eine Kugel haben will.

lg,
count-doku
 

Omenaton_2

BeitragMi, Jun 16, 2010 17:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, leider geht diese liegende "Zigarren-Form" nicht. Genau das bräuchte man häufig für Raumschiffe oder für normale Schiffe.

Ich lebe einfach damit, daß ich nur Kugel Kollision habe. Ich dachte, wenn das so zu schlimm wäre, dann müßte ich versuchen stat 1 gleich 3 kleinere Kugel als Kollisionsobjekte definieren und diese 3 (oder gar 5) dann in einer Linie aneinander reihen. Dann wäre das so insgesamt so ähnlich wie eine Zigarre. Vielleicht die erste Kugel in der Nase als Parent für die anderen nehmen oder auch nicht.

Wie ich bereits früher beschrieben habe, in dem Raumschiffinneren habe ich ganz auf Kollision verzichtet. Stat dessen mache ich immer einen Line of Sight Check auf kurze Distanz nach Vorne (das gleich 2 mal in 2 Höhen für Fus und für Oberkörper). Das funktioniert zwar nicht zuverlässig, aber für meine Zwecke reicht das so.


Noch eine Idee was du testen könntest :
Eliminiere testweise die Kollisionsinformation des Wassers.
Setz auf die gleiche Höhe wie der Meeresspiegel ist erst eine große Würfel und gib dem Kollisions Info als Cube.
Wenn das geht, dann als Polygon.
Wenn das auch geht, dann lade ein ganz simples Würfel Mesh ein und gib dem die Collision.
Um herauszufinden ob es nicht an irgendeine Ungenauigkeit mit dem Plane Wasser Collision liegt.

Bedenkts du auch, daß das Boot normaler weise zum Teil im Wasser versinken soll ? Also das untere Teil des Bootes soll gar nicht mit dem Wasser kollidieren, zum Teil muß das ja eintauchen können.
Außerdem, wenn du nur Meer hast mit gleichbleibenden Wasserspiegel dann muß das Wasser grundsätzlich keine Kollision haben. Das Boot soll nur immer durch Gravity auf Meeresspiegelhöhe + Eintauchen Y gedrückt werden.

count-doku

BeitragMi, Jun 16, 2010 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Habe es nochmal durchprobier,
-mit Wasserkoll und mit Landkoll
-ohne Wasser mit Land
-ohne Land mit Wasser
-ohne Wasser und ohne Land

Nichts davon geht.
Das Boot schiebt sich aus mysteriöse weise, immer
wenn ich den XRadius erhöhe aus dem Wasser...

Ich habe es jetzt so gemacht, dass ich einfach das Boot nur nach unten bewege,
wenn es überm Wasser ist. So taucht es auch noch leicht ein.

Für das Land werde ich dann einfach LinePick verwenden.

Danke Smile

lg,
count-doku

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group