1

如何使对象的一部分在同一对象的另一部分的反射中可见?

茶壶示例图片

4

1 回答 1

1

Threejs 不是光线追踪引擎。因此,它不使用真实的光线投射来计算表面上的反射。它实际上将其他对象渲染到您的反射对象上。

您的场景缺少的是表面之间的无限镜面效果,其中光线可以在两个反射表面之间多次反弹。这就是光线追踪引擎要做的事情。

你可以试着伪造这个。只需将您的几何体拆分为多个对象,并为它们使用额外的相机来渲染从反射对象到场景中的场景,并将其用作对象的纹理。
您可以将此示例用作起点:https ://threejs.org/examples/#webgl_materials_cubemap_dynamic

下面是一个由 CubeCamera 捕获的具有动态环境纹理的材质示例:

var near = 1
var far = 100
var cubeResolution = 128
var camera1 = new THREE.CubeCamera( near, far, cubeResolution);
camera1.renderTarget.texture.generateMipmaps = true;
camera1.renderTarget.texture.minFilter = THREE.LinearMipMapLinearFilter;
scene.add( camera1 );

var material = new THREE.MeshBasicMaterial( { envMap: camera1.renderTarget.texture } );
var cube = new THREE.Mesh( new THREE.BoxBufferGeometry( 20, 20, 20 ), material );
scene.add(cube)

于 2019-06-27T12:50:59.593 回答