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

Mr. Schmidt

Frischling

  • »Mr. Schmidt« ist der Autor dieses Themas

Beiträge: 24

Wohnort: Nürnberg

  • Private Nachricht senden

1

01.07.2007, 15:03

Textur auf Dreieck

Hallo alle zusammen,

ich bin gerade dabei die 1. Aufgabe des Kapitels "Texturen" zu lösen. Dabei soll man ein Dreieck programmieren und eine Textur darauf laden.

Insgesamt funktioniert das bei mir schon, allerdings versteh ich die Lage der Textur nicht. Das Dreieck sieht bei mir nämlich folgendermaßen aus: Dreieck

Ich dachte jedoch, dass wenn ich den jeweiligen Ecken unten zum Beispiel die Texturkoordinaten (0.0f, 1.0f) und (1.0f, 1.0f) zuweise, dass die Textur gestreckt wird, sodass sie passt. Zur Verdeutlichung der entsprechende Code-Ausschnitt:

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
79
struct SVertex
{
    tbVector3 vPosition;
    DWORD dwColor;
    tbVector2 vTexture;
    static const DWORD dwFVF;
};

[...]

struct STriangle
{
    SVertex Vertex[3];
};

[...]

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

    hResult = g_pD3DDevice->SetFVF (SVertex::dwFVF);
    if (hResult != 0)
    {
        MessageBox (NULL, "Fehler beim Setzen der FVF.", "Fehler.", MB_ICONERROR);

        return TB_ERROR;
    }

    g_pD3DDevice->SetRenderState (D3DRS_LIGHTING, FALSE);
    g_pD3DDevice->SetRenderState (D3DRS_CULLMODE, D3DCULL_NONE);
    g_pD3DDevice->SetRenderState (D3DRS_DITHERENABLE, TRUE);

    fAspect = (float)(g_Parameters.VideoMode.Width) / (float)(g_Parameters.VideoMode.Height);

    mProjection = tbMatrixProjection (TB_DEG_TO_RAD (90.0f), fAspect, 0.1f, 100.0f);

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

    g_Triangle.Vertex[0].vPosition = tbVector3 (0.0f, 1.0f, 0.0f);
    g_Triangle.Vertex[1].vPosition = tbVector3 (1.0f, -1.0f, 0.0f);
    g_Triangle.Vertex[2].vPosition = tbVector3 (-1.0f, -1.0f, 0.0f);

    g_Triangle.Vertex[0].dwColor = (DWORD)(tbColor (1.0f));
    g_Triangle.Vertex[1].dwColor = (DWORD)(tbColor (1.0f));
    g_Triangle.Vertex[2].dwColor = (DWORD)(tbColor (1.0f));

    g_Triangle.Vertex[0].vTexture = tbVector2 (0.5f, 0.0f);
    g_Triangle.Vertex[1].vTexture = tbVector2 (1.0f, 1.0f);
    g_Triangle.Vertex[2].vTexture = tbVector2 (0.0f, 1.0f);


    hResult = D3DXCreateTextureFromFileEx (g_pD3DDevice,
                                            "Texture2.bmp",
                                            D3DX_DEFAULT, 
                                            D3DX_DEFAULT,
                                            D3DX_DEFAULT,
                                            0,
                                            D3DFMT_UNKNOWN,
                                            D3DPOOL_MANAGED,
                                            D3DX_FILTER_NONE,
                                            D3DX_DEFAULT,
                                            0,
                                            NULL,
                                            NULL,
                                            &g_pTexture);
    if (hResult != 0)
    {
        MessageBox (NULL, "Fehler beim Erstellen der Textur.", "Fehler", MB_ICONERROR);

        return TB_ERROR;
    }

    g_pD3DDevice->SetTexture (0, g_pTexture);

    return TB_OK;
}


Wahrscheinlich steh ich im Moment nur auf dem Schlauch, würde mich freuen, wenn ihr mir da raushelfen würdet.

Vielen Dank schonmal

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

01.07.2007, 15:22

wie sieht denn die textur aus? ich seh nämlich atm nicht dass da irgendwas falsch wäre...schaut genau so aus wie es sollte^^

Mr. Schmidt

Frischling

  • »Mr. Schmidt« ist der Autor dieses Themas

Beiträge: 24

Wohnort: Nürnberg

  • Private Nachricht senden

3

01.07.2007, 19:02

Nun die Textur sieht so aus: Textur
Ich dachte, wenn die Ecken alle im Bereich zwischen 0 und 1 sind, die Textur also nicht gekachelt wird, dass sie dann das gesamte Dreieck ausfüllt und gestreckt wird, sodass sie exakt reinpasst.

mfg Schmidt

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

4

01.07.2007, 20:40

Vermutung:
deine GraKa mag nur Texturen mit 2^n Auflösungen. Deine Textur ist aber 160x160.
Ansatz:
Vergrößer mal testweise deine Textur in einem Grafikprogramm auf 256x256. Vielleicht hilft es.
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.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

01.07.2007, 21:14

jop, das kann durchaus der grund sein.

Mr. Schmidt

Frischling

  • »Mr. Schmidt« ist der Autor dieses Themas

Beiträge: 24

Wohnort: Nürnberg

  • Private Nachricht senden

6

01.07.2007, 23:28

Ja das war der Fehler, jetzt ist das komplette Dreieck ausgefüllt. Bei der Größe des Bildes hätte ich wohl gar nicht nachgesehen.
Danke für eure schnelle Hilfe.

mfg Schmidt

Werbeanzeige