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

Stefan

Alter Hase

  • »Stefan« ist der Autor dieses Themas

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

1

03.08.2003, 17:41

Texturkoordinaten

Hallo!

Ich habe leider schon wieder ein Problem, diesmal betrifft es die Texturkoordinaten! Ich möchte im Beispielsprogramm 'Vertex -und Index Buffer' den Würfeln Texturen geben. Ich besitze 8 Vertizes:

Zitat

pVertices[0].vPosition = tbVector3(-1.0f, 1.0f, -1.0f);
pVertices[1].vPosition = tbVector3(-1.0f, 1.0f, 1.0f);
pVertices[2].vPosition = tbVector3( 1.0f, 1.0f, 1.0f);
pVertices[3].vPosition = tbVector3( 1.0f, 1.0f, -1.0f);
pVertices[4].vPosition = tbVector3(-1.0f, -1.0f, -1.0f);
pVertices[5].vPosition = tbVector3(-1.0f, -1.0f, 1.0f);
pVertices[6].vPosition = tbVector3( 1.0f, -1.0f, 1.0f);
pVertices[7].vPosition = tbVector3( 1.0f, -1.0f, -1.0f);


Nun möchte ich auf allen sechs Seiten eine Textur darauf rendern!

Zitat

pVertices[0].vTexture = tbVector2(0.0f, 1.0f);
.......
...


Leider aber geht es sich bei mir nie aus, dass es auf allen Seiten so dargestellt wird, dass die gesammte Textur schon über die Fläche gelegt wird! Geht das mit 8 Vertizes überhaupt? Wenn ja, wie müssen die Texturkoordinaten gesetzt werden?

Danke

Anonymous

unregistriert

2

03.08.2003, 18:08

nö geht nicht

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

03.08.2003, 18:46

Eventuell könnte es gehen, wenn Du den Würfel auf der Textur "aufklappst"... aber ich weiß es nicht genau. Ansonsten geht es in jedem Fall mit 4 Vertizes pro Fläche.

Stefan

Alter Hase

  • »Stefan« ist der Autor dieses Themas

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

4

03.08.2003, 22:36

ok, danke, ich habe jetzt einfach 4 Vertizes pro Fläche verwendet! Wenn ich jetzt schon keinen Speicher mit dem Vertex- und Index Buffer gespart habe, habe ich dafür etwas an Rechenzeit gewonnen??
Gibt es ausserdem eine Möglichkeit nun dem Würfel eine bestimmte Textur für den Boden zu geben und der Rest bekommt eine Andere??

Die Render-Funktion sieh nämlich so aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    // Zuerst den Vertex- und den Index-Buffer als Datenquelle aktivieren.
    g_pD3DDevice->SetStreamSource(0, g_pVertexBuffer, 0, sizeof(SVertex));
    g_pD3DDevice->SetIndices(g_pIndexBuffer);

    // Zeichnen!
    hResult = g_pD3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,    // Dreiecksliste
                                                 0,                     // Basisvertexindex
                                                 0,                     // Der kleinste Index
                                                 g_iNumCubes * 8,       // Diff. zw. größtem u. kleinstem Index
                                                 0,                     // Von Anfang an zeichnen
                                                 g_iNumCubes * 12);     // 12 Dreiecke pro Würfel
    if(FAILED(hResult))
    {
        // Fehler beim Zeichnen!
        TB_ERROR_DIRECTX("g_pD3DDevice->DrawIndexedPrimitive", hResult, TB_STOP);
    }

5

04.08.2003, 03:18

Zitat

Gibt es ausserdem eine Möglichkeit nun dem Würfel eine bestimmte Textur für den Boden zu geben und der Rest bekommt eine Andere??
Klar geht das. Allerdings sind das dann zwei Renderschritte mit dem selben Vertex- und Indexbuffer. Bei DrawIndexedPrimitive gibst du ja an welche Indices benutzt werden sollen. Angenommen dein Boden wird durch die letzten vier Vertice beschrieben. Dann setzt du die Textur für die 5 Seiten und Renderst dann mittels DrawIndexedPrimitive die ersten 20 Vertice. Dann setzt du deine Bodentextur und renderst die letzten vier Vertice.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Stefan

