ProfilProfil
 Registrieren
 Login
Bild der WocheBild der Woche

(von Tiro)
Kommentare (8)
*****

Weitere
User onlineBenutzer online
Gäste online: 6
Mitglieder online: Glatzemann, Huehnerschaender, mrboese
Registrierte Mitglieder: 1043
Neustes Mitglied: AliBaba

3D mit XNA - Teil 2: Index Buffer und Texturen

Neue Antwort erstellen

Kommentare zu 3D mit XNA - Teil 2: Index Buffer und Texturen

Kommentare zum Artikel 3D mit XNA - Teil 2: Index Buffer und Texturen.
 

 

Autor Nachricht
 
 
dannz
Member


Anmeldedatum: 23.02.2009
Beiträge: 1024
Wohnort: Harbergen

Antworten mit Zitat
BeitragVerfasst am: 15.11.2009, 11:48    Titel:

Geht bis jetzt echt genau in die Richtung von Bethsoftfan Wink
Aber sehr schöner Artikel, hab ihn mal durchgelesen, werds bei Gelegenheit nachbauen Smile
_________________
dannz.net
dannz media Blog
noutline
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen ICQ-Nummer


Monsaic
Member


Anmeldedatum: 20.08.2008
Beiträge: 203
Wohnort: Gelsenkirchen

Antworten mit Zitat
BeitragVerfasst am: 14.06.2010, 01:07    Titel:

Hi!
Kann ich die Vertices die ich in den Vertexbuffer gepackt habe zur Laufzeit nachträglich verändern? Also die Reihenfolge im Indexbuffer kann ja gleich bleiben, bräuchte nur die Funktion nachträglich die Vertexinformationen umzuschreiben.
Würde mir das Debugging echt enorm erleichtern.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden ICQ-Nummer


Glatzemann
Member


Anmeldedatum: 24.07.2009
Beiträge: 3327
Wohnort: Leverkusen

Antworten mit Zitat
BeitragVerfasst am: 14.06.2010, 08:12    Titel:

Ja kannst du, mit .SetData<>. Allerdings ist das im Vergleich zu einem statischen Vertexbuffer deutlich langsamer...
_________________
Twitter · YouTube · MotoX Racers

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen


Ganda
Member


Anmeldedatum: 29.10.2009
Beiträge: 521
Wohnort: Germany, NRW

Antworten mit Zitat
BeitragVerfasst am: 15.07.2010, 20:27    Titel:

Ich habe auch 4 Vertices, mache daraus aber ein Tetraeder.
Wenn ich jetzt jede Tetraederfläche mit einer anderen Textur belegen will, geht das nicht, weil ich ja nur 4 Vertices mit zugehörigen Texturkoordinaten belegen kann.
Selbst wenn ich nur eine Textur auflegen will gibt es schon Chaos, da die 4. Ecke ja irgendwie nicht passt.
Kann ich da überhaupt mit Indexbuffer arbeiten?

Wahrscheinlich läuft es wieder auf einen eigenen Shader hinaus, der die Texturdaten alle separat bekommt!?

Gruß Ganda
_________________
Mein Gameblog!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen


Glatzemann
Member


Anmeldedatum: 24.07.2009
Beiträge: 3327
Wohnort: Leverkusen

Antworten mit Zitat
BeitragVerfasst am: 18.07.2010, 09:06    Titel:

Du musst einfach 5 Vertices (oder mehr) nehmen, wenn du mit 4 nicht auskommst. Zwei davon legst du an die gleiche Stelle, aber mit unterschiedlichen UV-Koordinaten. Das ist bei einigen Objekten notwendig.

Schau mal nach UV-Unwrapping, da findest du mehr Informationen zu dem Thema...


EDIT: Achso vergessen Smile Ist klar warum das so ist, oder brauchst du ne Erklärung?
_________________
Twitter · YouTube · MotoX Racers

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen


Ganda
Member


Anmeldedatum: 29.10.2009
Beiträge: 521
Wohnort: Germany, NRW

Antworten mit Zitat
BeitragVerfasst am: 18.07.2010, 09:34    Titel:

Stimmt, Ihm ist es ja egal, ob er (in meinem Fall 3 mal) die selben Vertices bekommt. ...merkt er ja gar nicht.
Aber der Spareffekt durch Indexing ist dann natürlich gering.
Da ich aber sowieso über (Soft-)Instancing mehrere Tetraeder erzeugen will, die aus einer Textur jeweils unterschiedliche Abschnitte "aufgeklebt" bekommen, komme ich an einem eigenen Shader sowieso nicht vorbei (habe ich schon Smile ).

Gruß Ganda

Edith sagt: Danke für den Gedankenanstoß!!
_________________
Mein Gameblog!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen


JeReT
Member


Anmeldedatum: 19.07.2007
Beiträge: 1566
Wohnort: µnchen

Antworten mit Zitat
BeitragVerfasst am: 18.07.2010, 14:17    Titel:

Glatzemann hat Folgendes geschrieben:
Du musst einfach 5 Vertices (oder mehr) nehmen, wenn du mit 4 nicht auskommst. Zwei davon legst du an die gleiche Stelle, aber mit unterschiedlichen UV-Koordinaten. Das ist bei einigen Objekten notwendig.


Das muss doch anders gehen!
Ich weiß zwar selber grad nicht wie, aber in 3D-Programmen braucht man nicht mehrere Vertices um ein und den selben vertex an mehreren Stellen in der UV-Map zu haben.
Wenn XNA das nicht auch unterstützen würde, wär das wirklich ne schande!
_________________
Idea Shape's
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen Yahoo Messenger MSN Messenger ICQ-Nummer


Glatzemann
Member


