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

DasBlub

Alter Hase

  • »DasBlub« ist der Autor dieses Themas

Beiträge: 802

Wohnort: Schweiz

Beruf: Programmierer

  • Private Nachricht senden

1

26.08.2007, 18:54

tbMatrix: Konvertierung von 'tbMatrix' nicht möglich

Hallo, ich bin gerade dabei, Breakanoid zu programmieren (nach dem Buch). Wenn ich nun kompilieren will, erhalte ich in CGame::Render() folgenden Compilerfehler:

Zitat


[...]\breakanoid\cgame.cpp(123) : error C2664: 'IDirect3DDevice9::SetTransform': Konvertierung des Parameters 2 von 'tbMatrix' in 'const D3DMATRIX *' nicht möglich
Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werden


die zeilen 121 bis 123 lautet folgendermassen:

C-/C++-Quelltext

1
2
3
// projektionsmatrix erstellen und aktivieren

mProjection = tbMatrixProjection(TB_DEG_TO_RAD(70.0f), D3D.GetAspect(), 0.1f, 50.0f);
D3D->SetTransform(D3DTS_PROJECTION, mProjection);


ich hab im forum und in google gesucht, und habe keine antwort auf dieses problem gefunden.

wenn ich in der headerdatei von tbMatrix nachsehe, gibt es da jedoch einen casting operator:

C-/C++-Quelltext

1
operator const D3DMATRIX& () const  {return mD3DMatrix;}


hinweis: ich verwende die auf der cd vorhandene debug version von TriBase (-> TriBaseD.lib)

DasBlub

Alter Hase

  • »DasBlub« ist der Autor dieses Themas

Beiträge: 802

Wohnort: Schweiz

Beruf: Programmierer

  • Private Nachricht senden

2

26.08.2007, 19:13

problem gelöst

ich hab das problem jetzt folgendermassen gelösst:

C-/C++-Quelltext

1
D3D->SetTransform(D3DTS_PROJECTION, (&(D3DMATRIX)mProjection));


weshalb funktioniert es jedoch im beispiel auf der cd (ich habs mal neu kompiliert), bei mir jedoch nicht? (ich habe die gleiche lib gelinkt, die zeile ist copy-past)

Phil_GDM

Alter Hase

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

3

26.08.2007, 19:43

Du hast im ersten Beispiel den Adressoperator vergessen!

mfg Philipp

DasBlub

Alter Hase

  • »DasBlub« ist der Autor dieses Themas

Beiträge: 802

Wohnort: Schweiz

Beruf: Programmierer

  • Private Nachricht senden

4

26.08.2007, 19:57

Zitat von »"Phil_GDM"«

Du hast im ersten Beispiel den Adressoperator vergessen!


wie darf ich das verstehen?

im originalcode (von der cd) sehen die zeilen so aus:

C-/C++-Quelltext

1
2
3
// Projektionsmatrix erstellen und aktivieren

mProjection = tbMatrixProjection(TB_DEG_TO_RAD(70.0f), D3D.GetAspect(), 0.1f, 50.0f);
D3D.SetTransform(D3DTS_PROJECTION, mProjection);

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

5

26.08.2007, 20:01

War schon richtig so wie dus gelöst hast.
@D13_Dreinig

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

Phil_GDM

Alter Hase

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

7

26.08.2007, 21:56

Zitat von »"TheWinner"«

Zitat von »"Phil_GDM"«

Du hast im ersten Beispiel den Adressoperator vergessen!


wie darf ich das verstehen?

im originalcode (von der cd) sehen die zeilen so aus:

C-/C++-Quelltext

1
2
3
// Projektionsmatrix erstellen und aktivieren

mProjection = tbMatrixProjection(TB_DEG_TO_RAD(70.0f), D3D.GetAspect(), 0.1f, 50.0f);
D3D.SetTransform(D3DTS_PROJECTION, mProjection);


Naja wenn ich mich nicht verguckt hab, probierst du im ersten Beispiel den Typ tbMatrix auf D3DMATRIX* zu bringen, das kann der Compiler aber nicht machen, was er aber sehr wohl machen kann, ist den Typ von tbMatrix* auf D3DMATRIX* zu bringen (deswegen bin ich der Mainung, dass der Address-operator fehlt).

also einfach:

C-/C++-Quelltext

1
D3D.setTransform(D3DTS_PROJECTION, &mProjection);

mfg Philipp

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

8

26.08.2007, 22:37

Zitat von »"Phil_GDM"«


also einfach:

C-/C++-Quelltext

1
D3D.setTransform(D3DTS_PROJECTION, &mProjection);


Ne, das geht nicht so.
@D13_Dreinig

Werbeanzeige