Alter Hase

  • »Stefan« ist der Autor dieses Themas

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

6

04.08.2003, 11:35

funktioniert wunderbar, danke :)

Anonymous

unregistriert

7

04.08.2003, 14:07

Texturkoordinaten

Übrigens, schön, dass es das Forum gibt. Und das Buch erst. Hat mich ziemlich aus der Anfänger-Verzweiflung gerettet ;-)

Ich hatte eigentlich das gleiche Problem und wollte aber nicht beim Rendern die Texturen "händisch" umschalten.
Wie macht es denn die DX-Mesh-Schnittstelle?
Dort stehen im x-File die Vertices, dann die faces und dann die Materialien mit evtl. Texturen. Die faces haben den Verweis auf die Materialien.
Das ist doch das, was auch Stefan suchte(?)
... für bestimmte Oberflächen bestimmte Texturen zuordnen...

Ich kann im x-file nirgendwo Texturkordinaten sehen(?)
Wie entscheidet die Mesh-Schnittstelle, welche Texturen u. Materialien für welches Dreieck verwendet werden?

Danke
Jens

8

04.08.2003, 17:14

Ich kenne zwar nicht dein X-File, aber ich denke es hat folgenden Aufbau. Jeder Vertex wird genau einmal gespeichert. Dann kommen die Faces. Sie sind die Indices die in den Indexbuffer kommen. Wenn die Materialien den Faces zugeordnet sind ist es doch kein Problem mehr die Materialien und damit auch die Texturen jedem Vertex zu zuordnen.

Das in dem X-File keine Texturkoordinaten gespeichert sind, hat man dem Modell wohl auch keine Spendiert ;)
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Anonymous

unregistriert

9

04.08.2003, 18:58

Texturkoordinaten

Hi DragonMaster,
danke erst mal.
Ja, Du hast Recht, in dem X-File, welches ich mir angesehen habe, wurden wirklich keine Textur-Koordinaten spendiert.
Und die Sache mit den Indices leuchtet mir ein. Die Vertices kann man wunderbar mit den Indices in Verbindung bringen. Dazu sind sie auch da...
Aber z. B. folgendes (einfacher Würfel):

Vertices
count x y z
8 -2 2 -2
2 2 -2
2 -2 -2
-2 -2 -2
-2 2 2
2 2 2
2 -2 2
-2 -2 2

Das ist ein Toller Würfel, dessen Vertices alle von außen in Uhrzeigerrichtung engeordnet sind.
Hier die Indices:
Indices (Dreiecke indizieren)
count index index index material
12 0 1 2 0
3 0 2 1
1 5 6 0
2 1 6 1
5 4 7 0
6 5 7
5 4 7
6 5 7
4 0 3 1
7 4 3
4 5 1
0 4 1
2 6 7
3 2 7

Ich wollte nun die Vertices, deren Indices mit Material versehen sind dem entsprechenden Material (incl. enthaltener Textur) zuordnen.
Damit kann ich z. B. den Vertices (-2 2 -2; 2 2 -2; 2 -2 -2) des ersten Index (0 1 2) das Material 0 zuordnen. Wie ist es aber mit den Texturkoordinaten? in der Vertexstruktur ist nur ein Koordinatenpar für Texturen vorhanden (weil kein Multitexturig...), aber ein Vertex (Eckpunkt des Würfels) eines Würfels ist ja Teil von 3 (nein 6!) Dreiecken. Und wo sollen die Texturkoordinaten des Vertex, der die 6 Dreiecke verbindet, hinterlassen werden? Muss ich etwa wirklich für jedes Quadrat des Würfels eigene Vertices anlegen (also mehrfach gleiche)???
Danke nochmal.
Jens

10

04.08.2003, 19:22

Der Würfel ist so ein Spezial Teil. Bis jetzt ist von uns noch keinem gelungen die Texturkoordinaten passend zu legen, das man den Würfel nur mit 8 Vertice beschreiben kann. Dazu gibt es hier auch irgendwo einen Thread.

Es müssen nicht alle Vertice doppelt vorhanden sein. Aber der ein oder andere muss doppelt sein, damit die Texturen auch alle Korrekt auf den Würfel gelegt werden.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Werbeanzeige