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

Der Dude

Treue Seele

  • »Der Dude« ist der Autor dieses Themas

Beiträge: 73

Wohnort: Elleringhausen-City

Beruf: ITA

  • Private Nachricht senden

1

23.01.2005, 17:16

Texturen passend machen

Morgen,

bei den fliegenden Dreiecken habe ich ein kleines Prolbem. Ich möchte die Textur über das ganze Dreieck legen. Dieses wir foglender maßen gemacht:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
//Positionen festlegen

        g_aTriangle[iTriangle].SVertex[0].vPosition = tbVector3(0.0f,1.0f,0.0f);
        g_aTriangle[iTriangle].SVertex[1].vPosition = tbVector3( 1.0f, -1.0f, 0.0f);
        g_aTriangle[iTriangle].SVertex[2].vPosition = tbVector3(-1.0f, -1.0f, 0.0f);

        //Position der Texturen

        g_aTriangle[iTriangle].SVertex[0].vTexture = tbVector2(0.0f,1.0f);
        g_aTriangle[iTriangle].SVertex[1].vTexture = tbVector2(1.0f,-1.0f);
        g_aTriangle[iTriangle].SVertex[2].vTexture = tbVector2(-1.0f,-1.0f);


Fällt jemanden auf wieso die Textur 4 mal sehr klein und nicht einamal sehr groß auf dem Dreieck ist?

Hinzu wäre da noch eine andre Frage:
Wie muss ich mit Textur 1 regestieren stelle aber aktivierte Texturfläche 0? Müssten das nicht beides die gleichen Werte sein?

C-/C++-Quelltext

1
2
3
4
5
6
7
    if(FAILED(hResult = pD3D_Interface->SetFVF(D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1)))
    {
        MessageBox(NULL,"Das Vertexformat konnte nicht gesetzt werden","Fehler bei initScene",MB_OK);
        return (false);
    }

    pD3D_Interface->SetTexture(0, g_pTexture);


Wenn ich TEX0 angeben geht es nicht.


Freue mich wie immer über jede Antwort

Vielen Dank

Der Dude :)
"Wenn ich morgens doppelt so schnell über den Flur laufe, kann ich 2 Minuten länger schlaften!" - leider war es ein Irrtum.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

23.01.2005, 17:44

Bei Texturen ist (0, 0) die linke obere Ecke.
Du verwendest aber Koordinaten im Bereich von -1 bis +1.

Osram

Alter Hase

Beiträge: 889

Wohnort: Weissenthurm

Beruf: SW Entwickler

  • Private Nachricht senden

3

23.01.2005, 17:47

Mals Dir doch auf ein Stück Papier. Einfach ein Korrdinatensystem und die drei Punkte :
0,1
1,-1
-1,-1

Einmal liegt die Textur z.B. im Bereich von 0 bis 1 in beiden Richtungen. Von da ab ists gekachelt. Wenn Du das auf dem Papier hast, siehst Du sofort, dass das Dreieck 4 Kacheln anschneidet.
"Games are algorithmic entertainment."

Der Dude

Treue Seele

  • »Der Dude« ist der Autor dieses Themas

Beiträge: 73

Wohnort: Elleringhausen-City

Beruf: ITA

  • Private Nachricht senden

4

27.01.2005, 21:40

So bin leider erste jetzt dazu gekommen und tata es klappt leider nicht. Habs mir mal wie Osram meinte aufgezeichnet und bin zu folgenden Positionen gekomen, aber leider wir nur ca. ein 1/3(das obere Drittel) ausgefüllt der Rest ist schwarz.
Folgenden Angaben habe verwende ich:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
        //Positionen festlegen

        g_aTriangle[iTriangle].SVertex[0].vPosition = tbVector3(0.0f,1.0f,0.0f);
        g_aTriangle[iTriangle].SVertex[1].vPosition = tbVector3( 1.0f, -1.0f, 0.0f);
        g_aTriangle[iTriangle].SVertex[2].vPosition = tbVector3(-1.0f, -1.0f, 0.0f);

        //Position der Texturen

        g_aTriangle[iTriangle].SVertex[0].vTexture = tbVector2(0.0f,.05f);
        g_aTriangle[iTriangle].SVertex[1].vTexture = tbVector2(1.0f,1.0f);
        g_aTriangle[iTriangle].SVertex[2].vTexture = tbVector2(0.0f,1.0f);


Sieht von euch jemand den Fehler?

P.S. Ich glaube ich habs mal angesprochen weiß jemand wieso ich beim FVF die Textur 1 registriere aber zum Schluss doch die Schicht 0 freigebe?

Vielen Dank schonmal im voraus.

Der Dude :)
"Wenn ich morgens doppelt so schnell über den Flur laufe, kann ich 2 Minuten länger schlaften!" - leider war es ein Irrtum.

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

27.01.2005, 23:38

C-/C++-Quelltext

1
2
3
        //Position der Texturen 

        g_aTriangle[iTriangle].SVertex[0].vTexture = tbVector2(0.0f,.05f);
        ...


Das ist wohl nicht Ursprung des eigentlichen Problems, aber Du hast einen kleinen Tippfehler. Da steht nämlich .05f statt 0.5f ...
Der Compiler meckert nicht, weil das eine zulässige Schreibweise der Zahl 0.05f ist.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

28.01.2005, 17:18

Aber selbst dann würde es keinen Sinn machen.
Was er wirklich will, ist wahrscheinlich (0.5f, 0.0f) und nicht (0.0f, 0.5f).

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

28.01.2005, 18:44

du verwendest nicht zufällig eine nicht quadratische textur und lädst mit D3DXCreateTextureFromFile*(), ohne höhe und breite anzugeben!?

Der Dude

Treue Seele

  • »Der Dude« ist der Autor dieses Themas

Beiträge: 73

Wohnort: Elleringhausen-City

Beruf: ITA

  • Private Nachricht senden

8

28.01.2005, 20:02

Vielen Dank erstmal.
Es handelt sich um ein Rechteck 525 Pixel hoch und 700 Pixel breit. Das 0.05 habe ich geändert, aber leider liegt die Textur nach oben rechts verschoben? Ist dort jetzt noch ein Fehler oder muss das so ein? Eigentlich wollte ich nur das Rechteck auf das Dreieck legen. so das oben die mitte der Textur auch oben ist und unten links der Textur auch unten links auf dem Dreieck liegt und natürlich unten rechts auch unten rechts auf dem Dreieck liegt.
Weiß jemand wie das geht?

Vielen Dank nochmal im voraus

der tim


P.S.
An David: Nenn mich doch einfach Tim :)
"Wenn ich morgens doppelt so schnell über den Flur laufe, kann ich 2 Minuten länger schlaften!" - leider war es ein Irrtum.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

9

28.01.2005, 20:55

Hast Du's so gemacht, wie ich oben geschrieben habe?
Also (0.5, 0) anstatt (0, 0.5)?

Falls nein: Probier's mal so.
Falls ja: Zeig mal Deinen momentanen Code...

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

10

28.01.2005, 23:29

Zitat

Aber selbst dann würde es keinen Sinn machen.
Was er wirklich will, ist wahrscheinlich (0.5f, 0.0f) und nicht (0.0f, 0.5f).


Logisch! Mir ist nur .05f ins Auge gesprungen... :sleep:

Werbeanzeige