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

Chef-Koch

Treue Seele

  • »Chef-Koch« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Ulm

  • Private Nachricht senden

1

23.09.2006, 15:56

mehrere Texturen -wie??

hallo ich bin mal wieder :roll: ^^
Ich bin mit dem Buch leider noch nicht so weit, wollte aber trotzde mal in einem kleinen Programm (bzw. ich hab Davids programm abgeändert ^^) testen ob ich alles verstanden hab. SO, und jetzt wollte ich nur mal so als test ein Viereck (2Dreiecke) mit einer anderen Textur überziehen wie der hintergrund. Also habe ich einfach mehr oder weniger genau das selbe geschrieben wie der Code der Die 1. Textur läd. Aber enn ich das Programm ausführe, zeigt er mir nur 1ne Textur an, ich denke das hat irgendwas mit der g_pD3DDevice->SetTexture Funktion zu tun , aber ich weiß nich so ganz wie ich es hinbekomme :oops: :oops:
also hier mal 1. Textur laden:

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
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
    for(int a = 0; a < 10; a++)
    {
            // Position

            g_aTriangle[a].aVertex[0].x =   -12.0f;
            g_aTriangle[a].aVertex[0].y =     9.0f - 2 * a;
            g_aTriangle[a].aVertex[0].z =     1.0f;

            g_aTriangle[a].aVertex[1].x =   -12.0f;
            g_aTriangle[a].aVertex[1].y =     7.0f  - 2 * a;
            g_aTriangle[a].aVertex[1].z =     1.0f;

            g_aTriangle[a].aVertex[2].x =   -10.0f;
            g_aTriangle[a].aVertex[2].y =     9.0f  - 2 * a;
            g_aTriangle[a].aVertex[2].z =     1.0f;

            g_aTriangle[a].aVertex[3].x =   -10.0f;
            g_aTriangle[a].aVertex[3].y =     7.0f  - 2 * a;
            g_aTriangle[a].aVertex[3].z =     1.0f;

        for(int i   = 4; i < 26 ; i++)
        {


            g_aTriangle[a].aVertex[i].x = g_aTriangle[a].aVertex[i-2].x +2.0f;
            g_aTriangle[a].aVertex[i].y = g_aTriangle[a].aVertex[i-2].y;
            g_aTriangle[a].aVertex[i].z = 1.0f;

        }


        for(int iVertex = 0; iVertex < 26; iVertex++)
        {
            // Farbe

            VertexColor.r = 1.0f;
            VertexColor.g = 1.0f;
            VertexColor.b = 1.0f;
            g_aTriangle[a].aVertex[iVertex].dwColor = (DWORD)(VertexColor);
        
        }


// Texturkoordinaten

            g_aTriangle[a].aVertex[0].vTexture.u = 0.0f;
            g_aTriangle[a].aVertex[0].vTexture.v = 0.0f;
            g_aTriangle[a].aVertex[1].vTexture.u = 0.0f ;
            g_aTriangle[a].aVertex[1].vTexture.v = 1.0f;

            for(i = 2; i < 26; i++)
            {
            g_aTriangle[a].aVertex[i].vTexture.u = g_aTriangle[a].aVertex[i-2].vTexture.u +1.0f;
            g_aTriangle[a].aVertex[i].vTexture.v = g_aTriangle[a].aVertex[i-2].vTexture.v;

            }

    }
            
    // 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);

