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

Progater

Treue Seele

  • »Progater« ist der Autor dieses Themas

Beiträge: 119

Wohnort: BW

  • Private Nachricht senden

1

04.06.2007, 15:37

Modelvektoren manuell transformieren

Hallo nochmal,
sorry, dass ich wieder störe, aber ich kann folgendes Problem nicht lösen. Vielleicht kann da jemand helfen ;)
Ich versuche die Positionsvektoren eines Modells manuell transformieren.
Hier der Code:

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
tbResult TransformVertices(tbModel *pModel, const tbMatrix& mMatrix)
{
    // Vertexbuffer abfragen

    tbVertexBuffer *pVertexBuffer = pModel->GetVertexBuffer();

    // Speicher für Vertizes (Positionen) reservieren

    tbVector3 *pModelVertex = NULL;
    pModelVertex = new tbVector3[pModel->GetNumVertices()];

    for(int iVertex = 0; iVertex < pModel->GetNumVertices(); iVertex++)
    {
        // Vertex abfragen

        pVertexBuffer->GetVertex(iVertex, (void*)(&pModelVertex[iVertex]));

        // Transformieren...

        pModelVertex[iVertex] = tbVector3TransformCoords(pModelVertex[iVertex], mMatrix);

        // Wieder setzen

        pVertexBuffer->SetVertex(iVertex, (void*)(&pModelVertex[iVertex]));
    }

    pVertexBuffer->Update();

    // Speicher freigeben

    TB_SAFE_DELETE(pVertexBuffer);
    TB_SAFE_DELETE_ARRAY(pModelVertex);

    return TB_OK;

} // TransformVertices


Irgendwie stürtzt das Programm ab, nachdem ich es ausführen lies. Hat jemand 'ne Idee, was ich hier falsch mache.
To go back to the drawing board is not everyone's cup of tea! :-)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

04.06.2007, 16:44

An welcher Stelle stürzt das Programm ab?
@D13_Dreinig

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

04.06.2007, 17:58

und mit welcher fehlermeldung?

Progater

Treue Seele

  • »Progater« ist der Autor dieses Themas

Beiträge: 119

Wohnort: BW

  • Private Nachricht senden

4

04.06.2007, 20:10

Zitat

An welcher Stelle stürzt das Programm ab?

Stürzen tut das Programm, nachdem die Vertizes transformiert wurden. Also nach dem Aufruf dieser Methode. Ich sehe dann schwarzen Bildschirm und die MessageBox "Programm.exe hat ein Problem festgestellt und muss beendet werden.". ;)

Zitat

und mit welcher fehlermeldung?

Falls die Log-Datei gemeint ist: Da steht logischerweise nichts gescheites. Nur das tbExit und sonstiges nicht ordnungsgemäß heruntergefahren wurde.
Aber sonst nach dieser Zeile:

C-/C++-Quelltext

1
    TB_SAFE_DELETE_ARRAY(pModelVertex);

Also der Fehler steckt definitiv in dieser Funktion.
Probe:

C-/C++-Quelltext

1
tbDirect3D::Instance().SetTransform(D3DTS_WORLD, mWorld);
, statt TransformVertices.
To go back to the drawing board is not everyone's cup of tea! :-)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

04.06.2007, 20:12

das klingt als ob du einfach die exe starten würdest!?

dir ist schon klar dass es so etwas wie IDEs und Debugger gibt!?

Zitat

Falls die Log-Datei gemeint ist


nein ich meinte eigentlich in welcher zeile dein programm mit welcher fehlermeldung (des debuggers) abstürzt...

Progater

Treue Seele

  • »Progater« ist der Autor dieses Themas

Beiträge: 119

Wohnort: BW

  • Private Nachricht senden

6

04.06.2007, 20:18

Zitat

das klingt als ob du einfach die exe starten würdest!?
dir ist schon klar dass es so etwas wie IDEs und Debugger gibt!?

Lol, natürlich ist mir das klar. Ich bin schließlicht nicht aus der Steinzeit.
Die Stelle wo das Programm abstürzt:

Zitat

Aber sonst nach dieser Zeile:
Code (C++):
TB_SAFE_DELETE_ARRAY(pModelVertex);

Sorry, dass ich etwas rausgerutscht habe. ;)
To go back to the drawing board is not everyone's cup of tea! :-)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

04.06.2007, 20:21

Zitat von »"Progater"«

"Programm.exe hat ein Problem festgestellt und muss beendet werden."


das klingt für mich nicht als ob du den debugger verwenden würdest...

was hat pModelVertex für einen wert in dieser zeile?
prüf mal ob du irgendwo über arraygrenzen schreibst.

Progater

Treue Seele

  • »Progater« ist der Autor dieses Themas

Beiträge: 119

Wohnort: BW

  • Private Nachricht senden

8

04.06.2007, 21:02

Nun gut, ich konnte vorher keinen Debugger vorher nutzen, weil dieses Projekt von Visual Studio 6 importiert wurde.
Die Zeile wo das Programm abstürzt habe ich mit Log-Datei ermittelt: tbWriteToLog("1") usw.
Jetzt habe ich den Projekt ganz neu erstellt und habe es ausführen lassen. Es kommt folgende MessageBox heraus:

Quellcode

1
2
3
4
5
6
7
Debug Assertion Failed!
Program:...
Filedbgheap.c
Line: 1252

Expression: _CrtIsValidHeapPointer(pUserData)
....

Ich verstehe zwar nicht, was gemeint ist (wahrscheinlich handelt es sich um das Problem, das Du gemeint hast:

Zitat von »"dot"«

prüf mal ob du irgendwo über arraygrenzen schreibst.

Ich versuche jetzt mit dem Debugger witer zu suchen. ;)
To go back to the drawing board is not everyone's cup of tea! :-)

9

05.06.2007, 14:00

for(int iVertex = 0; iVertex < pModel->GetNumVertices()-1; iVertex++)
Die Anzahl ist bei Arrays, die bei 0 anfangen zu zählen, um eins größer als der größte Index.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

10

05.06.2007, 14:21

Mal so nebenbei, was macht egtl die Zeile:

C-/C++-Quelltext

1
TB_SAFE_DELETE_ARRAY(pModelVertex);
@D13_Dreinig

Werbeanzeige