Three.js 如何正确使用三个JS WebGLRenderer';s方法getActiveMipmapLevel()?
我用三个JS和一个纹理图像渲染了一个平面。 我想检查在前后移动对象时使用的活动mipmap级别 我正在尝试使用WebGLRenderer提供的名为getActiveMipmapLevel()的方法获取用于渲染纹理的活动mipmap级别。 不管我向前/向后移动对象多远,活动的mipmap级别始终保持为0。我正在尝试重新蚀刻并打印渲染循环中的值 知道为什么吗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
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级别之间转换的有趣方式。