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

25.11.2005, 08:26

Probleme Mit Texturen.. Aufgaben Seite 171

Hallo,

Jetzt funktioniert das Programm. Ich habe jedoch ein neues PRoblem.

1.) Ich versetehe nicht woher der Compiler weiss, auf welches Dreieck er die TExtur anwenden muss. Bei Drawprimitiveup wird ja der Funktion die Sturktur mit all den Vertex Daten des Dreiecks übergeben. Aber die TExturdaten (g_pTexture) werden ja nicht direkt einem Dreieck übergeben.


2.) Meine TExtur wird nur schwarz rot angezeigt. Es lässt sich bei dem Statischen Dreieck keinerlei Schachbrett erkennen. Wenn ich den Playstation effect reinmache ist das Dreieck nur noch Schwarz.

Meine Dreieck- und TExtur Koordinaten sind :

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
    // 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].dwColor    = tbColor(1.0f, 0.0f, 0.0f);
    g_aTriangleVertex[1].dwColor    = tbColor(0.0f, 1.0f, 0.0f);
    g_aTriangleVertex[2].dwColor    = tbColor(0.0f, 0.0f, 1.0f);

     // Setzten der Textur Koordinaten

    g_aTriangleVertex[0].vTexture = tbVector2(0.5f,0.0f);
    g_aTriangleVertex[1].vTexture = tbVector2(0.0f,1.0f);
    g_aTriangleVertex[2].vTexture = tbVector2(1.0f,1.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);



Kann mir einer bei den 2 Fragen helfen?


Die SVErtex Struktur habe ich so ereweitert:



MfG Fury

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
// Struktur für einen Vertex: Position und Farbe

struct SVertex
{
    tbVector3           vPosition;  // Position des Vertex

    tbVector2           vTexture;   // TExtur

    DWORD               dwColor;    // Farbe des Vertex

    static const DWORD  dwFVF;      // Vertexformat (statisch)

};

const DWORD SVertex::dwFVF = D3DFVF_XYZ | D3DFVF_DIFFUSE;

2

25.11.2005, 13:22

Zu der Ersten Frage:

Wenn du mit SetTexture deine Textur setzt wird die Textur auf jedes Dreieck angewand das Nach dem Aufruf von SetTexture gezeichnet wird.

3

25.11.2005, 13:27

Mir ist gerade aufgefallen, dass du das Vertexformat D3DFVF_TEX1 vergessen hast.

4

25.11.2005, 18:38

1) Vielen dank für die antwort dann ist das klar!!^^

wo hab ich das Verexformat vergessen? Ist das für die TExturen wichtig??

MfG

Lemming

Alter Hase

Beiträge: 550

Beruf: Schüler

  • Private Nachricht senden

5

25.11.2005, 18:45

C-/C++-Quelltext

1
2
3
4
5
6
7
8
struct VERTEX
{
tbVector3    vPosition;
DWORD      cColor;
tbVector2    vTexture;
static const DWORD dwFVF;
};
const DWORD VERTEX::dwFVF = D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1

genauso musses. die reihenfolge der members von VERTEX einhalten!
und diese FVF angeben!
dann isses richtig
cu
Es gibt Probleme, die kann man nicht lösen.
Für alles andere gibt es C++...

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

6

25.11.2005, 20:32

Oder noch besser Vertex Declarations nutzen ;)
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.

7

26.11.2005, 19:56

Kann das echt was ausmachen in welcher reihenfolge das in der Struktur steht?
Muss die Struktur auch immer S Vertex heissen?

ÄHM :) und was sind Vertexdeclarations?^^


---- EDiT------

EDEL ES GEHT! *überglücklich^^*

Aber wieso liegt das an der reihenfolge wie das in der Struktur sthet..

Lemming

Alter Hase

Beiträge: 550

Beruf: Schüler

  • Private Nachricht senden

8

26.11.2005, 20:32

die reihenfolge is mehr als wichtig.
directX muss ja jeden beliebigen vertex typ interpretieren können und hat als einzige strütze die FVFs. wenn in der struktur die members in falscher reihenfolge stehen interpretiert directX dann eben die textur koordinaten als farbe...

das S muss da nich stehen
Es gibt Probleme, die kann man nicht lösen.
Für alles andere gibt es C++...

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

9

26.11.2005, 20:48

@Lemming deine Aussage stimmt für die FVF, jedoch nicht für VertexDecl . VertexDecl ist die weiter Entwicklung und sieht so aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
D3DVERTEXELEMENT9 dwDecl3[] = 
{
    {0, 0,  D3DDECLTYPE_FLOAT3,   D3DDECLMETHOD_DEFAULT, 
                                      D3DDECLUSAGE_POSITION, 0},
    {0, 12, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, 
                                      D3DDECLUSAGE_COLOR, 0},
    {0, 16, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, 
                                      D3DDECLUSAGE_COLOR, 1},
    {1,  0, D3DDECLTYPE_FLOAT2,   D3DDECLMETHOD_DEFAULT, 
                                      D3DDECLUSAGE_TEXCOORD, 0},
    {2,  0, D3DDECLTYPE_FLOAT2,   D3DDECLMETHOD_DEFAULT, 
                                      D3DDECLUSAGE_TEXCOORD, 1},
    D3DDECL_END()
};


ein Bleistift. Wenn dich interessiert schau einfach in die Doku.
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.

Lemming

Alter Hase

Beiträge: 550

Beruf: Schüler

  • Private Nachricht senden

10

26.11.2005, 21:13

@Nox
mein aussage war nicht auf vertexdecl bezogen. ich hab mit denen bislang noch nichts gemacht.
aber ich werds mir mal anschaun
Es gibt Probleme, die kann man nicht lösen.
Für alles andere gibt es C++...

Werbeanzeige