Seite 1 von 2

3D - verschiedene Texturen auf Mesh legen

Verfasst: 04.02.2010 09:06
von Hoessi666
Hi!

Ist es irgendwie möglich in der Ogre-Engine von PB ein großes Mesh für z.b einen Level mit verschiedenen Texturen zu belegen?

Alleine für Boden, Decke und Wände bräuchte man 3 Texturen, mit ein bischen Abwechslung entsprechend mehr.

Bei kleineren Modellen kann man wohl über die u-/v-Koordinaten einen Teil der Textur "wiedergeben" (wenn man vorher alle benötigten Texturen in eine große gepackt hat). Aber nicht jede Graka wird mit 8192x8192 oder gar größeren Texturen fertig, oder?
Selbst wenn, wie würde man dann eine "Kachelung" der Textur auf einem Mesh hinkriegen? Be einer Einzeltextur würden Werte grösser als 1 so funktionieren (z.B. eine 2 würde die Textur zweimal in Höhe oder Breite auf das Objekt legen), die u-/v-Koordinaten wären aber jetzt doch genutzt um eine Einzeltextur aus der "Großen" zu ziehen...
Oder sehe ich das falsch?

Auf der Ogre-Website ist etwas von SubMeshes zu lesen, die wohl ähnlich wie die Surfaces von Blitz3D Teile eines Meshes definieren, die dann mit anderen Texturen belegt werden können. Gibt es so eine Funktion auch in PB-Ogre (In der .dll scheint nix drin zu sein, hatte sie mal ausgelesen)? Vielleicht über eine undokumentierte Funktionsweise bei SetMeshData?

Irgendwie muss so was doch möglich sein...?!

Re: 3D - verschiedene Texturen auf Mesh legen

Verfasst: 04.02.2010 12:06
von dllfreak2001
Also in Milkshape konnte man das wie bei einem leveleditor machen

Da hatte mal meine Rakete 4 verschiedene Texturdateien.
Soweit ich weiß standen diese auch in der Materialdatei des Models.

Allerdings die Models sind als Level nur bedingt brauchbar, weil immer alles gerendert wird. Ich würde eine Welt aus vielen verschiedenen Entitys bauen die ich dann per Routine selbst ausblenden kann.

Re: 3D - verschiedene Texturen auf Mesh legen

Verfasst: 04.02.2010 12:35
von Hoessi666
Habe mit PB-Ogre noch nix gemacht, deswegen frage ich jetzt mal dumm:
dllfreak2001 hat geschrieben:Also in Milkshape konnte man das wie bei einem leveleditor machen
Allerdings die Models sind als Level nur bedingt brauchbar, weil immer alles gerendert wird. Ich würde eine Welt aus vielen verschiedenen Entitys bauen die ich dann per Routine selbst ausblenden kann.
Werden bei PB die Entities ausserhalb der CameraRange nicht automatisch ausgeblendet.. sprich: nicht gezeichnet?

Ansonsten: Sind die Material-Dateien für Ogre die Lösung für meine Frage? Ich hatte die bisher so interpretiert, dass damit nur komplexere Materialien für Bump-Mapping, Normal-Mapping usw. erstellt werden können...

Re: 3D - verschiedene Texturen auf Mesh legen

Verfasst: 04.02.2010 12:43
von DarkDragon
>> Werden bei PB die Entities ausserhalb der CameraRange nicht automatisch ausgeblendet.. sprich: nicht gezeichnet?
Kann man ausprobieren. Soweit ich weiß ist das aber wie fast überall nur Entityweise und nicht partiell.

>> Ansonsten: Sind die Material-Dateien für Ogre die Lösung für meine Frage? Ich hatte die bisher so interpretiert, dass damit nur komplexere Materialien für Bump-Mapping, Normal-Mapping usw. erstellt werden können...
Damit ist noch viel mehr möglich. Aber vielleicht erfüllt AddMaterialLayer schon deine Wünsche.

Re: 3D - verschiedene Texturen auf Mesh legen

Verfasst: 04.02.2010 14:27
von Hoessi666
DarkDragon hat geschrieben:>> Werden bei PB die Entities ausserhalb der CameraRange nicht automatisch ausgeblendet.. sprich: nicht gezeichnet?
Kann man ausprobieren. Soweit ich weiß ist das aber wie fast überall nur Entityweise und nicht partiell.

