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

Black-Panther

Alter Hase

  • »Black-Panther« ist der Autor dieses Themas

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

1

07.07.2007, 14:24

-1.#IND

Hallo!

Ich kämpfe derzeit mit dem Problem, dass nach dieser Berechnung:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
static const float fConfine = 0.2f;

    const og3DVector vZTemp = ogUtilsTransformCoords(og3DVector(0.f, 0.f, 1.f), m_mTransformWithOutRotation);
    const og3DVector vXTemp = ogUtilsTransformCoords(og3DVector(1.f, 0.f, 0.f), m_mTransformWithOutRotation);
    const og3DVector vSTemp = ogUtilsTransformCoords(og3DVector(1.f, 0.f, 1.f), m_mTransformWithOutRotation);
    const og3DVector vZAxis = og3DVectorNormalize(vZTemp - m_vPositionK);
    const og3DVector vXAxis = og3DVectorNormalize(vXTemp - m_vPositionK);
    const og3DVector vSAxis = og3DVectorNormalize(vSTemp - m_vPositionK);
    const float fCosRotX    = og3DVectorDot(vXAxis, m_vDirectionK);
    const float fCosRotS    = og3DVectorDot(vSAxis, m_vDirectionK);
    float fRotation         = acosf(og3DVectorDot(vZAxis, m_vDirectionK));
    if(ogUtilsIsWithinTolerance(fCosRotX, 0.f, fConfine)) {if(fCosRotS < 0.f) fRotation = -fRotation;}
    else if(fCosRotX < 0.f) fRotation = -fRotation;


fRotation MANCHMAL (sonst könnt ich es ja einfach nachvollziehen) den Wert -1.#IND annimmt. Mir ist es bis jetzt noch nicht gelungen den Fehler zu rekonstruieren, es passiert alle heilge Zeiten einmal, hat aber dann fatale Auswirkungen...
Nun meine Frage: Was verursacht diesen Wert, also welche falsche Operation? Nach was soll ich suchen, oder gibt es eine Möglichkeit mit einer if abzufragen, ob die Variable diesen Wert hat?

Danke schon mal
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

07.07.2007, 14:59

Der Parameter bei acosf muss zwischen -1 und 1 liegen. Wenn der Parameter auserhalb dieser Grenzen liegt bekommst du einen unbestimmten (indefinite) Wert zurück, eben -1.#IND.
@D13_Dreinig

Black-Panther

Alter Hase

  • »Black-Panther« ist der Autor dieses Themas

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

3

08.07.2007, 22:13

Ok... aber sollte das denn nicht unmöglich sein?? Also ich mein

Quellcode

1
og3DVectorDot(vZAxis, m_vDirectionK);


gibt mir doch immer Werte zwischen [-1,1], wenn die Parameter beides Normalvektoren sind? (Und das ist sicherlich der Fall)
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

09.07.2007, 08:29

Benutze den Debugger und lass dir das Programm anhalten, wenn die Variable den Wert -1.#IND hat (die Konstante für den Wert steht bestimmt in <cfloat> bzw. <float.h>). Dann kannst du dir die Situation in Ruhe ansehen.

Werbeanzeige