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

1

27.12.2013, 16:41

Kapitel 2.6 Aufgabe 1 - Textur verzerrt

Liebes Forum,

ich poste zum ersten Mal hier. Bis jetzt bin ich mit der Suchfunktion immer ganz gut hingekommen, aber diesmal finde ich meinen Fehler nicht.

Ich wollte Aufgabe 1 in Kapitel 2.6.11 lösen. Dabei soll man ein einfaches statisches Dreieck rendern, das mit einer Textur überzogen ist. Das Laden der Textur funktioniert auch, nur ist sie immer verzerrt (Alles diagonal gestellt). Im Anhang ist ein Screenshot von der eigentlichen Textur-Datei und dann eine Screenshot vom Programm.

Ich habe jetzt schon den ganzen Tag damit verbracht und leider keine Lösung gefunden. Wo liegt mein Fehler?

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
struct SVertex
{
    tbVector3           vPosition;  // Position des Vertex
    tbVector2           vTexture;   // Texturkoordinaten
    static const DWORD  dwFVF;      // Vertexformat (statisch)
};
const DWORD SVertex::dwFVF = D3DFVF_XYZ | D3DFVF_PSIZE | D3DFVF_TEX1;
[...]

tbResult InitScene()
{
    HRESULT     hResult;
    tbMatrix    mProjection;
    float       fAspect;


    // Vertexformat setzen - Positions- und Farbangabe
    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)(g_Direct3DParameters.VideoMode.Width)
            / (float)(g_Direct3DParameters.VideoMode.Height);

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

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

    // Initialisieren des Dreiecks
    g_aTriangleVertex[0].vPosition  = tbVector3( 0.0f,  1.0f, 0.0f);
    g_aTriangleVertex[1].vPosition  = tbVector3( 1.0f, -1.0f, 0.0f);
    g_aTriangleVertex[2].vPosition  = tbVector3(-1.0f, -1.0f, 0.0f);

    g_aTriangleVertex[0].vTexture = tbVector2(0.5f, 0.0f);
    g_aTriangleVertex[1].vTexture = tbVector2(1.0f, 1.0f);
    g_aTriangleVertex[2].vTexture = tbVector2(0.0f, 1.0f);
    
        // Die Textur laden

    if(FAILED(hResult = D3DXCreateTextureFromFileEx(g_pD3DDevice,       // Device
                                                    "Paver400.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);
    }
    //Textursamplerstate WRAP einstellen
    g_pD3DDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);
    g_pD3DDevice->SetSamplerState(0, D3DSAMP_ADDRESSU, D3DTADDRESS_WRAP);
    g_pD3DDevice->SetSamplerState(0, D3DSAMP_ADDRESSV, D3DTADDRESS_WRAP);
    // Und nun die Textur einsetzen
    g_pD3DDevice->SetTexture(0, g_pTexture);


Vielen Dank für die Hilfe!
»Inyah« hat folgende Dateien angehängt:
  • Kacheln.bmp (421,55 kB - 111 mal heruntergeladen - zuletzt: 17.02.2024, 15:04)
  • KachelnimProgramm.bmp (341,95 kB - 100 mal heruntergeladen - zuletzt: 20.04.2024, 09:49)

CentuCore

Frischling

Beiträge: 43

Wohnort: Wien

  • Private Nachricht senden

2

29.12.2013, 13:06

Warum benutzt du D3DFVF_PSIZE, wenn du keine Pointsize in der Vertex-Struktur definierst?

3

31.12.2013, 11:29

Warum benutzt du D3DFVF_PSIZE, wenn du keine Pointsize in der Vertex-Struktur definierst?

Ok Danke, jetzt geht es!

Werbeanzeige