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

  • »LastManStanding« ist der Autor dieses Themas

Beiträge: 53

Wohnort: Neuhofen

Beruf: Schüler

  • Private Nachricht senden

1

10.04.2005, 16:33

Texturen und andere Probleme

Kleines Problem
Ungeduld ist die Mutter der Dummheit - DaVinci

  • »LastManStanding« ist der Autor dieses Themas

Beiträge: 53

Wohnort: Neuhofen

Beruf: Schüler

  • Private Nachricht senden

2

10.04.2005, 16:34

Re: Texturen und andere Probleme

Zitat von »"LastManStanding"«

Hi Leute!
Ich habe da ein kleines Problem (wieder mal) bei den Beispiel mit den vielen Texturierten Dreiecken.

Zuerst mal der Code:

Quellcode

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
tbResult InitScene()
{
    HRESULT     hResult;
    tbMatrix    mProjection;
    float       fAspect;
    tbColor     VertexColor;


    // Vertexformat setzen - Positions-, Farb- und Texturkoordinatenangabe
    if(FAILED(hResult = g_pD3DDevice->SetFVF(SVertex::dwFVF)))
    {
        // Fehler beim Setzen des Vertexformats!
        TB_ERROR_DIRECTX("g_pD3DDevice->SetFVF", hResult, TB_ERROR);
    }

    // Beleuchtung und Culling ausschalten, Dithering aktivieren
    g_pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
    g_pD3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
    g_pD3DDevice->SetRenderState(D3DRS_DITHERENABLE, TRUE);

    // Das Bildseitenverhältnis berechnen
    fAspect =   (float)(Direct3DParameters.VideoMode.Width)
              / (float)(Direct3DParameters.VideoMode.Height);

    // Die Projektionsmatrix erzeugen
    mProjection = tbMatrixProjection(TB_DEG_TO_RAD(90.0f),  // Sichtfeld: 90°
                                     fAspect,               // Bildseitenverhältnis
                                     0.1f,                  // Nahe Clipping-Ebene
                                     100.0f);               // Ferne Clipping-Ebene

    // Projektionsmatrix einsetzen
    g_pD3DDevice->SetTransform(D3DTS_PROJECTION, (D3DMATRIX*)(&mProjection));

    // Initialisieren der Dreiecke
    for(int iTriangle = 0; iTriangle < g_iNumTriangles; iTriangle++)
    {
        // Alle Dreiecke starten am Punkt (0, 0, 50).
        g_aTriangle[iTriangle].vPosition = tbVector3(0.0f, 0.0f, 50.0f);

        // Die Bewegung ist zufällig.
        g_aTriangle[iTriangle].vVelocity = tbVector3Random() * tbFloatRandom(0.1f, 5.0f);

        // Rotation zurücksetzen
        g_aTriangle[iTriangle].vRotation = tbVector3(0.0f, 0.0f, 0.0f);

        // Rotationsgeschwindigkeit ist zufällig auf allen drei Achsen
        g_aTriangle[iTriangle].vRotVelocity.x = tbFloatRandom(-1.0f, 1.0f);
        g_aTriangle[iTriangle].vRotVelocity.y = tbFloatRandom(-1.0f, 1.0f);
        g_aTriangle[iTriangle].vRotVelocity.z = tbFloatRandom(-1.0f, 1.0f);

        // Größe zufällig zwischen 1 und 5 festlegen
        g_aTriangle[iTriangle].fSize = tbFloatRandom(1.0f, 5.0f);

        // Nun die einzelnen Vertizes generieren.
        for(int iVertex = 0; iVertex < 3; iVertex++)
        {
            // Position
            g_aTriangle[iTriangle].aVertex[iVertex].vPosition = tbVector3Random();

            // Farbe
            VertexColor.r = tbFloatRandom(0.0f, 1.0f);
            VertexColor.g = tbFloatRandom(0.0f, 1.0f);
            VertexColor.b = tbFloatRandom(0.0f, 1.0f);
            g_aTriangle[iTriangle].aVertex[iVertex].dwColor = (DWORD)(VertexColor);

            // Texturkoordinaten zufällig zwischen -1 und 2 erzeugen
            g_aTriangle[iTriangle].aVertex[iVertex].vTexture.u = tbFloatRandom(-1.0f, 2.0f);
            g_aTriangle[iTriangle].aVertex[iVertex].vTexture.v = tbFloatRandom(-1.0f, 2.0f);
        }
    }

    // Die Textur laden
    if(FAILED(hResult = D3DXCreateTextureFromFileEx(g_pD3DDevice,       // Device
                                                    "Texture.bmp",      // Dateiname
                                                    D3DX_DEFAULT,       // Breite
                                                    D3DX_DEFAULT,       // Höhe
                                                    D3DX_DEFAULT,       // MIP-Maps
                                                    0,                  // Verwendungszweck
                                                    D3DFMT_UNKNOWN,     // Format
                                                    D3DPOOL_MANAGED,    // Speicherklasse
                                                    D3DX_FILTER_NONE,   // Filter
                                                    D3DX_DEFAULT,       // MIP-Map-Filter
                                                    0,                  // Color-Key
                                                    NULL,               // Unwichtig
                                                    NULL,               // Unwichtig
                                                    &g_pTexture)))      // Die Textur
    {
        // Fehler!
        TB_ERROR_DIRECTX("D3DXCreateTextureFromFileEx", hResult, TB_ERROR);
    }

    // Und nun die Textur einsetzen
    g_pD3DDevice->SetTexture(0, g_pTexture);

    return TB_OK;
}


