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

Anonymous

unregistriert

1

05.01.2005, 18:35

union- und typecast- Problem

1. Wenn ich die Struktur mit den Texturkoordinaten zu der union hinzufüge kommt folgende Fehlermeldung:
e:\c++\dreidaeengine\vector3.h(56) : error C2040: 'v' : 'float [3]' unterscheidet sich von 'float' in bezug auf die Anzahl vorgenommener Dereferenzierungen

Eigentlich sollte es richtig sein.


2. Was muss ich machen, damit meine Vektorklasse (und Matrixklasse auch) gleichwerig mit der von DirectX ist.

C-/C++-Quelltext

1
2
matrix mView;
D3DXMatrixLookAtLH(&mView, vector3(...), ..., ...);

Das funktioniert nicht. Meine Matrixklasse sieht genauso aus wie die Vektorklasse. (natürlich nicht die Variablen!)
Ich bekomme mit meinen Klassen keine Sinnvollen Ergebnisse. Was muss ich da verändern?


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
43
44
45
46
47
48
49
class API vector3
{
public:
                        vector3();
                        vector3(float fxyz);
                        vector3(float fx, float fy, float fz);
                        vector3(const vector3& v);
                        vector3(const D3DVECTOR& v);
                        vector3(const float* pfv);
    virtual             ~vector3();


                        operator D3DVECTOR&();
    vector3             operator =  (const vector3& v);
    vector3             operator +  (const vector3& v) const;
    vector3             operator -  (const vector3& v) const;
    vector3             operator *  (const vector3& v) const;
    vector3             operator /  (const vector3& v) const;
    vector3             operator += (const vector3& v);
    vector3             operator -= (const vector3& v);
    vector3             operator *= (const vector3& v);
    vector3             operator /= (const vector3& v);
    vector3             operator *  (float fs) const;
    vector3             operator /  (float fs) const;
    vector3             operator *= (float fs);
    vector3             operator /= (float fs);
    vector3             operator -  () const;
    BOOL                operator == (const vector3& v) const;
    BOOL                operator != (const vector3& v) const;


    union
    {
        struct
        {
            float       x;
            float       y;
            float       z;
        };
        /*struct
        {
            float       u;
            float       v;
            float       w;
        };*/
        float           v[3];
        D3DVECTOR       vD3D;
    };
};

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

2

05.01.2005, 19:08

ableiten von D3DMATRIX/D3DVECTOR

nebenbei: Pfeiff auf D3DX und code es lieber selber! macht das programm kleiner und hat ne schönere syntax.

Anonymous

unregistriert

3

05.01.2005, 19:26

Das mit D3DXMatrixLookAt() war nur ein Beispiel. Das Problem ist, dass bei pD3DDevice->SetTransform() nicht funktioniert.
Auch kann ich bei Vertexdeklarationen nicht meine Vektoren verwenden, sondern nur einzelne floats. Wenn ich meine Vektoren verwende wird nichts angezeigt.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
#define FVF D3DFVF_XYZ|D3DFVF_DIFFUSE
struct SVertex
{
   vector3 vPosition;
   DWORD dwColor;
};
...
SVertex Vertices[3];
Vertices[0].vPosition = vector3(1.0f, 1.0f, 1.0f);
Vertices[0].dwColor = color(1.0f, .0f, .0f);
...



Und dat union-Kakteil?

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

28.01.2005, 00:05

Ich weiß ja gar nicht, wie aktuell Dein Problem noch ist (nach 3 Wochen ohne Antwort von jemandem :-D ) ...
Aber bezüglich des "union-Kakteil" - wie Du es nennst - solltest Du Dir mal die Fehlermeldung genauer ansehen (es gibt übrigens auch 'ne ganz tolle Hilfe für alle erdenklichen Fehler, wo meistens auch mögliche Ursachen herausgezeigt werden).

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
union 
    { 
        struct 
        { 
            float        x; 
            float        y; 
            float        z; 
        }; 
        /*struct 
        { 
            float        u; 
            float        v; 
            float        w; 
        };*/ 
        float            v[3]; 
        D3DVECTOR        vD3D; 
    };

Du hast zweimal ein Attribut v, das "geht so nicht"... ;)

Zitat

e:\c++\dreidaeengine\vector3.h(56) : error C2040: 'v' : 'float [3]' unterscheidet sich von 'float' in bezug auf die Anzahl vorgenommener Dereferenzierungen

Am besten gibst Du dem dreidimensionalen Array eine andere Bezeichnung, z.B. c ... oder halt irgendwas anderes...

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
union 
    { 
        struct 
        { 
            float        x; 
            float        y; 
            float        z; 
        }; 
        struct 
        { 
            float        u; 
            float        v; 
            float        w; 
        };
        float            c[3]; 
        D3DVECTOR        vD3D; 
    };

Werbeanzeige