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

30.06.2009, 17:14

Verkleinerung von Texturen

Hallo Community
Neues Problem:
Ich habe mein Spielbildschirm:


(Link)


und hier ein Viereck(Tetris) das aber über den gesamten Bildschirm gerendert wird:


(Link)

Render Funktion von beiden Bildschirmen:

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

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

    // Links oben

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

    // Rechts unten

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

    // Rechts oben

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

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

    D3D->EndScene()


Ich will aber das das Dreieck nur einen kleinen Teil des Bildschirms einnimmt.
Was mache ich Falsch?

mfg

Fabian
Metal ist keine Musik sondern eine Religion.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

2

30.06.2009, 17:20

du musst dann schon die vertexdaten für dein quad verändern. du setzt es auf die bildschirmgröße:

C-/C++-Quelltext

1
2
3
4
5
6
7
    bVertex[0].vPosition = tbVector3(0.0f, D3D.GetScreenSize().y, 0.5f);
    // Links oben

    bVertex[1].vPosition = tbVector3(0.0f, 0.0f, 0.5f);
    // Rechts unten

    bVertex[2].vPosition = tbVector3(D3D.GetScreenSize().x, D3D.GetScreenSize().y, 0.5f);
    // Rechts oben

    bVertex[3].vPosition = tbVector3(D3D.GetScreenSize().x, 0.0f, 0.5f);


die größe der textur hat REIN GAR NICHTS mit der größe zu tun wie du sie auf dem bildschirm sehen wirst, das legst du ja mit deinen vertices fest! und wenn du die kleiner haben willst, setz sie auf die gewünschte größe. also anstatt ScreenSize().x auf 64 und ScreenSize().y auf 128 oder so, wie dirs in dem kram passt.

du solltest dir davids buch nochmal ganz genau durchlesen, du hast da einiges noch nicht verstanden ;)

3

30.06.2009, 17:36

Ein gutes Buch über DirectX von vorne bis hinten durcharbeiten würde helfen.
Es bringt einfach wirklich überhaupt nix, wenn man Dinge tuen will, von deren Hintergründen man keine Ahnung hat.
Lieber dumm fragen, als dumm bleiben!

Werbeanzeige