Three.js Fliesen, die mehrere Texturen verwenden von Ebenen geometrie
So, ich bin versucht, zu erstellen eine 3D-Welt basiert, bestehend aus Fliesen.
Ich es erfolgreich geschafft haben, dies zu tun mit der Ebenen geometrie-und height-Werte etc. Jetzt habe ich aber zu einem Punkt kommen, wo ich evtl. noch alles ändern.
Das problem ist, dass ich möchte eine Kachel, um mehrere Texturen (mit shader weil ich nicht mischen wollen Ihnen). Ich war in der Lage, dies zu tun Global (also jede Kachel haben würde, die gleichen Texturen + mit uv-mapping).
Aber ich verstehe nicht, wie ich wäre in der Lage, um anzugeben, welche Fliese hat die Texturen (und ich habe über 100 Texturen), da die Ebenen geometrie hat nur 1 shader-material. Und ich bin auch nicht sicher, ob es eine gute Idee, senden 100 Texturen durch einen shader?
Also meine Fragen im Grunde kocht unten zu diesem:
Ist es eine anständige/performante Art und Weise zu verknüpfen, die Fliesen/- Eckpunkte der Texturen, so kann ich halten Sie die Ebene geometrie.
- Wenn ja: wie?
- wenn Nein: Sollte ich jede Kachel separat (also eine Fläche von 1x1) und mischen Sie Sie irgendwie zusammen (Leistung/vertex-blending?) so wirkt es wie eine einzige Ebene (in diesem Fall der zusammengeführten Ebene besteht aus vielen 1x1 Flugzeuge) und mit dem shader pro Kachel (eine 1x1-Ebene)?
Wie sind diese Dinge überhaupt getan?
Edit:
Einige zusätzliche Informationen, weil es scheint, dass meine Frage nicht wirklich klar:
Was ich will, ist, dass eine Kachel (2 Gesichter) hat mehrere "materialIndexes" zu sagen. Derzeit brauche ich, um 1 Plättchen zu haben 3 Texturen, so kann ich mischen Sie in einem shader mit einem bestimmten Algorithmus.
Zum Beispiel ich will eine Herz-Form (rote Herzen/schwarzen hintergrund) als textur und als basierend auf den Farben, die ich nicht mischen wollen/ändern Sie die anderen 2-Texturen, so kann ich bekommen zum Beispiel Holz-Herz und einem blauen hintergrund. Oder zum Beispiel, ich sollte in der Lage sein, um die Mischung 4 Texturen gleichmäßig auf dem Platz, jeweils 1/4 des Platzes. Aber der Punkt hier ist nicht, was getan werden muss, mit den Texturen, aber wie kann ich angeben, wie 3, 4, oder mehr Texturen für meine Flächen/Fliesen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, Sie müssen nehmen einen Blick an, was aufgerufen wird, eine multi-material-Objekt.
Wenn Sie google für diejenigen, die Sie finden mehrere Beispiele. Wie diese Antwort auf eine ähnliche Frage.
Oder werfen Sie einen Blick auf DREI.MeshFaceMaterial. Sie können es verwenden, so weisen Sie mehrere Materialien für die gleiche geometrie.
Wo Materialien ist ein array von Materialien und für die Flächen eine
materialIndex
paramater man bestellt das richtige materialÄhnliche Fragen hier und hier
EDIT:
Hier ist ein Turnschuh , um zu demonstrieren, dass es möglich ist. Ich verwendet den code von einem der links.
materialIndex
Eigenschaft zu benennen, die material, um Ihre Gesichter.Wenn die Texturen haben alle die gleiche Größe haben, können Sie Folgendes tun:
Erstellen Sie eine textur mit der 10-fachen Größe einer einzelnen textur (Sie können dies automatisch, erstellen Sie eine Leinwand zeichnen Sie die Struktur-Datei auf der Leinwand an der richtigen Koordinaten, erhalten die textur von der Leinwand). Dies ermöglicht 100 (10x10) Texturen.
Weisen die Fliesen eine Basis uv-Koordinaten im Bereich von 0 - 0.1 (da eine einzelne textur belegt die 1/10tel der globalen textur),
Hinzufügen, um die bisherigen uv-Werte der offset der einzelnen textur (für die zweite textur, offset von 0,1 in u und 0 in v, für die 3. textur 0,2 und 0; für die 10th 0 und 0,1.