3D - verschiedene Texturen auf Mesh legen

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Hoessi666
Beiträge: 19
Registriert: 09.12.2009 11:34
Computerausstattung: eMachine Notebook G520, Intel 575 @ 2GHz, 2GB Ram,Intel Mobile 4 Series Express
Wohnort: R´Lyeh

3D - verschiedene Texturen auf Mesh legen

Beitrag 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...?!
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Re: 3D - verschiedene Texturen auf Mesh legen

Beitrag 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.
I´a dllfreak2001
Benutzeravatar
Hoessi666
Beiträge: 19
Registriert: 09.12.2009 11:34
Computerausstattung: eMachine Notebook G520, Intel 575 @ 2GHz, 2GB Ram,Intel Mobile 4 Series Express
Wohnort: R´Lyeh

Re: 3D - verschiedene Texturen auf Mesh legen

Beitrag 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...
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: 3D - verschiedene Texturen auf Mesh legen

Beitrag 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.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Hoessi666
Beiträge: 19
Registriert: 09.12.2009 11:34
Computerausstattung: eMachine Notebook G520, Intel 575 @ 2GHz, 2GB Ram,Intel Mobile 4 Series Express
Wohnort: R´Lyeh

Re: 3D - verschiedene Texturen auf Mesh legen

Beitrag 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)?
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: 3D - verschiedene Texturen auf Mesh legen

Beitrag 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.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Hoessi666
Beiträge: 19
Registriert: 09.12.2009 11:34
Computerausstattung: eMachine Notebook G520, Intel 575 @ 2GHz, 2GB Ram,Intel Mobile 4 Series Express
Wohnort: R´Lyeh

Re: 3D - verschiedene Texturen auf Mesh legen

Beitrag 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?
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: 3D - verschiedene Texturen auf Mesh legen

Beitrag 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.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
N_Gnom
Beiträge: 149
Registriert: 11.09.2013 19:52

Re: 3D - verschiedene Texturen auf Mesh legen

Beitrag 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.
Laptop: Win10@64bit - i3 2x2Ghz - 8GB Ram - 1TB HDD
Desktop: Win10@64bit - AMD Ryzen 5 2400G - MSI B450 Tomahawk - 8GB Ram - 240GB SSD
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Re: 3D - verschiedene Texturen auf Mesh legen

Beitrag 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
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Antworten