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

Stefan

Alter Hase

  • »Stefan« ist der Autor dieses Themas

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

21

29.06.2003, 19:00

okay,

Quellcode

1
2
//Globale Veriablen
PDIRECT3DTEXTURE9   g_pTexture[2] ;             // Die Textur


Quellcode

1
2
3
4
5
6
7
8
tbResult InitApplication()
{
    tbResult Result;

    // TriBase-Engine initialisieren
    tbInit();
    BildLaden(100,100,"bild4.jpg"); //Das angeben von Bildern, wird noch nicht berücksichtigt
....

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
//initalisieren der Scene
tbResult InitScene()
{
    HRESULT hResult;
    float fSpeed;
    tbColor VertexColor;

    // Vertexformat setzen - Positions- und Farbangabe
    if(FAILED(hResult = g_pD3DDevice->SetFVF(D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1))) {
        //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);



            // Nun die einzelnen Vertizes generieren
            // Position
            g_aTriangle[0].aVertex[0].vPosition = tbVector3( 0.0f,-768.0f,0.0f);
            g_aTriangle[0].aVertex[1].vPosition = tbVector3( 1024.0f,-768.0f,0.0f);
            g_aTriangle[0].aVertex[2].vPosition = tbVector3( 0.0f, 768.0f,0.0f);
            g_aTriangle[0].aVertex[3].vPosition = tbVector3( 1024.0f, 768.0f,0.0f);

            // Farbe
            VertexColor.r = 1.0f;;
            VertexColor.g = 1.0f;
            VertexColor.b = 1.0f;

            // Farbe übergeben
            g_aTriangle[0].aVertex[0].Diffuse =(DWORD)(VertexColor);
            g_aTriangle[0].aVertex[1].Diffuse =(DWORD)(VertexColor);
            g_aTriangle[0].aVertex[2].Diffuse =(DWORD)(VertexColor);
            g_aTriangle[0].aVertex[3].Diffuse =(DWORD)(VertexColor);
        
            // Textur-Koordinaten setzten, 0.5 befindet sich immer in der Mitte der Textur
            g_aTriangle[0].aVertex[0].vTex1.u = 0;
            g_aTriangle[0].aVertex[0].vTex1.v = 1;
            g_aTriangle[0].aVertex[1].vTex1.u = 1;
            g_aTriangle[0].aVertex[1].vTex1.v = 1;
            g_aTriangle[0].aVertex[2].vTex1.u = 0;
            g_aTriangle[0].aVertex[2].vTex1.v = 0;
            g_aTriangle[0].aVertex[3].vTex1.u = 1;
            g_aTriangle[0].aVertex[3].vTex1.v = 0;

            //RHW immer auf 1 stellen!!!
            g_aTriangle[0].aVertex[0].fRHW = 1;
            g_aTriangle[0].aVertex[1].fRHW = 1;
            g_aTriangle[0].aVertex[2].fRHW = 1;
            g_aTriangle[0].aVertex[3].fRHW = 1;
    



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




    return TB_OK;
}



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
//Funktion um ein beliebiges Bild zu laden
tbResult BildLaden(int Bild_Breite, int Bild_Hohe, char* Bild_Name)
{   HRESULT hResult;
    tbColor VertexColor;






            g_aTriangle[1].aVertex[0].vPosition = tbVector3( 0.0f,-Bild_Hohe,0.0f);
            g_aTriangle[1].aVertex[1].vPosition = tbVector3( Bild_Breite,-Bild_Hohe,0.0f);
            g_aTriangle[1].aVertex[2].vPosition = tbVector3( 0.0f, Bild_Hohe,0.0f);
            g_aTriangle[1].aVertex[3].vPosition = tbVector3( Bild_Breite, Bild_Hohe,0.0f);

            // Farbe
            VertexColor.r = 1.0f;;
            VertexColor.g = 1.0f;
            VertexColor.b = 1.0f;

            // Farbe übergeben
            g_aTriangle[1].aVertex[0].Diffuse =(DWORD)(VertexColor);
            g_aTriangle[1].aVertex[1].Diffuse =(DWORD)(VertexColor);
            g_aTriangle[1].aVertex[2].Diffuse =(DWORD)(VertexColor);
            g_aTriangle[1].aVertex[3].Diffuse =(DWORD)(VertexColor);

    // Textur-Koordinaten setzten, 0.5 befindet sich immer in der Mitte der Textur
            g_aTriangle[1].aVertex[0].vTex1.u = 0;
            g_aTriangle[1].aVertex[0].vTex1.v = 1;
            g_aTriangle[1].aVertex[1].vTex1.u = 1;
            g_aTriangle[1].aVertex[1].vTex1.v = 1;
            g_aTriangle[1].aVertex[2].vTex1.u = 0;
            g_aTriangle[1].aVertex[2].vTex1.v = 0;
            g_aTriangle[1].aVertex[3].vTex1.u = 1;
            g_aTriangle[1].aVertex[3].vTex1.v = 0;

            //RHW immer auf 1 stellen!!!
            g_aTriangle[1].aVertex[0].fRHW = 1;
            g_aTriangle[1].aVertex[1].fRHW = 1;
            g_aTriangle[1].aVertex[2].fRHW = 1;
            g_aTriangle[1].aVertex[3].fRHW = 1;


    //Die Textur laden
    if(FAILED(hResult = D3DXCreateTextureFromFileEx(g_pD3DDevice,       // Device
                                                    "bild4.jpg",        // Dateiname
                                                    D3DX_DEFAULT,       // Breite
                                                    D3DX_DEFAULT,       // Höhe
                                                    D3DX_DEFAULT,       // MIP-Maps
                                                    0,                  // Zweck
                                                    D3DFMT_UNKNOWN,     // Format
                                                    D3DPOOL_MANAGED,    // Speicherklasse
                                                    D3DX_FILTER_NONE,   // Filter
                                                    D3DX_DEFAULT,       // MIP-Map-Filter
                                                    0,                  // Color-Key
                                                    NULL,               // Unwichtig
                                                    NULL,               // Unwichtig
                                                    &g_pTexture[1])))       // Die Textur

    {
        // Fehler!
        TB_ERROR_DIRECTX("D3DXCreateTextureFromFileEx", hResult,TB_ERROR);
    }

    //Und nund die Textur einsetzen
    g_pD3DDevice->SetTexture(0, g_pTexture[1]);


    return TB_OK;
}


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
tbResult Render(float fNumSecsPassed)
{   

    HRESULT     hResult;



    // Den Bildpuffer und den Z-Buffer leeren
    if(FAILED(hResult = g_pD3DDevice->Clear(0,
                                            NULL,
                                            D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
                                            D3DCOLOR_XRGB(0, 0, 63),
                                            1.0f,
                                            0)))
    {
        // Fehler beim Leeren!
        TB_ERROR_DIRECTX("g_pD3DDevice->Clear", hResult, TB_STOP);
    }

    // Szene beginnen
    g_pD3DDevice->BeginScene();

    // Abhängig von der Zeit die Texturfilter setzen.
    // Alle drei Sekunden werden diese geändert.
    if((int)(g_fTime / 3.0f) % 3 == 0)
    {
        // Bilineare Filter mit linearem MIP-Mapping
        g_pD3DDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
        g_pD3DDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
        g_pD3DDevice->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_LINEAR);
        SetWindowText(g_hWindow, "Beispielprogramm Nr. 4: Texturen (MIN: Linear, MAG: Linear, MIP: Linear)");
    }
    else if((int)(g_fTime / 3.0f) % 3 == 1)
    {
        // Keine Filter ("PlayStation-Effekt"), auch kein MIP-Mapping
        g_pD3DDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_POINT);
        g_pD3DDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_POINT);
        g_pD3DDevice->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_NONE);
        SetWindowText(g_hWindow, "Beispielprogramm Nr. 4: Texturen (MIN: Point, MAG: Point, MIP: None)");
    }
    else
    {
        // Maximaler anisotropischer Filter ohne MIP-Mapping
        g_pD3DDevice->SetSamplerState(0, D3DSAMP_MAXANISOTROPY,
                                      g_Direct3DParameters.DeviceCaps.MaxAnisotropy);
        g_pD3DDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_ANISOTROPIC);
        g_pD3DDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR);
        g_pD3DDevice->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_NONE);
        SetWindowText(g_hWindow, "Beispielprogramm Nr. 4: Texturen (MIN: Anisotropic, MAG: Linear, MIP: None)");
    }

    // Jedes einzelne Dreieck zeichnen
    for(int iTriangle = 0; iTriangle < g_iNumTriangles; iTriangle++)
    {

    
        g_pD3DDevice->SetTexture(0, g_pTexture[iTriangle]);


        if(FAILED(hResult = g_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,              // Dreiecksliste
                                                          2,                                // 1 Dreieck
                                                          g_aTriangle[iTriangle].aVertex,   // Vertexdaten
                                                          sizeof(STransformedVertex))))             // Vertexgröße
        {
            // Fehler beim Zeichnen!
            TB_ERROR_DIRECTX("g_pD3DDevice->DrawPrimitiveUP", hResult, TB_STOP);
        }
    }

    // Szene beenden
    g_pD3DDevice->EndScene();

    // Der große Moment: den Bildpuffer sichtbar machen
    g_pD3DDevice->Present(NULL, NULL, NULL, NULL);

    return TB_OK;
}

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