Dieser Code erzeugt folgende Compilerfehler:

Quellcode

1
2
3
4
5
6
7
8
9
10
--------------------Konfiguration: FILTER - Win32 Debug--------------------
Kompilierung läuft...
FILTER.cpp
Linker-Vorgang läuft...
FILTER.obj : error LNK2001: Nichtaufgeloestes externes Symbol _D3DXCreateTextureFromFileExA@56
FILTER.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: static unsigned long const SVertex::dwFVF" (?dwFVF@SVertex@@2KB)
Debug/FILTER.exe : fatal error LNK1120: 2 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.

FILTER.exe - 3 Fehler, 0 Warnung(en)


Was könnte da falsch laufen????

mfg LastManStanding
Ungeduld ist die Mutter der Dummheit - DaVinci

3

10.04.2005, 17:04

Du hast wohl eine Bibliothek nicht gelinkt...

4

10.04.2005, 17:23

#pragma comment(lib, "d3dx9.lib")

weigo

Treue Seele

Beiträge: 234

Wohnort: Deutschland

  • Private Nachricht senden

5

11.04.2005, 09:20

Bibliotheken per pragma zu linken ist nicht die feine Art.
Besser du trägst sie in deinen Projekteigenschaften ein:
Projekt->Eigenschaften->Linker->Input->Additional Dependencies
dort trägst du d3dx9.lib ein und dann noch
Projekt->Eigenschaften->Linker->General->Additional Library Directories
dort trägst du das Verzeichnis ein, wo sich die .lib Datei befindet. Du kannst den “...“ Kopf verwenden um ein Verzeichnis auszuwählen.

Man sollte erst gar nicht mit dem pragma Kram anfangen, bzw. sollte man die Alternativen kennen.
pragma ist zum Ausschalten von Compiler Warnungen nützlich und zum Debuggen vielleicht auch, aber wenn es einen anderen Weg gibt, dann sollte man diesen gehen. Warnings ausschalten sollte man übrigens auch nur machen, wenn es nicht anders geht. Warnings ignorieren ist sowie so ein Fehler, den viele machen. Aber gerade bei den STL Warnings, bleibt einem keine andere Wahl.

6

11.04.2005, 14:04

was spricht denn gegen pragma comment(lib?
vom ausschalten von warnings per pragma oder überhaupt
halte ich auch nix.
aber ich finde es eigentlich so besser lib's
einzubinden weil ich so direkt im source sehen kann welche
abhängigkeiten mein projekt besitzt.
sehe eigentl. keinen triftigen grund nicht pragma zu verwenden
um zu "linken".

gruß 23h

  • »LastManStanding« ist der Autor dieses Themas

Beiträge: 53

Wohnort: Neuhofen

Beruf: Schüler

  • Private Nachricht senden

7

11.04.2005, 17:49

Hallo!
Danke erstmal für die schnellen Antworten.

Tut mir leid, das ich euch noch einmal nerven muss, abber jetzt wo ich die d3dx9.lib gelinkt habe, ergab sich ein neuer Compilerfehler:

Quellcode

1
2
3
4
5
6
7
8
9
--------------------Konfiguration: FILTER - Win32 Debug--------------------
Kompilierung läuft...
FILTER.cpp
Linker-Vorgang läuft...
FILTER.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: static unsigned long const SVertex::dwFVF" (?dwFVF@SVertex@@2KB)
Debug/FILTER.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.

FILTER.exe - 2 Fehler, 0 Warnung(en)


Sieht wieder wie ein linker Fehler aus, hab aber keine Ahnung an was es liegen könnte.

mfg LastManStanding
Ungeduld ist die Mutter der Dummheit - DaVinci

8

11.04.2005, 17:56

ist SVertex ein(e) von dir definierte(s) struct(klasse) ?

9

11.04.2005, 17:58

Du hast eine statische Membervariable dwFVF der Struktur(denke ich mal, an dem S) SVertex und diese nicht im passenden Sourcefile definiert. Also

C-/C++-Quelltext

1
unsigned long const SVertex::dwFVF = <FVFWert>;

weigo

Treue Seele

Beiträge: 234

Wohnort: Deutschland

  • Private Nachricht senden

10

11.04.2005, 19:37

Um noch mal auf das pragma zurückzukommen.
Sicher ist es generell Geschmacksache, ob man nun pragma verwendet oder nicht.
Man muss immer bedenken, dass pragma Compiler spezifisch ist und daher nicht portabel. Daher sollte man sich lieber gleich abgewöhnen pragma zu verwenden. Vor allem weil es eine Alternative gibt, die wirklich nicht komplizierter ist, eher einfacher für Anfänger.

Aber gut, wie gesagt, ich wollte es nur noch mal als Alternative erwähnen und im Endeffekt muss es jeder selbst entscheiden.
Eins noch, du wirst i.d.R. keine Code finden wo jemand per pragma seine Lib einbindet, jedenfalls nicht von einem Programmier, der etwas von sich hält...
OK, dass war gemein, aber ich kenne niemanden!

Werbeanzeige