gpt4 book ai didi

javascript - three.js - 使用 MeshLambertMaterial 和点光源绘制自定义网格

转载 作者:搜寻专家 更新时间:2023-11-01 04:17:18 29 4
gpt4 key购买 nike

我目前正在学习 webGL 和 three.js。因此,出于测试原因,我尝试创建一个平面几何体和两个立方体几何体以及一个点光源:

function initLights () {
var c = context;

var pointLight = new THREE.PointLight( 0xffffff, 1, 100 );
pointLight.position.set( 10, 10, 10 );

c.scene.add(pointLight);
}

function initObjects () {
var c = context;

/**
* Defining the materials
*/

var lambertRedMaterial = new THREE.MeshLambertMaterial({
color : 0xff0000
, side : THREE.DoubleSide
});

var lambertWhiteMaterial = new THREE.MeshLambertMaterial({
color : 0xffffff
, side : THREE.DoubleSide
});

/**
* Defining the floor
*/
var floorGeometry = new THREE.Geometry();

floorGeometry.vertices.push(new THREE.Vector3(-5.0, 0.0, -5.0));
floorGeometry.vertices.push(new THREE.Vector3( 5.0, 0.0, -5.0));
floorGeometry.vertices.push(new THREE.Vector3( 5.0, 0.0, 5.0));
floorGeometry.vertices.push(new THREE.Vector3(-5.0, 0.0, 5.0));
floorGeometry.faces.push(new THREE.Face3(2, 1, 0));
floorGeometry.faces.push(new THREE.Face3(3, 2, 0));


var floorMesh = new THREE.Mesh(floorGeometry, lambertWhiteMaterial);
floorMesh.position.set(0.0, 0.0, 0.0);

/**
* Defining a cube
*/
var cubeGeometry1 = new THREE.CubeGeometry(2.0,0.25,1);
var cube1 = new THREE.Mesh( cubeGeometry1, lambertRedMaterial );
cube1.position.set(0.0, 1.0, 0.0);

var cubeGeometry2 = new THREE.CubeGeometry(2.0,0.25,1);
var cube2 = new THREE.Mesh( cubeGeometry2, lambertRedMaterial );
cube2.position.set(0.0, 1.35, 0.0);

c.scene.add(floorMesh);
c.scene.add(cube1);
c.scene.add(cube2);
}

之前定义了带有相机和场景的上下文。奇怪的是,立方体显示正确,但平面不显示。

当我将平面的 y 位置设置为 1.0 时,我可以看到它与下方的立方体相交。此外,当我使用 MeshBasicMaterial 时会显示它,但出于照明原因我想使用 MeshLambertMaterial。

有没有人知道,如果我忘记了什么,或者可能是什么问题?

非常感谢。

最佳答案

MeshLambertMaterial 需要面法线或顶点法线进行照明计算。

面法线用于“平面着色”,顶点法线用于“平滑着色”。

您可以通过调用 geometry.computeFaceNormals(); 来计算面法线。对于顶点法线,您可以调用 geometry.computeVertexNormals();

对于视觉提示,使用 three.js 助手,例如这个:

scene.add( new THREE.FaceNormalsHelper( mesh ) );

此外,如果您只是学习,this answer 中的建议可能对你有帮助。

three.js r.65

关于javascript - three.js - 使用 MeshLambertMaterial 和点光源绘制自定义网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21761704/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com