【发布时间】:2017-04-20 17:01:56
【问题描述】:
我有一个显示一些缩略图的功能区。只是为了提供背景,将缩略图图像绘制在画布上,然后将其添加到纹理中。
var texture = new THREE.Texture(textureCanvas);
网格创建如下
loader.load('mesh_blender.js', function(geom) {
var mesh = new THREE.Mesh(geom, new THREE.MeshLambertMaterial({
color: 0xffffffff,
opacity: 0.7,
overdraw: 0.21,
side: THREE.DoubleSide,
transparent: true,
//shading: THREE.SmoothShading,
map: texture
}));
到这里为止一切都很好。功能区创建如下
我对此没有任何抱怨。但我需要你在下图中看到的这种额外效果。可以看出,位于中心(焦点)的缩略图需要具有较暗的效果才能显示它被突出显示/可选择。所有剩余的缩略图都具有透明效果,表示它们不可选择。
我正在尝试使用 Threejs 中的 Lights 来解决这个问题,但不是很成功。我想使用 AmbientLight 将光投射到整个色带上,然后仅在中心图像上使用额外的 SpotLight(可能颜色更深)以达到所需的效果。但这没有用。我有类似的东西
但是中心聚焦的图像没有效果。正如您在图像中看到的,我使用了一个助手来显示光的方向,但我真的看不到图像上的任何光。这是我用来开发 SpotLight 的代码
var spotLight = new THREE.SpotLight( 0xffeedd );
spotLight.position.set( 0, -50, 50 );
spotLight.castShadow = true;
//spotLight.penumbra = 0.2;
spotLight.decay = 2;
spotLight.distance = 300;
spotLight.angle = 0.5;
var helper = new THREE.SpotLightHelper( spotLight, 2.5 );
scene.add(helper);
scene.add( spotLight );
我对 Threejs 和 3d 图形非常陌生。任何帮助将不胜感激。谢谢。如果不使用 Lights 来实现最终结果,我也愿意接受任何其他建议。
【问题讨论】:
-
已经给出答案的另一种方法可能是创建自己的 ShaderMaterial
标签: javascript three.js