und die 2. (wundert euch nicht, wenn es etwas chaotisch ist, ich habe nämlich schon etwas rumexperimenteiert.

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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
g_aPanzer1.bVertex[0].x     =       -6.0f;
g_aPanzer1.bVertex[0].y     =       -6.0f;
g_aPanzer1.bVertex[0].z     =       0.90f;

g_aPanzer1.bVertex[1].x     =       -6.0f;
g_aPanzer1.bVertex[1].y     =       -5.0f;
g_aPanzer1.bVertex[1].z     =       0.9f;

g_aPanzer1.bVertex[2].x     =       -5.0f;
g_aPanzer1.bVertex[2].y     =       -6.0f;
g_aPanzer1.bVertex[2].z     =       0.9f;

g_aPanzer1.bVertex[3].x     =       -5.0f;
g_aPanzer1.bVertex[3].y     =       -5.0f;
g_aPanzer1.bVertex[3].z     =       0.9f;

/////////////////////////////Farbe//////////////////////////////////////////////


            VertexColor.r = 1.0f;
            VertexColor.g = 1.0f;
            VertexColor.b = 1.0f;
            g_aPanzer1.bVertex[0].dwColor = (DWORD)(VertexColor);
            VertexColor.r = 1.0f;
            VertexColor.g = 1.0f;
            VertexColor.b = 1.0f;
            g_aPanzer1.bVertex[1].dwColor = (DWORD)(VertexColor);
            VertexColor.r = 1.0f;
            VertexColor.g = 1.0f;
            VertexColor.b = 1.0f;
            g_aPanzer1.bVertex[2].dwColor = (DWORD)(VertexColor);
            VertexColor.r = 1.0f;
            VertexColor.g = 1.0f;
            VertexColor.b = 1.0f;
            g_aPanzer1.bVertex[3].dwColor = (DWORD)(VertexColor);

///////////////////////////////TexturKoordinaten//////////////////////////////////////////


        g_aPanzer1.bVertex[0].vTexture.u        = 0.0f;
        g_aPanzer1.bVertex[0].vTexture.v        = 0.0f;

        g_aPanzer1.bVertex[1].vTexture.u        = 0.0f;
        g_aPanzer1.bVertex[1].vTexture.v        = 1.0f;

        g_aPanzer1.bVertex[2].vTexture.u        = 1.0f;
        g_aPanzer1.bVertex[2].vTexture.v        = 0.0f;

        g_aPanzer1.bVertex[3].vTexture.u        = 1.0f;
        g_aPanzer1.bVertex[3].vTexture.v        = 1.0f;


if(FAILED(hResult = D3DXCreateTextureFromFileEx(g_pD3DDevice,       // Device

                                                "Panzer.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_pTexture2)))     // Die Textur

    {
        // Fehler!

        TB_ERROR_DIRECTX("D3DXCreateTextureFromFileEx", hResult, TB_ERROR);
    }

    // Und nun die Textur einsetzen

    g_pD3DDevice->SetTexture(0, g_pTexture2);


Ja das ist eine Panzer texture :roll: die istnämlich scon quadratisch :lol: :lol: beide werden auch selbstständig gezeichnet :

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
    if(FAILED(hResult = g_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,      // Dreiecksliste

                                                      24,                       // 13 Vierecke

                                                      g_aTriangle[a].aVertex,       // Vertexdaten

                                                      sizeof(SVertex))))        // Vertexgröße

    {
        // Fehler beim Zeichnen!

        MessageBox(g_hWindow, "Fehler beim Zeichnen des Dreiecks!",
                   "Fehler", MB_OK | MB_ICONEXCLAMATION);
        TB_ERROR_DIRECTX("g_pD3DDevice->DrawPrimitiveUP", hResult, TB_STOP);
    }

    }
///////////////////////Panzer//////////////////////////////

        if(FAILED(hResult = g_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,      // Dreiecksliste

                                                      2,                        // 1 Viereck

                                                      g_aPanzer1.bVertex,       // Vertexdaten

                                                      sizeof(SVertex))))        // Vertexgröße

    {
        // Fehler beim Zeichnen!

        MessageBox(g_hWindow, "Fehler beim Zeichnen des Dreiecks!",
                   "Fehler", MB_OK | MB_ICONEXCLAMATION);
        TB_ERROR_DIRECTX("g_pD3DDevice->DrawPrimitiveUP", hResult, TB_STOP);
    }

Ich weiß leider nicht an was es liegt. Danke für eure Hilfe und wenn ihr den ganzen Quellcode haben wollt müsst ihrs nur sagen (obwohl ihr davon vllt. erschlagen werden könntet bzw. nixda ewürde en dreifachen Herzinfakt bekommen xD )
Also meine Frage: wie schaffe ich es mehrere Texturen auf verschiedene Dreiecke (kann man schon Polygone sagen?) zulegen?

mfg

2

24.09.2006, 00:31

Du musst die Texturen direkt vor dem Zeichnen setzen.

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
        g_pD3DDevice->SetTexture(0, g_pTexture);

    if(FAILED(hResult = g_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,        // Dreiecksliste

                                                      24,                        // 13 Vierecke

                                                      g_aTriangle[a].aVertex,        // Vertexdaten

                                                      sizeof(SVertex))))        // Vertexgröße

    {
        // Fehler beim Zeichnen!

        MessageBox(g_hWindow, "Fehler beim Zeichnen des Dreiecks!",
                   "Fehler", MB_OK | MB_ICONEXCLAMATION);
        TB_ERROR_DIRECTX("g_pD3DDevice->DrawPrimitiveUP", hResult, TB_STOP);
    }

    }
