如何使对象的一部分在同一对象的另一部分的反射中可见?
问问题
558 次
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 回答