Toon posts:

[Java] J3D collisiondetectie

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig om me te verdiepen in de J3D. Nu heb ik al wat ervaring, ik kan zo gezegd de transformgroup van de branchgroup onderscheiden, maar ben nog geen topper die even een schaduwsysteem toepast in J3D.
Nu was ik bezig met gewoon wat simple features te impelementeren zoals collisiedetectie op een object. Nu heb ik al wat gelezen maar veel wijzer wordt ik er ook niet van. Nu heb ik zelf al iets gemaakt wat niet 100% werkt maar wel in theorie logisch inelkaar zit.
Elke keer als mijn 3d object wordt verplaatst gaat ie de branchgroupe van de collectie collision objects doorlopen. Daar gaat ie dmv van de bounds kijken of er een intersectie is.
Nu werkt dit al, maar ik voorzie zelf al wat problemen. Vooral bij een grote branchgroup zal dit systeem niet lekker werken. Daarnaast lees ik wel dingen(BranchGroup.ENABLE_COLLISION_REPORTING etc) over collision in de J3D API maar ik kan ze niet bijelkaar brengen tot 1 geheel.
Dus wie heeft er ook ervaring mee en weet een betere oplossing?

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 04:19
Deze had je al doorgenomen: Architecture: Collision Detection System? Zo ja, kun je dan wat specifieker uitleggen waar je probleem in zit?

Verwijderd

Topicstarter
Ja die heb ik gelezen,ik vond het artikel zeer interesant. Maar ik ben al blij als ik met bounds kan werken. En aangezien er geen samples bij staan kom ik er nog niet echt uit. Nu heb ik wel wat werkend en dit is gebaseerd op een behavior. Deze geeft nu wel wat terug waardoor het net lijkt als of ie de botsing waarneemt maar als ik dan met de bounds ga spelen dan blijft ie het zelfde gedrag vertonen.

Hier is misschien wat code ter verduidelijking:
Mijn 3dobject met TG's, shape3d enzovoorts dit is een extended branchgroup
Java:
1
2
3
4
5
6
7
8
....
        setBounds(new BoundingSphere(new Point3d(0.0,0.0,0.0), 0.001));
        setShape(new ColorCube(0.1));

        CollisionDetector cd = new CollisionDetector(this);
        cd.setSchedulingBounds(getBounds());
        addChild(cd);
....


De CollisionDetector gebazeerd op de j3d samples
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public class CollisionDetector extends Behavior {
  

    private boolean inCollision = false;
    private Ext3dObject shape;

    private WakeupOnCollisionEntry wEnter;
    private WakeupOnCollisionExit wExit;


    public CollisionDetector(Ext3dObject ex) {
        shape = ex;
        
        inCollision = false;
    }

    public void initialize() {
        wEnter = new WakeupOnCollisionEntry(shape);
        wExit = new WakeupOnCollisionExit(shape);
        wakeupOn(wEnter);
    }

    public void processStimulus(Enumeration criteria) {
    inCollision = !inCollision;

    if (inCollision) {
        shape.hitObject(shape);
        System.out.println("In collosie");
        wakeupOn(wExit);
    }
    else {
        shape.hitObject(shape);
        System.out.println("Uit collisie");
        wakeupOn(wEnter);
    }
    }

Daar buiten heb ik dan nog een Scene waar de Ext3dObject in worden geplaatst en door elkaar heen roteren. Ik hoop dat mijn situatie nu een beetje duidelijk, anders zal ergens de source uploaden.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-05 23:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Wat wil je precies met je collision detection? Zoals je in het artikel wat Soultaker naar voren bracht hebt kunnen lezen, kan J3D alleen intersectietests doen tussen objecten. Als je een zinnig response systeem wilt implementeren heb je niets aan de tests van J3D (die alleen een boolean opleveren, meer info zoals in contact points, contact normals en de mate van interpenetration zou wel handig zijn)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Bbfreak
  • Registratie: September 2002
  • Laatst online: 04-02 10:03
Net op school FlightSim gebouwd mbv Java3D. Die klasse heb ik ook zitten bekijken.
Is erg handig icm Shape3D objecten. Als je cd met de camera wilt moet je een Shape3D om de camera heen zetten. CD is een materie waar jammer genoeg weinig over te vinden is. Succes iig.

Twitter @cmeerbeek / Halo Waypoint Profile


  • Sauria
  • Registratie: Maart 2004
  • Laatst online: 11-05 13:34
Voor echte collisiondetection, of eigenlijk het voorkomen van collisions, zul je voor elk frame moeten bepalen of er een collision plaatsvindt. Je moet dus steeds een frame vooruit rekenen voordat je hem daadwerkelijk op het scherm zet. Afhankelijk van of er een collision optreedt of niet kun je dan het nieuwe frame laten zien of iets anders doen.
Java heeft inderdaad het probleem dat een collision pas gemeld wordt als deze als is opgetreden. Als je collisions dus wilt voorkomen heb je er dus zo op zich niets aan.
Pagina: 1