dannz Member
Anmeldedatum: 23.02.2009 Beiträge: 1024 Wohnort: Harbergen
|
Verfasst am: 15.11.2009, 11:48 Titel: |
|
Geht bis jetzt echt genau in die Richtung von Bethsoftfan
Aber sehr schöner Artikel, hab ihn mal durchgelesen, werds bei Gelegenheit nachbauen  _________________ dannz.net
dannz media Blog
noutline |
|
| Nach oben |
|

|
Monsaic Member
Anmeldedatum: 20.08.2008 Beiträge: 203 Wohnort: Gelsenkirchen
|
Verfasst 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 |
|

|
Glatzemann Member
Anmeldedatum: 24.07.2009 Beiträge: 3327 Wohnort: Leverkusen
|
Verfasst 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 |
|

|
Ganda Member
Anmeldedatum: 29.10.2009 Beiträge: 521 Wohnort: Germany, NRW
|
Verfasst 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 |
|

|
Glatzemann Member
Anmeldedatum: 24.07.2009 Beiträge: 3327 Wohnort: Leverkusen
|
Verfasst 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 Ist klar warum das so ist, oder brauchst du ne Erklärung? _________________ Twitter · YouTube · MotoX Racers
|
|
| Nach oben |
|

|
Ganda Member
Anmeldedatum: 29.10.2009 Beiträge: 521 Wohnort: Germany, NRW
|
Verfasst 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 ).
Gruß Ganda
Edith sagt: Danke für den Gedankenanstoß!! _________________ Mein Gameblog! |
|
| Nach oben |
|

|
JeReT Member
Anmeldedatum: 19.07.2007 Beiträge: 1566 Wohnort: µnchen
|
Verfasst 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! _________________
Shape's |
|
| Nach oben |
|

|
Glatzemann Member
Anmeldedatum: 24.07.2009 Beiträge: 3327 Wohnort: Leverkusen
|
Verfasst 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 |
|

|
JeReT Member
Anmeldedatum: 19.07.2007 Beiträge: 1566 Wohnort: µnchen
|
Verfasst am: 19.07.2010, 10:28 Titel: |
|
das stimmt nicht, sorry. _________________
Shape's |
|
| Nach oben |
|

|
Glatzemann Member
Anmeldedatum: 24.07.2009 Beiträge: 3327 Wohnort: Leverkusen
|
Verfasst 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 |
|

|
JeReT Member
Anmeldedatum: 19.07.2007 Beiträge: 1566 Wohnort: µnchen
|
Verfasst 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. _________________
Shape's |
|
| Nach oben |
|

|
Glatzemann Member
Anmeldedatum: 24.07.2009 Beiträge: 3327 Wohnort: Leverkusen
|
Verfasst 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"  _________________ Twitter · YouTube · MotoX Racers
|
|
| Nach oben |
|

|
Nilres Member
Anmeldedatum: 03.04.2009 Beiträge: 328
|
Verfasst 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 |
|

|
|