只要我将自己的顶点推到几何体上,几何体就是纯色,而不是有彩色阴影。
将此代码应用于名为THREE.PlaneGeometry
的{{1}}会产生以下阴影:
mesh
但是,当我使用自定义顶点和面将相同的代码应用于var light = new THREE.DirectionalLight(0xffffff, 1);
light.castShadow = true;
light.shadowDarkness = 0.5;
// ..
THREE.MeshLambertMaterial({ color: 0x66e6b0, shading: THREE.FlatShading });
// ...
mesh.receiveShadow = true;
mesh.castShadow = true;
时,几何图形为纯黑色。如何为自定义几何图形赋予与平面几何图形相同的阴影?
THREE.Geometry()
,但脸上不再有阴影。THREE.MeshBasicMaterial
并为每张脸着色仍然会使所有黑色。vertexColors: THREE.FaceColors
会给出颜色,但脸上没有阴影。这是随机生成的fiddle个面,它们都是相同的颜色。相反,我希望他们有不同的阴影,因为它们是不同的角度(如上图所示)。
答案 0 :(得分:1)
不是阴影会产生这样的效果,而是z坐标。在你的jsfiddle中,你所有的三角形都在xy平面上,所以它们都具有相同的法线。所以他们的照明会是一样的。所以,如果你这样打电话:
Declare @nextStartTime nvarchar(30)
set @nextStartTime = @DisplayStartTime
WHILE (CONVERT(DateTime, '2015-04-17' @nextStartTime ) <= CONVERT(DateTime, '2015-04-18 23:00:00'))
begin
set @DisplayStartTime = @nextStartTime
select @nextStartTime = ltrim(right(convert(varchar(100), DATEADD(minute, @Frequency, @nextStartTime)),8))
insert into #ActualTimeSlot
select @Parameter,@DisplayStartTime ,@nextStartTime,LTRIM((RIGHT(CONVERT(VARCHAR(100),DATEADD(minute,convert(int,@Tolerance),@nextStartTime),100),8))) as CodeEndTime,@Frequency,@Tolerance
set @intFlag +=1
end
以及geometry.vertices.push(new THREE.Vector3(Math.random() * 100, Math.random() * 100, Math.random() * 100));
因为它对任何事情没有贡献,那么你将得到你想要的变化。
答案 1 :(得分:0)
当附加到几何体的顶点的任何初始坐标具有未定义的值时,会出现几何显示为全黑的问题。
甚至如果显示几何体,动画并且不会引发任何错误,如果THREE.Vector3
的初始坐标未定义,则THREE.MeshLambertMaterial
着色将不起作用。< / p>
在fiddle中演示了此问题,undefined_variable
使用new THREE.Vector3(0, 0, 0)
可以防止彩色阴影,只会产生纯色。
要处理此问题,请将所有顶点初始化为任意值,例如animate()
和然后使用getListView()
中的变量值。