【发布时间】:2017-12-23 08:31:11
【问题描述】:
我需要加载纹理并将其应用到平面上,然后才能更改纹理的色调颜色。基本上,我会有一个颜色选择器。颜色应用于纹理的每个黑色像素。我尝试像这样使用Jimp:
jimp.read(fileName).then(function (image) {
var geometry = new THREE.PlaneGeometry( 6, 4 );
var texture = THREE.ImageUtils.loadTexture( fileName );
texture.wrapS = THREE.RepeatWrapping;
texture.wrapT = THREE.RepeatWrapping;
texture.minFilter = THREE.LinearFilter;
texture.magFilter = THREE.LinearFilter;
texture.offset.set( 0, 0 );
texture.repeat.set( 1, 1 );
var material = new THREE.MeshBasicMaterial( { map : texture } );
material.side = THREE.DoubleSide;
material.map.needsUpdate = true;
var plane = new THREE.Mesh( geometry, material );
plane.rotation.x = -60 * ( Math.PI/180 );
scene.add( plane );
renderer.render( scene, camera );
}).catch(function (err) {
console.error(err);
});
但我不知道 ThreeJS 或 Jimp 是否允许这样做,我可以以某种方式混合它们来实现它。什么都找不到
【问题讨论】:
-
您可以使用
new THREE.MeshBasicMaterial({map: texture, color: 0x00FF00});将纹理与颜色相乘,但黑色像素将保持黑色......您可以使用它吗,还是输入图像超出您的控制范围? -
如果您不想使用自定义着色器,您可以随时在画布上操作图像,然后在材质上使用该画布
-
试试
material.emissive = new THREE.Color(0x964B00)
标签: npm three.js textures tint