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

Lemming

Alter Hase

  • »Lemming« ist der Autor dieses Themas

Beiträge: 550

Beruf: Schüler

  • Private Nachricht senden

1

13.11.2005, 20:08

Fehler beim Rendern von Hintergrundbild

Hi Leutz,
ich hab nen Problem beim rendern einer Textur aufm Bildschirm, find aber den fehler einfach nich:

Hier erstmal das Vertexformat:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
struct SIMPLE_PICTURE_VERTEX
{
    tbVector3   vPosition;
    float       fRHW;
    tbColor     cColor;
    tbVector2   vTexture;
    static const unsigned long ulFVF;
};
const unsigned long SIMPLE_PICTURE_VERTEX::ulFVF=D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1;


Und hier das rendern

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
    SIMPLE_PICTURE_VERTEX aVertex[4];
    tbVector3 vScreen(tbDirect3D::Instance().GetScreenSize().x, tbDirect3D::Instance().GetScreenSize().y, 1.0f);
    // left bottom

    aVertex[0].vPosition= (m_vPos + tbVector3(0.0f, m_vSize.y, 0.0f)) * vScreen;
    aVertex[0].fRHW     = 1.0f;
    aVertex[0].cColor   = m_cColor;
    aVertex[0].vTexture = tbVector2( 0.0f,  1.0f);
    // left top

    aVertex[1].vPosition= (m_vPos) * vScreen;
    aVertex[1].fRHW     = 1.0f;
    aVertex[1].cColor   = m_cColor;
    aVertex[1].vTexture = tbVector2( 0.0f,  0.0f);
    // right bottom

    aVertex[2].vPosition= (m_vPos + tbVector3(m_vSize.x, m_vSize.y, 0.0f)) * vScreen;
    aVertex[2].fRHW     = 1.0f;
    aVertex[2].cColor   = m_cColor;
    aVertex[2].vTexture = tbVector2( 1.0f,  1.0f);
    // right top

    aVertex[3].vPosition= (m_vPos + tbVector3(m_vSize.x, 0.0f, 0.0f)) * vScreen;
    aVertex[3].fRHW     = 1.0f;
    aVertex[3].cColor   = m_cColor;
    aVertex[3].vTexture = tbVector2( 1.0f,  0.0f);

    tbDirect3D::Instance().SetFVF(SIMPLE_PICTURE_VERTEX::ulFVF);

    tbDirect3D::Instance().SetTexture(0, m_pTexture);
    tbDirect3D::Instance()->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, aVertex, sizeof(SIMPLE_PICTURE_VERTEX));

Zusätzliche Anmerkungen:
- Begin() und End() und Clear() hab ich nich vergessen.
- Ich benutze die TriBase Engine mit DX9
- render state D3DRS_ZENABLE = D3DZB_FALSE
- Zusätzlich wird ein Text gerendert, den sieht man ohne schwierigkeiten.
- clear füllt den backbuffer mit dunkel blau, da wo das bild sein sollte erscheint ein weinrot

ich find den fehler nich und bin langsam am verzweifeln... :crying:
freu mich auf eure antworten
Es gibt Probleme, die kann man nicht lösen.
Für alles andere gibt es C++...

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

13.11.2005, 20:35

Du darfst tbColor nicht in einer Vertexstruktur verwenden.
tbColor besteht aus 4 floats.
Direct3D erwartet Vertex-Farben als DWORD.
Also nimm DWORD.

Lemming

Alter Hase

  • »Lemming« ist der Autor dieses Themas

Beiträge: 550

Beruf: Schüler

  • Private Nachricht senden

3

13.11.2005, 21:58

daaaaaaanke....

ich mach diesen fehler immer wieder ich weiß auch nich wieso.
Es gibt Probleme, die kann man nicht lösen.
Für alles andere gibt es C++...

Anonymous

unregistriert

4

13.11.2005, 22:28

Vektoren, Farbstrukturen usw. haben alle nichts in einer Vertexstruktur zu suchen.

Lemming

Alter Hase

  • »Lemming« ist der Autor dieses Themas

Beiträge: 550

Beruf: Schüler

  • Private Nachricht senden

5

14.11.2005, 17:40

Zitat von »"nix da"«

Vektoren, Farbstrukturen usw. haben alle nichts in einer Vertexstruktur zu suchen.
was spricht denn bitte dagegen ???
ich finds einfach nervig mir da zig floats und irgendwelches anderes zeug reinzuhauen, wenns so doch genauso einfach geht. und im endeffekt is doch eh wurscht, was der compiler draus macht sieht ja eh anders aus....
und ich mein spätestens sobal ich 3 textur koordinaten drin hab und da dann anfangen darf mit u0 v0 u1 v1 ... und am besten dann zum teil noch volumetexturen reinkrieg oder so wird es mir einfach zu unübersichtlich!!

