0
レンダリングのためにOBJ/MTLモデルをロードするカスタムthree.jsアプリケーションを作成しています。ロードされたモデルにカスタムシェイダーを適用したいのですが、手動でRawShaderMaterialに渡すカラー&鏡面ユニフォームは更新されていません。むしろ、それらはすべて同じ値で埋められます。したがって、私のモデルを同じ色でレンダリングします。three.js .mtl属性がカスタムシェーダに設定されていません
彼はいくつかのコード例です。簡単な解決方法またはより良いアプローチがある場合、私は非常に興味を持っています。
var mtlLoader = new THREE.MTLLoader();
mtlLoader.setPath(path);
mtlLoader.load(mtlName, function(materials) {
var objLoader = new THREE.OBJLoader();
materials.preload();
objLoader.setMaterials(materials);
objLoader.setPath(path);
objLoader.load(objName, function(object) {
if (shader) {
object.traverse(function (child) {
if (child instanceof THREE.Mesh) {
var customShader = shader;
var color = child.material["color"];
customShader.uniforms["color"] = {type: 'v3', value: color};
customShader.uniforms["specular"] = {type: 'v3', value: child.material["specular"]};
child.material = customShader;
}
});
}
}
頂点シェーダ: 精度mediumpフロート。 precision mediump int;
uniform mat4 modelViewMatrix;
uniform mat4 projectionMatrix;
attribute vec3 position;
attribute vec3 normal;
attribute vec2 uv;
varying vec3 Normal;
varying vec2 UV;
void main() {
Normal = normal;
UV = uv;
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
}
フラグメントシェーダ: precision mediump float; precision mediump int;
uniform vec3 color;
uniform vec3 specular;
varying vec3 Normal;
varying vec2 UV;
void main() {
gl_FragColor = vec4(color, 1.0);
}