当我使用THREE.js库时,收到了这样的通知:
THREE.WebGLRenderer:纹理不是二的幂。Texture.minFilter应该设置为THREE.NearestFilter或THREE.LinearFilter。
因此,我尝试修复它。当我放入过滤器时,它可以工作:
var groundGeometry = new THREE.PlaneBufferGeometry( 5000, 5000, 96, 96 );
var grassTexture = THREE.ImageUtils.loadTexture("images/grass.jpg");
grassTexture.minFilter = THREE.LinearFilter;//here is the filter
var groundMaterial = new THREE.MeshBasicMaterial( {map: grassTexture, side: THREE.DoubleSide} );
var groundPlane = new THREE.Mesh(groundGeometry, groundMaterial);
scene.add( groundPlane );
但是,我尝试了另一种方法,但最后我只得到了黑色的飞机:
var groundGeometry = new THREE.PlaneBufferGeometry( 5000, 5000, 96, 96 );
var groundMaterial = new THREE.MeshBasicMaterial( {map: THREE.ImageUtils.loadTexture({image: "images/grass.jpg", minFilter: THREE.LinearFilter}), side: THREE.DoubleSide} );
var groundPlane = new THREE.Mesh(groundGeometry, groundMaterial);
scene.add( groundPlane );
在第二种情况下,由于没有将适当的参数传递给,因此您将遇到麻烦THREE.ImageUtils.loadTexture()
。您正在传递一个对象{}
。您将必须执行以下操作:
var groundMaterial = new THREE.MeshBasicMaterial( {
map: THREE.ImageUtils.loadTexture( "images/grass.jpg" ),
side: THREE.DoubleSide
} );
groundMaterial.map.minFilter = THREE.LinearFilter;
确实,纹理加载是异步的,但是在不了解其余代码的情况下,无法确定此处是否存在问题。
顺便说一句,您可能不需要18,000张脸PlaneBufferGeometry
。尝试
groundGeometry = new THREE.PlaneBufferGeometry( 5000, 5000, 1, 1 );
three.js r.71
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句