>> Ansonsten: Sind die Material-Dateien für Ogre die Lösung für meine Frage? Ich hatte die bisher so interpretiert, dass damit nur komplexere Materialien für Bump-Mapping, Normal-Mapping usw. erstellt werden können...
Damit ist noch viel mehr möglich. Aber vielleicht erfüllt AddMaterialLayer schon deine Wünsche.
Zu 1: Das ist wirklich bei den meisten Engines/Sprachen, die ich kenne so. Würde aber reichen... Der Level wir halt komplett dargestellt; Hebel, Objekte, Türen extra...

Zu 2: Ich glaube, da hast Du mich mißverstanden...
Ich will keine verschiedenen Schichten von Texturen übereinander haben (dafür würde AddMateialLayer reichen), sondern der Level besteht ja aus mehreren Texturen (mehrere Böden, Decken, Wände...).
Wie kann man in PB das hinkriegen: also SetMeshData für Vertices, Triangles etc. und dann an den gewollten Stellen die entsprechenden Texturen (nebeneinander, nicht übereinander, sonst sähe ja der ganze Level gleich aus...).

Die Level sollen nicht mit exorbitanten Polygonzahlen protzen, sondern eher oldschoolig rüberkommen á la Rise of the Triad, Doom, Quake 1 und aus Standard-Wänden, -Decken, -Rampen usw zur Laufzeit (also beim Start des Levels) erstellt werden.
Die Daten dafür würden aus einem File gelesen und dann die entsperchenden Aufrufe zur Erstellung in der 3D-Welt starten.

Wenn das mit PB-Ogre so ohne weiteres nicht drin ist, welche Engines gäbe es denn, die das können (mal mit Ausnahme vom B3D SDK)?

Re: 3D - verschiedene Texturen auf Mesh legen

Verfasst: 04.02.2010 17:32
von DarkDragon
Hoessi666 hat geschrieben:Zu 1: Das ist wirklich bei den meisten Engines/Sprachen, die ich kenne so. Würde aber reichen... Der Level wir halt komplett dargestellt; Hebel, Objekte, Türen extra...
Ja.
Hoessi666 hat geschrieben:Zu 2: Ich glaube, da hast Du mich mißverstanden...
Ich will keine verschiedenen Schichten von Texturen übereinander haben (dafür würde AddMateialLayer reichen), sondern der Level besteht ja aus mehreren Texturen (mehrere Böden, Decken, Wände...).
Wie kann man in PB das hinkriegen: also SetMeshData für Vertices, Triangles etc. und dann an den gewollten Stellen die entsprechenden Texturen (nebeneinander, nicht übereinander, sonst sähe ja der ganze Level gleich aus...).

Die Level sollen nicht mit exorbitanten Polygonzahlen protzen, sondern eher oldschoolig rüberkommen á la Rise of the Triad, Doom, Quake 1 und aus Standard-Wänden, -Decken, -Rampen usw zur Laufzeit (also beim Start des Levels) erstellt werden.
Die Daten dafür würden aus einem File gelesen und dann die entsperchenden Aufrufe zur Erstellung in der 3D-Welt starten.

Wenn das mit PB-Ogre so ohne weiteres nicht drin ist, welche Engines gäbe es denn, die das können (mal mit Ausnahme vom B3D SDK)?
Desshalb hab ich geschrieben "vielleicht". Aber damit würde es sicher auch gehen (mit Shader dazu). Nur PB OGRE hat eben keine Methoden um alternative Meshdaten zu speichern. Was allerdings geht ist wenn du eine Textur nimmst und dort angibst welche Textur draufsoll. Dann lässt du im Shader die entsprechende Textur anzeigen und hast einen Vorteil: du musst nicht Vertexweise arbeiten, sondern kannst auch Texelweise die Textur ändern.

Re: 3D - verschiedene Texturen auf Mesh legen

Verfasst: 04.02.2010 19:07
von Hoessi666
DarkDragon hat geschrieben: Desshalb hab ich geschrieben "vielleicht". Aber damit würde es sicher auch gehen (mit Shader dazu). Nur PB OGRE hat eben keine Methoden um alternative Meshdaten zu speichern. Was allerdings geht ist wenn du eine Textur nimmst und dort angibst welche Textur draufsoll. Dann lässt du im Shader die entsprechende Textur anzeigen und hast einen Vorteil: du musst nicht Vertexweise arbeiten, sondern kannst auch Texelweise die Textur ändern.
Sorry, aber ...: Bahnhof !!!
Bin kein 3D-Guru und habe mit Shadern noch nie gearbeitet (war auch nie ein Anlass für mich gegeben).
Wie können Shader mir helfen verschiedene Teile eines Meshes anders zu texturieren? Und selbst wenn...ist das für so eine simple Sache nicht vollkommen überzogen?

