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

28.06.2009, 18:13

Vierecke in eine *.jpg laden

Ich habe mir bei meinem Tetris spiel eine .jpg mit dem Spielfeld erstellt. Jetzt will ich dort nur ein Viereck hineinrendern aber das kommt dann da bei raus:

(Link)

kann man überhaupt Vierecke oder sonstige Formen in jpg's rendern?
Metal ist keine Musik sondern eine Religion.

2

28.06.2009, 18:16

Also zuersteinmal hat das rein gar nix mit jpegs zu tun, die Daten in der Grafikkarte haben alle das selbe Format (gut sie können auch komprimiert sein, aber der Einfachheit halber sind alle Grafiken erstmal gelich).
normalerweise renderst du auch nix in eine Grafik, sondern verschiedene Grafiken nacheinander auf den Bildschirm. Was du also über den Hintergrund renderst hat wird in keinsterweise durch den Hintergrund limitiert.
Deine Fehlerbeschreibung ist auch äußerst knapp, ein wenig Code wäre schon gut, und auch wenn man mal genau wüsste, was du willst, was du gemacht hast, und was genau daran jetzt falsch ist.
Lieber dumm fragen, als dumm bleiben!

3

28.06.2009, 18:54

Also:
Ich habe mir ein Spielfeld erstellt(siehe oben) und dann wollte ich erstmal einfach so ein Dreieck auf das Spielfeld bringen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
//Dreieck

bVertex[0].vPosition = tbVector3(0.0f,1.0f,0.0f);
bVertex[0].Color     = tbColor(0.0f,0.0f,0.0f);
bVertex[1].vPosition = tbVector3(1.0f,-1.0f,0.0f);
bVertex[1].Color     = tbColor(0.0f,0.0f,0.0f);
bVertex[2].vPosition = tbVector3(-1.0,-1.0f,0.0f);
bVertex[2].Color     = tbColor(0.0f,0.0f,0.0f);

//Hintergrund

D3D->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, aVertex, sizeof(SVertex));
//Dreieck

D3D->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,1,bVertex,sizeof(SVertex));
Metal ist keine Musik sondern eine Religion.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

4

28.06.2009, 19:28

set die farbe doch mal spassenshalber statt

C-/C++-Quelltext

1
tbColor(0,0,0);


auf

C-/C++-Quelltext

1
tbColor(1,1,1);

5

28.06.2009, 20:02

Resultat siehe in meinem ersten Post
Metal ist keine Musik sondern eine Religion.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

6

28.06.2009, 20:20

verwendest du dasselbe fvf/vertexdeclaration für beide rendercalls? wenn ja, hast du beim zweiten die textur gewechselt? renderst du vortransformiert oder nicht? etwas mehr infos würden weiterhelfen^^

7

28.06.2009, 21:01

ja ich verwende für beide das selbe FVF. Beim zweiten verwende ich keine Textur, sondern mache es nach dem Prinzip "Das erste Dreieck".
Hier mein Kompletter Code(Render Funktion für den Bildschirm im Spiel):

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
SBackgroundVertex aVertex[4];
    SBackgroundVertex bVertex[5];

    // Puffer leeren und Szene beginnen

    GameLoad();
    tbDirect3D& D3D = tbDirect3D::Instance();
    D3D->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, tbColor(0.0f, 1.0f, 0.0f), 1.0f, 0);
    D3D->BeginScene();

    // ------------------------------------------------------------------

    D3D.SetFVF(SVertex::dwFVF);
    D3D.SetTexture(0, m_pGame);
    D3D.SetRS(D3DRS_ZENABLE, D3DZB_FALSE);
    // Die vier Vertizes des Hintergrundbilds erstellen (Rechteck)

    // Links unten

    aVertex[0].vPosition = tbVector3(0.0f, D3D.GetScreenSize().y, 0.5f);
    aVertex[0].fRHW = 1.0f;
    aVertex[0].Color = tbColor(0.4f, 0.4f, 0.4f, 0.5f);
    aVertex[0].vTex0 = tbVector2(0.0f, 1.0f);

    // Links oben

    aVertex[1].vPosition = tbVector3(0.0f, 0.0f, 0.5f);
    aVertex[1].fRHW = 1.0f;
    aVertex[1].Color = tbColor(0.4f, 0.4f, 0.4f, 0.5f);
    aVertex[1].vTex0 = tbVector2(0.0f, 0.0f);

    // Rechts unten

    aVertex[2].vPosition = tbVector3(D3D.GetScreenSize().x, D3D.GetScreenSize().y, 0.5f);
    aVertex[2].fRHW = 1.0f;
    aVertex[2].Color = tbColor(0.4f, 0.4f, 0.4f, 0.5f);
    aVertex[2].vTex0 = tbVector2(1.0f, 1.0f);

    // Rechts oben

    aVertex[3].vPosition = tbVector3(D3D.GetScreenSize().x, 0.0f, 0.5f);
    aVertex[3].fRHW = 1.0f;
    aVertex[3].Color = tbColor(0.4f, 0.4f, 0.4f, 0.5f);
    aVertex[3].vTex0 = tbVector2(1.0f, 0.0f);

    D3D->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, aVertex, sizeof(SVertex));

    bVertex[0].vPosition = tbVector3(0.0f,1.0f,0.0f);
    bVertex[0].Color     = tbColor(1.0f,1.0f,1.0f);
    bVertex[1].vPosition = tbVector3(1.0f,-1.0f,0.0f);
    bVertex[1].Color     = tbColor(1.0f,1.0f,1.0f);
    bVertex[2].vPosition = tbVector3(-1.0,-1.0f,0.0f);
    bVertex[2].Color     = tbColor(1.0f,1.0f,1.0f);

    D3D->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,1,bVertex,sizeof(SVertex));

    D3D->EndScene();

    return TB_OK;
Metal ist keine Musik sondern eine Religion.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

8

29.06.2009, 16:44

wenn du mit demselben FVF arbeitest dann erwartet der auch eine textur. du wechselst sie nicht und daher wird quasi dasselbe darübergemappt. verwende ein anderes FVF.

ausserdem arbeitest du bei vortransformierten mit bildschirmkoordinaten, was du beim hintegrund gemacht hast, aber beim dreieck nicht, das ist 2 pixel hoch. ausserdem setzt du beim 2. gar nich die texturkoordinaten, das muss schiefgehen :D

du kannst da nicht einfach zusammenklatschen^^

Werbeanzeige