Javascript three.js lambert材质颜色不显示
我用自己的顶点和索引创建了一个箭头,然后将lambert材质和材质颜色设置为红色。我在渲染时看不到材质颜色。只是黑色的 但是,如果将“材质”设置为“基本材质”,则可以看到颜色Javascript three.js lambert材质颜色不显示,javascript,three.js,Javascript,Three.js,我用自己的顶点和索引创建了一个箭头,然后将lambert材质和材质颜色设置为红色。我在渲染时看不到材质颜色。只是黑色的 但是,如果将“材质”设置为“基本材质”,则可以看到颜色 arrowMesh = new THREE.Mesh( arrowGeometry, new THREE.MeshLambertMaterial({ color : 'red', side: THREE.DoubleSide }) ); arrowMesh.position.set(-10,5,95); a
arrowMesh = new THREE.Mesh(
arrowGeometry,
new THREE.MeshLambertMaterial({ color : 'red', side: THREE.DoubleSide })
);
arrowMesh.position.set(-10,5,95);
arrowMesh.rotation.x = -1.0;
arrowMesh.rotation.z = -0.2;
scene.add(arrowMesh);
three.js r64我这样解决了我的问题
var ground_texture = THREE.ImageUtils.loadTexture('images/grass.png', {}, function() {
renderer.render(scene,camera);
});
ground_material = Physijs.createMaterial(
new THREE.MeshLambertMaterial({map : ground_texture}),
.9, // high friction
.9 // low friction
);
我在这个网站上找到了这个解决方案 首先,使用
THREE.LambertMaterial
时,场景中需要一些灯光
如果场景中确实有灯光,并且通过创建顶点和面自己创建了几何体,那么问题很可能在于面法线设置为Vector3(0,0,0)代码>
计算并设置你的脸法线,它们应该正确渲染
因此,对于单个三角形,它将如下所示:
var geometry = new THREE.Geometry();
geometry.vertices = [ a, b, c ];
var face = new THREE.Face3( 0, 1, 2 );
face.normal = new THREE.Vector3().crossVectors(
new THREE.Vector3().subVectors( b, a ),
new THREE.Vector3().subVectors( c, b )
).normalize();
var mesh = new THREE.Mesh( geometry, new THREE.MeshLambertMaterial({color: 0xff0000, side: 2, shading: THREE.FlatShading}));
也可以使用几何体方法来计算它们,而不是手动执行此操作:
geometry.computeFaceNormals();
geometry.computeVertexNormals();
我在我的机器上遇到了同样的问题,并发现PointLight是罪魁祸首。将“距离”设置为零(或保留默认值)会导致灯光完全关闭。显式地将“距离”设置为一个较大的数字会打开灯光,然后我的所有Lambert材质都会正常显示
因此,与其
pointLight = new THREE.PointLight(0xFFFFFF);
我曾经
pointLight = new THREE.PointLight(0xFFFFFF, 1, 100000);
一切都是固定的。据我所知,到目前为止,这个问题仅限于PointLight,并且依赖于机器(GPU或GPU驱动程序,不确定具体是哪个)。但是,在那里输入一个大数字并避免问题是很容易的。如果几何体是3,颜色是否显示为红色。立方几何体
?几何体不是3。立方几何体是3。几何体。请将箭头几何体
替换为3。立方几何体
,然后回答我原来的问题。它不起作用。“还是黑色的,我的箭形断掉了。”@kocyigityunus:很高兴看到你解决了自己的问题。请将解决方案作为答案发布,并将其标记为。这不应该发生。你正在使用什么版本的three.js?我相信是71版。如果你能像你所描述的那样演示three.js错误,如果你能报告它,那会很有帮助。请参阅中的“如何报告错误”。我将在下周尝试这样做。顺便说一下,我会注意到,即使是MeshLambertMaterial文档页面顶部的演示对我来说也是黑色的。是的。在我的机器上是黑色的。这是如何回答最初的问题的?