22

29.06.2003, 19:14

Also daraus werde ich nicht schlau!
Frage: Warum gibst Du bei den Vertizes negative y-Koordinaten an? Das ist doch dann außerhalb des Bildschirms!
Links oben ist (0, 0), rechts unten ist (AuflösungX - 1, AuflösungY - 1).

Stefan

Alter Hase

  • »Stefan« ist der Autor dieses Themas

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

23

29.06.2003, 19:27

sorry, ist mir gar nicht aufgefallen, da hatte ich ja einen schrecklichen Fehlgedanken.......
so sieht es nun aus:

Quellcode

1
2
3
4
g_aTriangle[0].aVertex[0].vPosition = tbVector3( 0.0f,768.0f,0.0f);
            g_aTriangle[0].aVertex[1].vPosition = tbVector3( 1024.0f,768.0f,0.0f);
            g_aTriangle[0].aVertex[2].vPosition = tbVector3( 0.0f, 0.0f,0.0f);
            g_aTriangle[0].aVertex[3].vPosition = tbVector3( 1024.0f, 0.0f,0.0f);


Quellcode

1
2
3
4
    g_aTriangle[1].aVertex[0].vPosition = tbVector3( 0.0f,Bild_Hohe,0.0f);
            g_aTriangle[1].aVertex[1].vPosition = tbVector3( Bild_Breite,Bild_Hohe,0.0f);
            g_aTriangle[1].aVertex[2].vPosition = tbVector3( 0.0f, 0.0f,0.0f);
            g_aTriangle[1].aVertex[3].vPosition = tbVector3( Bild_Breite, 0.0,0.0f);


Aber die Textur fehlt leider immer noch....wundert mich, dass er doch die Vierecke an richtiger Position gemalt hat, obwohl die Vertizes falsch waren....

Stefan

Alter Hase

  • »Stefan« ist der Autor dieses Themas

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

24

29.06.2003, 20:18

Ich habe den Fehler, mal wieder ganz was blödes, ich könnte mich echt erwürgen :wall:
Ich hab mich beim Namen der Funktionen verlesen:
InitScene
tbInit


Und somit stand die Funktion BildLaden an der falschen Stelle geschrieben und der Fehler passierte...

Danke für deine Hilfe, ohne diesen Fehler hätte ich immer noch die Vertizes falsch!

Werbeanzeige