Three.js material, textur und Farbe
Ich versucht zu machen, material für ein Auto-Modell mit three.js wo die Grundfarbe von dem Auto-kann dynamisch geändert werden. Dieser war einfach durch ändern der Farbe-Attribut des MeshPhongMaterial, die ich verwende.
Ich brauchte dann zum anwenden einer textur auf der Oberseite und dachte, das wäre einfach genug, indem ein Bild auf die Karte, Attribut des Materials.
Das Ergebnis war nicht was ich erwartet habe, obwohl die Karte/Bild mit der textur war auch schattiert die Farbe festlegen, indem Sie das color-Attribut. Ich will es im Grunde überlagern die Grundfarbe.
Kann jemand mich in die richtige Richtung?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine komplette script-chunk. Legen Sie sofort nach dem Lesen three.js
gelernt, ein wenig über die three.js phong-material -- es nicht handhaben highlights der Art, wie ich möchte, aber... was auch immer. Wenn Sie mehr Raffinesse ich würde vorschlagen, mit ShaderMaterial statt.
Müssen Sie eine benutzerdefinierte shader für -- und eine textur mit alpha-Kanal (im wesentlichen ein DDS-format). Wenn Sie sich in der three.js Quelle, du wirst sehen, ein bisschen fragment-shader-code, genannt 'map_fragment', die sieht so aus:
Wie Sie sehen können es multipliziert Ihre textur-map, indem Sie die Farbe (die zu diesem Punkt ist in "gl_FragColor"). Stattdessen Klang es, wie Sie möchten, dass Ihre map-overlay auf der Oberseite der Grundfarbe, nur waren Sie gemalt habe, Sie (sagen wir, Chrom-Stoßstangen und Scheinwerfer).
Einen einfachen Weg, dies zu tun wäre, um nur die Art und Weise ändern 'phong' arbeiten, bevor Sie instanziieren alle phong-Material, indem Sie den Wert des "map_fragment" string.
Statt "gl_FragColor * (irgendwas)" - versuchen Sie das als eine neu-Zuordnung der DREI.ShaderChunk.map_fragment:
Die Gefahr mit überschreiben des stock-Methode auf diesem Weg ist, dass es auf ALLE Modelle in der Szene -- die gemalte textur als overlay über das material Farbe. Wenn das in Ordnung ist, bist du fertig. Ansonsten sollten Sie eine neue DREI.ShaderMaterial, die wie der "phong", außer für den Unterschied hier zitiert.