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

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

11

13.02.2007, 17:54

Und wie bewege ich die Kamera mit addKameraSceneNodeFPS() Dann habe ich doch die Maus auch immer, die den Bildschirm dreht?

Ich mach es im Moment so,dass ich die Kamera einfach auch bewege und LookAt-Vektor auch. Aber wenn ich mich nun von dem Objekt aus nach links(wirklich nur nach links) entferne, dann verschwindet das Objekt(unbewegt) sobald ich nur ein Stück weg bin.
Was geht da schief?


PS: ghibt es bei Irrlich so etwas wie eine einstellbare Clipping-Ebene und einen einstellbaren Sichtwinkel?

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

12

13.02.2007, 18:45

setProjectionMatrix + buildProjectionMatrixPerspectiveFovLH

Aber zeig doch mal wie du das bist jetzt machst. Wir machen es ja über den Codeausschnitt oben und

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
    vector3df KamTarget = Kamera->getTarget();
    vector3df KamPos    = Kamera->getPosition();
    vector3df KamDir    = KamPos - KamTarget;

    vector3df Change    = KameraMove * (500.0f * SPF);
    KameraMove.Y        = 0;

    KamPos.Y            = KamPos.Y + Change.Y;

    if(KamPos.Y < MovementBox.MinEdge.Y)    KamPos.Y    = MovementBox.MinEdge.Y;
    if(KamPos.Y > MovementBox.MaxEdge.Y)    KamPos.Y    = MovementBox.MaxEdge.Y;

    Change.Y            = 0;
    KamTarget           = KamTarget + Change * 0.2f;

    if(KamTarget.X < MovementBox.MinEdge.X) KamTarget.X = MovementBox.MinEdge.X;
    if(KamTarget.X > MovementBox.MaxEdge.X) KamTarget.X = MovementBox.MaxEdge.X;
    if(KamTarget.Z < MovementBox.MinEdge.Z) KamTarget.Z = MovementBox.MinEdge.Z;
    if(KamTarget.Z > MovementBox.MaxEdge.Z) KamTarget.Z = MovementBox.MaxEdge.Z;

    KamPos.X = KamTarget.X + KamDir.X;
    KamPos.Z = KamTarget.Z + KamDir.Z;

    Kamera->setPosition(KamPos);
    Kamera->setTarget(KamTarget);
    Kamera->updateAbsolutePosition();
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

13

13.02.2007, 19:27

Hier werden all deine Fragen zu Irrlicht beantwortet

http://irrlicht.sourceforge.net/tutorials.html

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

14

13.02.2007, 19:46

Ich habe im Moment die Klasse noch drause(also GetAsyncState(Bewegungsvektor funktioniert nicht so wie ich will :) ))

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
mHouse = smgr->getMesh("Data\\Haus.3ds");
    nHouse = smgr->addAnimatedMeshSceneNode(mHouse, 0, -1, vector3df(0,0,0), vector3df(0,0,0),vector3df(1,1,1), true);
while(device->run())
    {
        if(GetAsyncKeyState(KEY_UP))
        {
            PlayerPos = nPlayer->getPosition();
            PlayerPos.X += 2.0f;
            CamPos.X    += 2.0f;
            CamLook.X   += 2.0f;
            nPlayer->setPosition(PlayerPos);
        }
        if(GetAsyncKeyState(KEY_DOWN))
        {
            PlayerPos = nPlayer->getPosition();
            PlayerPos.X -= 2.0f;
            CamPos.X    -= 2.0f;
            CamLook.X   -= 2.0f;
            nPlayer->setPosition(PlayerPos);
        }
        if(GetAsyncKeyState(KEY_LEFT))
        {
            PlayerPos = nPlayer->getPosition();
            PlayerPos.Z += 2.0f;
            nPlayer->setPosition(PlayerPos);
            CamPos.Z    += 2.0f;
            CamLook.Z   += 2.0f;
        }
        if(GetAsyncKeyState(KEY_RIGHT))
        {
            PlayerPos = nPlayer->getPosition();
            PlayerPos.Z -= 2.0f;
            CamPos.Z    -= 2.0f;
            CamLook.Z   -= 2.0f;
            nPlayer->setPosition(PlayerPos);
        }
        driver->beginScene(true, true, SColor(255,0,0,140));
        smgr->drawAll();
        guienv->drawAll();
        driver->endScene();
        smgr->addCameraSceneNode(0, CamPos, CamLook);
    }



Was ist denn in deinem Code MovementBox?

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

15

13.02.2007, 20:01

Der Bereich in dem sich die Kamera bewegen darf. Ist also nur eine Begrenzung. Lass diesen GetAsyncKeyState krams. Vorallem ist es so immernoch nicht abhängig von der Zeit!
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

16

13.02.2007, 21:09

Soll ich das dann so machen`?:

C-/C++-Quelltext

1
2
3
4
5
6
case KEY_KEY_W:
                {
                    v.X += event.KeyInput.PressedDown ? 2.0f : 0.0f;
                    nPlayer->setPosition(PlayerPos + v);
                    break;
                }


Oder wie soll ich den Bewegungsvektor einbinden?
Flüssig ist dass so aber nicht!

MovementBox ist Objekt welcher Klasse?
Ach ja welche Position, darf meine Kamera denn nicht annehmen oder ist das jetzt rein spezifisch auf eine Anwendung bezogen?

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

17

13.02.2007, 21:36

Für dich ist es nicht interessant. Bei uns darf die Kamera halt nicht in die Unendlichkeit abhauen. Mach es doch ähnlich wie in dem von mir geposteten Code.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

18

13.02.2007, 21:50

Merke: Erstlesen dan Fragen :D

SPF steht vermutlich für SecoundsPerFrame. Gibt es noch eine andere Funktion als die timeGetTime()-Funktion aus der Win-API sonst nutzt mir die Plattformunabhänigkeit wieder nichts und ich muss Win32 Projekt machen :?



PS: Sprichst du von die im pluralis maiestatis :)

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

19

13.02.2007, 21:56

Irrlicht liefert auch eine Zeitfunktion mit. getTimer
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

20

14.02.2007, 18:30

Nur wenn ich einen Zeiger auf die ITimer Klasse erstelle(ITimer* Time1;)
und ann folgenes mache:

C-/C++-Quelltext

1
Time1 = device->getTimer();


geht das nicht. Was muss also getan werden, dass das klappt.[/cpp]

Werbeanzeige