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

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

31

15.02.2007, 17:04

Was klappt denn daran nicht? Bitte immer präziese sein.
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

32

15.02.2007, 17:06

Es bewegt sich nichts.
fTime2 = 0.0f
fTime1 = 0.0f
fTime = 0.0f
Ich hbe das gefühl als würde er den Timer nicht wirklich verwenden

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
device->getTimer()->start();
    while(device->run())
    {
        fTime1=device->getTimer()->getTime();
        driver->beginScene(true, true, SColor(255,0,0,140));
        smgr->drawAll();
        guienv->drawAll();
        driver->endScene();
        vector3df CamTarget = Kamera->getTarget();
        vector3df CamPos    = Kamera->getPosition();
        vector3df CamDir    = CamPos - CamTarget;
        vector3df Change    = Move * (500.0f * fTime);
        Move.X              = 0;
        Move.Z              = 0;
        CamTarget           = CamTarget + Change * 0.2f;

        CamPos.X = CamTarget.X + CamDir.X;
        CamPos.Z = CamTarget.Z + CamDir.Z;

        Kamera->setPosition(CamPos);
        Kamera->setTarget(CamTarget);
        Kamera->updateAbsolutePosition();

        fTime2 = device->getTimer()->getTime();

        fTime = (float)(fTime2 - fTime1)/ 1000.0f;
   
    }

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

33

15.02.2007, 17:25

Okay habe es jetzt mal selbst ausprobiert. So sollte es gehen:

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
   while(device->run()) 
    { 
        u32 start = device->getTimer()->getTime(); 
        driver->beginScene(true, true, SColor(255,0,0,140)); 
        smgr->drawAll(); 
        guienv->drawAll(); 
        driver->endScene(); 
        vector3df CamTarget = Kamera->getTarget(); 
        vector3df CamPos    = Kamera->getPosition(); 
        vector3df CamDir    = CamPos - CamTarget; 
        vector3df Change    = Move * (500.0f * fTime); 
        Move.X              = 0; 
        Move.Z              = 0; 
        CamTarget           = CamTarget + Change * 0.2f; 

        CamPos.X = CamTarget.X + CamDir.X; 
        CamPos.Z = CamTarget.Z + CamDir.Z; 

        Kamera->setPosition(CamPos); 
        Kamera->setTarget(CamTarget); 
        Kamera->updateAbsolutePosition(); 
 
        device->getTimer()->tick();
        fTime = (float)(device->getTimer()->getTime();  - start)/ 1000.0f; 
    
    } 


Also ohne das start und mit dem tick als Zusatz. Damit läuft es bei uns.
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

34

15.02.2007, 18:00

Ja es bewegt sich was :D

aber manchmal stockt es noch so komisch, mal schauen das krieg ich schon noch hin.

Danke Nox

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

35

28.02.2007, 22:02

Noch mal ne Frage. wie drehe ich nach diesem Prinzip die Kamera?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
vector3df CamRotation       = vCamRot * (1000.0f * fTime);
// Bewegen der Kamera

        vector3df CamTarget         = m_nCamera->getTarget();
        vector3df CamPos            = m_nCamera->getPosition();
        vector3df CamDir            = CamPos - CamTarget;
        CamTarget                   = CamTarget + Change * 0.2f;
        CamPos.X                    = CamTarget.X + CamDir.X;
        CamPos.Z                    = CamTarget.Z + CamDir.Z;   
        CamTarget                   = CamTarget + CamRotation * 0.2f;

Die Klasse

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
class MyEventReceiver : public IEventReceiver
{
public:
    virtual bool OnEvent(SEvent event)
    {

        if (event.EventType == irr::EET_KEY_INPUT_EVENT)
        {
            switch(event.KeyInput.Key)
            {
            case KEY_KEY_W:
                {
                    vMove.X = event.KeyInput.PressedDown ? 1.0f : 0.0f;
                    break;
                }
            case KEY_KEY_S:
                {   
                    vMove.X = event.KeyInput.PressedDown ? -1.0f : 0.0f;
                    break;
                }
            case KEY_KEY_A:
                {
                    vRot.Y = event.KeyInput.PressedDown ? -1.0f : 0.0f;
                    vCamRot.Z = event.KeyInput.PressedDown ? 1.0f : 0.0f;
                    break;
                }
            case KEY_KEY_D:
                {   
                    vRot.Y = event.KeyInput.PressedDown ? 1.0f : 0.0f;
                    vCamRot.Z = event.KeyInput.PressedDown ? -1.0f : 0.0f;
                    break;
                }

                return true;
            }
        }
        return false;
    }
};

So geht es nicht wirklich. Die Kamera dreht sich zwar, aber die Drehung wird mit der Zeit langsamer und die Y-Koordinate steigt

Ziel: Beim Drücken der "D-" bzw. "a-Taste" soll sich die Kamera drehen und zwar ohne langsamer zu werden

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

36

28.02.2007, 22:11

Überleg mal ob du sie relativ oder absolut drehst ;)
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

37

28.02.2007, 22:13

sry, aber wie meinst du das

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

38

28.02.2007, 22:52

Du addierst die "Kamerarotation" einfach zu das Kameratarget. Was für eine Rotation willst du überhaupt erreichen? eine um die Achsen der Kamera oder eine um das Ziel der Kamera?
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

39

01.03.2007, 17:28

Es soll eine Rotation um die Z-Achse der Kamera werden.

Wie wsoll ich es denn dann dementsprechend ändern?

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

40

01.03.2007, 20:29

Du da müsste ich jetzt genauso überlegen die du. Aber aufjedenfall musst du dafür den KameraTargetpunkt sowohl in x als auch in y richtung verschieben und das über Winkelfunktionen(cos + sin).
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.

Werbeanzeige