ich find so sachen wie:
vert.pos = tbVector3(...
vert.normal = tbVector3(...
vert.color = (D3DCOLOR)tbColor(...
einfach klasse
nur so als beispiel
Es gibt Probleme, die kann man nicht lösen.
Für alles andere gibt es C++...

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

14.11.2005, 19:10

Zitat von »"nix da"«

Vektoren, Farbstrukturen usw. haben alle nichts in einer Vertexstruktur zu suchen.

Komisch. Das scheinen die Programmierer von Microsoft wohl nicht zu wissen, denn in den DirectX-SDK-Samples selbst findet man Stellen wie:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
// A structure for our custom vertex type. We added texture coordinates

struct CUSTOMVERTEX
{
    D3DXVECTOR3 position; // The position

    D3DCOLOR    color;    // The color

#ifndef SHOW_HOW_TO_USE_TCI
    FLOAT       tu, tv;   // The texture coordinates

#endif
};


oder

C-/C++-Quelltext

1
2
3
4
5
6
7
8
struct SCREEN_VERTEX 
{
    D3DXVECTOR4 pos;
    DWORD       clr;
    D3DXVECTOR2 tex1;

    static const DWORD FVF;
};

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

14.11.2005, 20:36

Zitat von »"nix da"«

Vektoren, Farbstrukturen usw. haben alle nichts in einer Vertexstruktur zu suchen.

Was hat gehört denn sonst in so eine Vertexstruktur? Also, ich weiss wohl, wie Du das meinst, aber schreibst Du für die Koordinaten immer einzelne float-Werte in die Struktur?

Lemming

Alter Hase

  • »Lemming« ist der Autor dieses Themas

Beiträge: 550

Beruf: Schüler

  • Private Nachricht senden

8

19.11.2005, 18:35

So leid es mir tut, aber ich hab schon wieder nen Problem mit ner Textur als Hinter grund:

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
    BACKGROUND_VERTEX aVert[4];

    aVert[0].vPosition  = tbVector3 ( 0.0f,  tbDirect3D::Instance().GetScreenSize().y,  0.0f);
    aVert[1].vPosition  = tbVector3 ( 0.0f,  0.0f,  0.0f);
    aVert[2].vPosition  = tbVector3 ( tbDirect3D::Instance().GetScreenSize().x,  tbDirect3D::Instance().GetScreenSize().y,  0.0f);
    aVert[3].vPosition  = tbVector3 ( tbDirect3D::Instance().GetScreenSize().x,  0.0f,  0.0f);

    aVert[0].vTexture   = tbVector2 ( 0.0f,  1.0f);// lu

    aVert[1].vTexture   = tbVector2 ( 0.0f,  0.0f);// lo

    aVert[2].vTexture   = tbVector2 ( 1.0f,  1.0f);// ru

    aVert[3].vTexture   = tbVector2 ( 1.0f,  0.0f);// ro


    aVert[0].cColor     = (DWORD)tbColor( 0.1f);
    aVert[1].cColor     = (DWORD)tbColor( 1.0f);
    aVert[2].cColor     = (DWORD)tbColor( 1.0f);
    aVert[3].cColor     = (DWORD)tbColor( 1.0f);

    aVert[0].fRHW       = 1.0f;
    aVert[1].fRHW       = 1.0f;
    aVert[2].fRHW       = 1.0f;
    aVert[3].fRHW       = 1.0f;

    tbDirect3D::Instance().SetFVF(BACKGROUND_VERTEX::dwFVF);
    tbDirect3D::Instance().SetTexture(0, pTexture);
    tbDirect3D::Instance().SetRS(D3DRS_ZENABLE, D3DZB_FALSE);
    tbDirect3D::Instance().SetRS(D3DRS_CULLMODE, D3DCULL_NONE);
    tbDirect3D::Instance()->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, aVert, sizeof(BACKGROUND_VERTEX));

Warum zeigt mir das nicht die Textur an, die mit pTexture übergeben wird(habs ihm debugger nachgeprüft, die tex gibts)
und zweitens, warum haut mir der code meine maxframes von knapp 1000 batsch mich tot auf rund 350?!?!

Ich rall es einfach nicht drecks hintergründe da... :crying:
Es gibt Probleme, die kann man nicht lösen.
Für alles andere gibt es C++...

Lemming

Alter Hase

  • »Lemming« ist der Autor dieses Themas

Beiträge: 550

Beruf: Schüler

  • Private Nachricht senden

9

20.11.2005, 18:37

bitte helft mir....

ich krieg statt der textur nur ne blaue fläche.... :(
wenn ihr noch mehr code braucht ist kein thema
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

10

20.11.2005, 22:10

Muss denn die Eigenfarbe überhaupt sein? Ansonsten fällt mir auch nichts dazu ein(bin ziemlich müde ^_^)
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