///////////////////////Panzer//////////////////////////////

        g_pD3DDevice->SetTexture(0, g_pTexture2);

        if(FAILED(hResult = g_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,        // Dreiecksliste

                                                      2,                        // 1 Viereck

                                                      g_aPanzer1.bVertex,        // Vertexdaten

                                                      sizeof(SVertex))))        // Vertexgröße

    {
        // Fehler beim Zeichnen!

        MessageBox(g_hWindow, "Fehler beim Zeichnen des Dreiecks!",
                   "Fehler", MB_OK | MB_ICONEXCLAMATION);
        TB_ERROR_DIRECTX("g_pD3DDevice->DrawPrimitiveUP", hResult, TB_STOP);
    }

Chef-Koch

Treue Seele

  • »Chef-Koch« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Ulm

  • Private Nachricht senden

3

24.09.2006, 02:03

ah danke hat geklappt ^^. Danke

Chef-Koch

Treue Seele

  • »Chef-Koch« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Ulm

  • Private Nachricht senden

4

24.09.2006, 12:11

soo ich hab en neues Problemchen:
Ich habe meinen "Panzer"(nennen wir dieses Viereck einfach mal so^^) jetzt zubewegen gebracht, und ihm auch versucht eine Textur für jede Richtung zu geben, hat aber leider nicht sogeklappt. hier mal die Variable für die Textur:

C-/C++-Quelltext

1
char *                  Textur      = "Panzer.bmp";