In Blitz3D z.B. besteht ein Mesh aus mindestens einem Surface, man kann aber unzählige zusätzliche dazu in das Mesh packen. Jedes Surface kann ich anders texturieren. Würde ich einen Würfel als Raum erstellen wollen, müßte ich insgesamt drei Surfaces haben, wenn Boden, Decke und die vier Wände andere Texturen haben sollen.
Ogre3D hat laut Webseite sogenannte SubMeshes, die wohl genau diesem Zweck dienen können http://www.ogre3d.org/docs/api/html/cla ... bMesh.html.

Kann man das über PB nicht ansprechen, oder auf andere (simple) Weise zumindest diesen Effekt erreichen?
Selbst wenn man Shader dafür nützen könnte (s.o)... Wäre das nicht mit Kanonen auf Spatzen zu schiessen?

Wie werden denn bei kompletten Modellen, die man aus Editoren wie DelEd heraus exportiert und in PB lädt, die verschiedenen Texturen verwaltet?

P.S. Übrigens fällt mir gerade auf: Kann man die REichweite von Lights gar nicht verändern?

Re: 3D - verschiedene Texturen auf Mesh legen

Verfasst: 04.02.2010 19:53
von DarkDragon
Hoessi666 hat geschrieben:In Blitz3D z.B. besteht ein Mesh aus mindestens einem Surface, man kann aber unzählige zusätzliche dazu in das Mesh packen. Jedes Surface kann ich anders texturieren. Würde ich einen Würfel als Raum erstellen wollen, müßte ich insgesamt drei Surfaces haben, wenn Boden, Decke und die vier Wände andere Texturen haben sollen.
Ogre3D hat laut Webseite sogenannte SubMeshes, die wohl genau diesem Zweck dienen können http://www.ogre3d.org/docs/api/html/cla ... bMesh.html.
Das geht mit PureBasic OGRE so nicht.
Hoessi666 hat geschrieben:Kann man das über PB nicht ansprechen, oder auf andere (simple) Weise zumindest diesen Effekt erreichen?
Selbst wenn man Shader dafür nützen könnte (s.o)... Wäre das nicht mit Kanonen auf Spatzen zu schiessen?
Grafikkarten werden immer mehr darauf ausgerichtet. Du kannst auch uralt shader nehmen. Ob es bis zu Register Combiners zurückgeht weiß ich nicht, aber bis cG und assembler shaders gehts zurück.
Hoessi666 hat geschrieben:Wie werden denn bei kompletten Modellen, die man aus Editoren wie DelEd heraus exportiert und in PB lädt, die verschiedenen Texturen verwaltet?
Also du erstellst erstmal eine Textur für die Modelle, die praktisch sagt welche "echte" Textur da jetzt drauf soll. So entspricht z.B.:

Farbwert (0, 0, 0) -> Textur Stein
Farbwert (0, 0, 128) -> Textur Holz
Farbwert (0, 0, 255) -> Textur Graß
Farbwert (0, 128, 0) -> Textur Metall
...

Oder wenn du sogar überblenden möchtest und nur 3 oder 4 Texturen brauchst kannst du auch
Farbwert (0, 0, x) -> Textur Stein * x
Farbwert (0, x, 0) -> Textur Holz * x
...

machen. Im Shader wird dann einfach die entsprechende Textur gewählt und der Farbwert an derselben Position gewählt.

Re: 3D - verschiedene Texturen auf Mesh legen

Verfasst: 23.10.2013 11:28
von N_Gnom
auch wenn der thread jetzt schon bissl alt ist....
geht das inzwischen?
also texturen pro surface zuweisen(ohne shader)
also ein modell und mehrere texturen.und zwar nicht als layer(normal, bump map o.ä.)
sondern wenn ich z.b. ein modell habe welches boden und wände hat und ich kann jeweils eine seperate textur zuweisen.

Re: 3D - verschiedene Texturen auf Mesh legen

Verfasst: 23.10.2013 12:24
von PMV
Das ging vermutlich auch schon damals ...

http://www.ogre3d.org/docs/manual/manua ... rd_005fset
Wenn man sich nur mal die Doku von OGRE durchlesen würde :mrgreen:
tex_coord_set + Mesh mit mehreren Sätzen Texturkoordinaten