Three.js 如何正确使用三个JS WebGLRenderer';s方法getActiveMipmapLevel()?

Three.js 如何正确使用三个JS WebGLRenderer';s方法getActiveMipmapLevel()?,three.js,texture-mapping,renderer,mipmaps,Three.js,Texture Mapping,Renderer,Mipmaps,我用三个JS和一个纹理图像渲染了一个平面。 我想检查在前后移动对象时使用的活动mipmap级别 我正在尝试使用WebGLRenderer提供的名为getActiveMipmapLevel()的方法获取用于渲染纹理的活动mipmap级别。 不管我向前/向后移动对象多远,活动的mipmap级别始终保持为0。我正在尝试重新蚀刻并打印渲染循环中的值 知道为什么吗 var scene2 = new THREE.Scene(); var mipmapped_renderer = new THREE.Web

我用三个JS和一个纹理图像渲染了一个平面。 我想检查在前后移动对象时使用的活动mipmap级别

我正在尝试使用WebGLRenderer提供的名为getActiveMipmapLevel()的方法获取用于渲染纹理的活动mipmap级别。 不管我向前/向后移动对象多远,活动的mipmap级别始终保持为0。我正在尝试重新蚀刻并打印渲染循环中的值

知道为什么吗

var scene2 = new THREE.Scene();

var mipmapped_renderer = new THREE.WebGLRenderer({antialias: true});
mipmapped_renderer.setClearColor("#000000");
mipmapped_renderer.setSize(window.innerWidth , window.innerHeight);
mipmapped_renderer.autoClear = false;


var mipmapped_camera = new THREE.PerspectiveCamera(
    75,
    window.innerWidth / window.innerHeight,
    0.1,
    1000
);

mipmapped_camera.position.z = 10;


document.getElementById('left-canvas').appendChild(mipmapped_renderer.domElement);

window.addEventListener('resize', () => {
    mipmapped_renderer.setSize(window.innerWidth, window.innerHeight);
    mipmapped_camera.aspect = window.innerWidth / window.innerHeight;

    mipmapped_camera.updateProjectionMatrix();
});

var box2 = new THREE.PlaneGeometry(100, 100, 8 );

var texture2 = new THREE.TextureLoader().load( 'textures/chessboard2/chessboard_512.png' );
texture2.wrapS = THREE.RepeatWrapping;
texture2.wrapT = THREE.RepeatWrapping;
texture2.offset.set(0, 0);
texture2.repeat.set(2, 2);
texture2.minFilter = THREE.LinearMipmapLinearFilter;
texture2.magFilter = THREE.LinearFilter;
texture2.needsUpdate = true;
texture2.generateMipmaps = true;
var material2 = new THREE.MeshBasicMaterial({map: texture2, side: THREE.DoubleSide});
var mesh2 = new THREE.Mesh(box2, material2);
mesh2.scale.x = -1;
mesh2.rotation.x = 90
scene2.add(mesh2);


// post processing

var light = new THREE.PointLight(0xFFFFFF, 1, 500);
light.position.set(10, 0, 25);
scene2.add(light);


// render

var render = function() {
    requestAnimationFrame(render);
    mipmapped_renderer.render(scene2, mipmapped_camera);
    document.getElementById('mipmapLevel').innerHTML = mipmapped_renderer.getActiveMipmapLevel()
}

// animation

var rotSpeed = 0.1;

function onKeyDown(event) {
    event.preventDefault();
    var keyCode = event.which;

    if (keyCode == 87) {
        mipmapped_camera.position.z -= 1;
    } else if (keyCode == 83) {
        mipmapped_camera.position.z += 1;
    } else if (keyCode == 65) {
        mesh2.rotation.y += rotSpeed;
    } else if (keyCode == 68) {
        mesh2.rotation.y -= rotSpeed;
    }

    render();
}

render();

window.addEventListener('keydown', onKeyDown, false);

恐怕
WebGLRenderer.getActiveMipmapLevel()
做不到您所期望的。该方法仅返回以前由设置的值

此外,
WebGLRenderer.getActiveMipmapLevel()
仅用于在生成阴影贴图时正确恢复内部渲染状态。因此,它不一定适用于用户级代码


three.js R112

它不是这样工作的。但是,如果希望它们之间的过渡可见,可以设置自己的mipmap(例如不同的1x1纹理)并使用过滤。是否有方法计算当前使用的mipmap级别?请这样考虑:使平面更大,并以一定角度渲染。根据渲染的像素,所有mip级别都可以处于活动状态。实际上,您可以使用此示例中的方法来直观地调试mipmaps:@Mugen87,谢谢。查看mipmap级别之间转换的有趣方式。