Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

bassdscho

Alter Hase

  • »bassdscho« ist der Autor dieses Themas

Beiträge: 1 056

Wohnort: Heuchlingen

Beruf: Student - Technische Informatik

  • Private Nachricht senden

1

23.04.2005, 17:02

Probleme mit Positionsbestimmung

Hi,

ich hab ein Objekt1 und ein Objekt2 und jetzt will ich wissen wie O1 zu O2 im Raum liegt (darüber, darunter, ...). Ich habe mir gedacht da nehm ich einfach die CameraFrustum funktion und erstell immer ein Frustum führ die richtung die ich abfragen will:

Initialisierung:

C-/C++-Quelltext

1
2
3
4
5
6
        iPictureIndex = 0;
        mProj = tbMatrixProjection(45.0f, 1.0f, 0.01f, 6000.0f);
        mView = tbMatrixIdentity();
        plFrustum = tbPlane();
        bVisible = true;
        bInRange = false;


Abfrage Funktion:

C-/C++-Quelltext

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
37
38
39
40
41
42
43
44
    void Move(const tbVector3 &vPosShip, const tbVector3 &vBoundMin, const tbVector3 &vBoundMax)
    {
        TB_INFO("Move() von Arrow wird ausgeführt");

        // Hinter Schiff

        mView = tbMatrixCamera(vPosShip, tbVector3(1.0f, 0.0f, 0.0f));
        tbComputeClipPlanes(mView, mProj, &plFrustum);
        if (tbAABoxVisible(vBoundMin, vBoundMax, &plFrustum))
            {iPictureIndex = 1; bInRange = true;}

        // Vor Schiff

        mView = tbMatrixCamera(vPosShip, tbVector3(-1.0f, 0.0f, 0.0f));
        tbComputeClipPlanes(mView, mProj, &plFrustum);
        if (tbAABoxVisible(vBoundMin, vBoundMax, &plFrustum))
            {bVisible = false; bInRange = true;}

        // Rechts Schiff

        mView = tbMatrixCamera(vPosShip, tbVector3(0.0f, 0.0f, 1.0f));
        tbComputeClipPlanes(mView, mProj, &plFrustum);
        if (tbAABoxVisible(vBoundMin, vBoundMax, &plFrustum))
            {iPictureIndex = 2; bInRange = true;}

        // Links Schiff

        mView = tbMatrixCamera(vPosShip, tbVector3(0.0f, 0.0f, -1.0f));
        tbComputeClipPlanes(mView, mProj, &plFrustum);
        if (tbAABoxVisible(vBoundMin, vBoundMax, &plFrustum))
            {iPictureIndex = 3; bInRange = true;}

        // Über Schiff

        mView = tbMatrixCamera(vPosShip, tbVector3(0.0f, 1.0f, 0.0f));
        tbComputeClipPlanes(mView, mProj, &plFrustum);
        if (tbAABoxVisible(vBoundMin, vBoundMax, &plFrustum))
            {iPictureIndex = 4; bInRange = true;}

        // Unter Schiff

        mView = tbMatrixCamera(vPosShip, tbVector3(0.0f, -1.0f, 0.0f));
        tbComputeClipPlanes(mView, mProj, &plFrustum);
        if (tbAABoxVisible(vBoundMin, vBoundMax, &plFrustum))
            {iPictureIndex = 5; bInRange = true;}

        // Wenn nichts gepasst hat dann "No Target" Bild einblenden

        if (bInRange == false)
            iPictureIndex = 6;
    }


Aber irgendiwe bleibt iPicuteIndex immer auf null[/cpp]
Verlierer jammern immer von wegen ihr bestes!
Sieger gehen nach Hause und vögeln die Ballkönigin!

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

23.04.2005, 18:20

Geht meines Wissens nach auch viel einfacher:

Vertices * Obj1Matrices / Obj2Matrices

Du transformierst also erstmal das Objekt in die absolute und dann wiederum relativ zum 2. Objekt.

bassdscho

Alter Hase

  • »bassdscho« ist der Autor dieses Themas

Beiträge: 1 056

Wohnort: Heuchlingen

Beruf: Student - Technische Informatik

  • Private Nachricht senden

3

02.05.2005, 17:33

Ich hab mir das anders gedacht, aber meine Überlegungen waren falsch.

Sorry
Verlierer jammern immer von wegen ihr bestes!
Sieger gehen nach Hause und vögeln die Ballkönigin!

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

4

02.05.2005, 17:38

Wie hast du es dir denn gedacht?

bassdscho

Alter Hase

  • »bassdscho« ist der Autor dieses Themas

Beiträge: 1 056

Wohnort: Heuchlingen

Beruf: Student - Technische Informatik

  • Private Nachricht senden

5

02.05.2005, 21:48

Ich hab gedacht ich mach 6 "CameraFrustums" die den kompletten Raum und mein Object1 ausfüllen. Jedes in eine andere Richtung (Vorne, links, rechts, hinten, oben, unten). Als Seitenverhältnis habe ich statt wie beim CameraFrustum Höhe durch Breite genommen, sondern einfach 1.
Der Haken an der Sache ist. Wenn Object2 (das ich "Suche") an der Seite am Bildschirm auftachen würde noch zu links oder rechts gezählt werden. Weil ja der Bildschirm nicht das Seitenverhältnis 1 hat.

Aber ich hab das jetzt sowiso wegrationalisiert, da ich den PointOfNoReturn schon überschritten habe. Wenn ich jetzt noch was zu meinem Spiel hinzufüge wird es nie fertig.
Verlierer jammern immer von wegen ihr bestes!
Sieger gehen nach Hause und vögeln die Ballkönigin!

Werbeanzeige