Anmeldedatum: 24.07.2009
Beiträge: 3327
Wohnort: Leverkusen

Antworten mit Zitat
BeitragVerfasst am: 18.07.2010, 14:55    Titel:

Das 3D-Programm muss das ja nicht unbedingt nach außen transportieren. Du brauchst halt mehr als 4 Koordinaten in der UV-Map und jeder Vertex hat je Textur eine UV-Koordinate.
_________________
Twitter · YouTube · MotoX Racers

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen


JeReT
Member


Anmeldedatum: 19.07.2007
Beiträge: 1566
Wohnort: µnchen

Antworten mit Zitat
BeitragVerfasst am: 19.07.2010, 10:28    Titel:

das stimmt nicht, sorry.
_________________
Idea Shape's
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen Yahoo Messenger MSN Messenger ICQ-Nummer


Glatzemann
Member


Anmeldedatum: 24.07.2009
Beiträge: 3327
Wohnort: Leverkusen

Antworten mit Zitat
BeitragVerfasst am: 19.07.2010, 11:03    Titel:

Dann begründe es doch bitte und schreibe, was an meiner Aussage nicht stimmt.

Mal von Multi-Texturing mit mehreren Texturen und "speziellen" Texturierungsarten abgesehen, ist es üblich das jeder Vertex eine Texturkoordinate hat. Diese entspricht einer Position in der Textur. So ist das zumindest bei Echtzeit-3D-Anwendungen und sowohl in DirectX, als auch in OpenGL "üblich".
_________________
Twitter · YouTube · MotoX Racers

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen


JeReT
Member


Anmeldedatum: 19.07.2007
Beiträge: 1566
Wohnort: µnchen

Antworten mit Zitat
BeitragVerfasst am: 19.07.2010, 11:37    Titel:

leider hab ich das noch nie in xna programmiert.
aber wie schon geschrieben, kann man das in 3D-anwendungen überall so unwrappen, dass ein vertex an mehreren stellen in der Textur definiert sein kann.

Beispiel: abwicklung eines würfels:
Code:
    +---+
    |   |
+---+---+---+---+
|   |   |   |   |
+---+---+---+---+
    |   |
    +---+

Im 3D-Programm hat der Würfel genau 8 vertices. einige von denen sind aber 3 mal in den Texturkoordinaten definiert.
Wenn das DirectX und OpenGL also nicht kann, hieße das ja, dass den ganzen Modellen beim laden noch zusätzliche Vertices hinzugefügt werden würden.
_________________
Idea Shape's
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen Yahoo Messenger MSN Messenger ICQ-Nummer


Glatzemann
Member


Anmeldedatum: 24.07.2009
Beiträge: 3327
Wohnort: Leverkusen

Antworten mit Zitat
BeitragVerfasst am: 19.07.2010, 11:50    Titel:

Ja, daß stimmt, im 3D-Programm hat der Würfel nur 8 Vertices, es gibt aber 14 UV-Koordinaten. Ich wollte mit meinem Post zumindest ausdrücken, daß genau das vom 3D-Programm sicherlich intern gehandhabt wird. Es gibt also tatsächlich mehr Vertices, als eigentlich "angezeigt" werden.

In Blender ist es so, daß man einen speziellen Arbeitsschritt "UV-Unwrap" machen muss. Dieser ermittelt zusammenhängende Flächen in einem 3D-Objekt und versucht diese möglichst Verzerrungsfrei auf eine Textur (bzw. eine rechteckige Fläche) zu legen. Ich vermute, daß genau in diesem Arbeitsschritt ein Mapping zwischen Vertices und UV-Koordinaten hergestellt wird und dies hier keine 1:1 Beziehung sein muss. Vermutlich wird dies in anderen 3D-Programmen ähnlich gehandhabt.

Es wäre ja auch aus "Designer-Sicht" schwer zu verstehen, daß ich nicht einfach eine Textur um den Würfel wickeln kann und dafür einzelne Vertices doppelt anlegen muß. Das wäre nicht intuitiv. Für ein 3D-Programm, in dem nicht in Echtzeit gerendert werden muß, kann man sich diesen Luxus aber auch leisten.


Ich denke, es gäbe eine Lösung, die aber sowohl vom Aufwand, als auch von der Geschwindigkeit nicht unbedingt Sinn macht: Mann könnte die 4 Vertices des Tetraeders (oder die 8 des Würfels) im ersten Vertex-Stream binden. In einem weiteren Vertex-Stream bindet man nun die UV-Koordinaten. Durch geschicktes Setzen der Vertex-Strides ist es nun möglich, daß einzelne Vertices "mehrfach verwendet" werden um wieder eine 1:1 Beziehung zu den UV-Koordinaten herzustellen. Im Grunde wäre das das gleiche Prinzip wie bei Instancing: Anstatt gesamte Meshes mit zusätzlichen Positionen zu instanzieren, würden hierbei einzelne Vertices mit zusätzlichen UV-Koordinaten instanziert.


Performancetechnisch ist es aber sicherlich besser in einem schlimmen Fall 100% mehr Vertices zu rendern, als mit irgendwelcher Shader-Magic oder Vertex-Streams was zu "zaubern" Wink
_________________
Twitter · YouTube · MotoX Racers

Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen


Nilres
Member


Anmeldedatum: 03.04.2009
Beiträge: 328

Antworten mit Zitat
BeitragVerfasst am: 19.07.2010, 11:56    Titel:

Genau das hatte ich hier mal gefragt. Dort wird das Bestätigt was Glatzemann bereits gesagt hat.

Grüße
Nils
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden


Beiträge der letzten Zeit anzeigen:   
 
Neue Antwort erstellen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de