hier mal die Funktion zum Rendern:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
if(FAILED(hResult = D3DXCreateTextureFromFileEx(g_pD3DDevice,       // Device

                                                Textur,             // 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_pTexture2)))     // Die Textur

    {
        // Fehler!

        TB_ERROR_DIRECTX("D3DXCreateTextureFromFileEx", hResult, TB_ERROR);
    } 

und dann hier der Teil wo ich ihn bewegen lasse und versuche die Textur zu ä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
if(GetAsyncKeyState(VK_UP))
{
    g_aPanzer1.bVertex[0].y += 0.8f * fSecsPassed;
    g_aPanzer1.bVertex[1].y += 0.8f * fSecsPassed;
    g_aPanzer1.bVertex[2].y += 0.8f * fSecsPassed;
    g_aPanzer1.bVertex[3].y += 0.8f * fSecsPassed;

    Textur = "Panzer_Up.bmp";
}

if(GetAsyncKeyState(VK_DOWN))
{
    g_aPanzer1.bVertex[0].y -= 0.8f * fSecsPassed;
    g_aPanzer1.bVertex[1].y -= 0.8f * fSecsPassed;
    g_aPanzer1.bVertex[2].y -= 0.8f * fSecsPassed;
    g_aPanzer1.bVertex[3].y -= 0.8f * fSecsPassed;

    Textur = "Panzer.bmp";
}

if(GetAsyncKeyState(VK_RIGHT))
{
    g_aPanzer1.bVertex[0].x += 0.8f * fSecsPassed;
    g_aPanzer1.bVertex[1].x += 0.8f * fSecsPassed;
    g_aPanzer1.bVertex[2].x += 0.8f * fSecsPassed;
    g_aPanzer1.bVertex[3].x += 0.8f * fSecsPassed;

    Textur = "Panzer_Right.bmp";
}

if(GetAsyncKeyState(VK_LEFT))
{
    g_aPanzer1.bVertex[0].x -= 0.8f * fSecsPassed;
    g_aPanzer1.bVertex[1].x -= 0.8f * fSecsPassed;
    g_aPanzer1.bVertex[2].x -= 0.8f * fSecsPassed;
    g_aPanzer1.bVertex[3].x -= 0.8f * fSecsPassed;

    Textur = "Panzer_Left.bmp";
}


Anstatt der Textur zu ändern macht er .. gar nichts, er behält die Standart Textur bei. Was mache ich falsch? Danke für eure Antworten

Chef-Koch

Treue Seele

  • »Chef-Koch« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Ulm

  • Private Nachricht senden

5

25.09.2006, 14:41

Warum antwortet mir nie einer ? :( :( Ihr könnt mich ruhig anschreien, falls euch was stört, ich halt sowas aus ;) oder auch mich auf die FAQ hinwiesen oder auf die suchfunktion (hab ich aber schon geguggt -.-) mnur irgendetwas, damit ich weiß, dass ich nicht unsichtbar bin .

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

6

25.09.2006, 14:45

Ich weiß nicht, ob es anderen ähnlich geht, aber wenn gleich im 1. Post seitenweise Quellcode kommt scroll ich da nur kurz drüber und beschließe, dass das Problem zu komplex für mich ist.

DigitalDream

Frischling

Beiträge: 66

Beruf: Entwickler

  • Private Nachricht senden

7

25.09.2006, 15:14

In den Blöcken,wo du nach der gedrückten Taste (Richtung) prüfst, setzt du die Textur mit Textur = "xxx.bmp" neu.

Und wo findet die Aktualisierung mit der neuen Textur auf dem Bildschirm statt?

Hast du überhaupt mal debugged?

Chef-Koch

Treue Seele

  • »Chef-Koch« ist der Autor dieses Themas

Beiträge: 115

Wohnort: Ulm

  • Private Nachricht senden

8

26.09.2006, 21:19

ok, danke DIgital Dream, du hattest recht, ich hab vergessen die Textur zu aktualisieren :lol: :roll: :roll: . Ich hatte dann zwar noch en paar Probleme, aber die sin jetz au weg :D, jetz läuft ales so wie ich will "woohoo!" :D .
Noch eins: Wenn ich in der Funktion

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
hResult = D3DXCreateTextureFromFileEx(g_pD3DDevice,        // Device

                                                Textur,                // 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_pTexture2)


den Colorkey auf weiß stellen will, wie mache ich das? (bzw. wie geht das system da, denn des sind ja keine 3 Farbwerte, die gemischt werden, als woher weiß man welche Farbe Welche nummer ist?? <-nur kleine Nebenfrage, muss nicht beantwortet werden xD)

Ich weiß, dass es ein Wert von D3DColor sien muss, aber welchen ?:/ hab in der MSDN auch nichts genaueres dazu gefunden.

Dankeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee

Sheddex

unregistriert

9

26.09.2006, 21:26

Benutze das Makro D3DCOLOR_XRGB(r, g, b) um eben die 3 Farben in der Klammer zu einem usigned long bzw. D3DCOLOR umwandeln zu lassen.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

10

26.09.2006, 23:32

Alternativ kann man die Farbe auch als Hex angeben, wenn man keine Makros nutzen will. Weiß wäre 0xFFFFFFFF.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Werbeanzeige