Javascript 在Three.js中获取彩色平面曲面而不是纹理

Javascript 在Three.js中获取彩色平面曲面而不是纹理,javascript,three.js,Javascript,Three.js,我正在尝试在我的对象上应用纹理。但我并没有使用纹理,只是在物体上使用了彩色平面,这意味着若我使用的是木材纹理图像,那个么它只使用纹理的颜色,比如棕色,而不是实际的纹理 基本代码如下所示: var loader = new THREE.STLLoader(); var newMaterial = new THREE.MeshPhongMaterial( { color: colorValue, specular: 0xffffff, shininess: 100 } ); loader.loa

我正在尝试在我的对象上应用纹理。但我并没有使用纹理,只是在物体上使用了彩色平面,这意味着若我使用的是木材纹理图像,那个么它只使用纹理的颜色,比如棕色,而不是实际的纹理

基本代码如下所示:

var loader = new THREE.STLLoader();
var newMaterial = new THREE.MeshPhongMaterial( { color: colorValue, specular: 0xffffff, shininess: 100  } );

loader.load( './models/stl/binary/'+top, function ( newGeometry ) {

newMesh = new THREE.Mesh( newGeometry, newMaterial );

newMesh.position.set(  0,0.6, 0  );
newMesh.rotation.set(0,0.8,0);
newMesh.scale.set( 0.04, 0.04, 0.04 );

scene.add( newMesh );
var newMaterial = new THREE.MeshPhongMaterial( { color: 0xffffff, specular: 0xffffff, shininess: 100, map: THREE.ImageUtils.loadTexture( "textures/table/lighttexture.jpg" ),
    side: THREE.DoubleSide } );
    newMaterial.map.minFilter = THREE.LinearFilter;
我尝试了以下方法来应用纹理:

var loader = new THREE.STLLoader();
var newMaterial = new THREE.MeshPhongMaterial( { color: colorValue, specular: 0xffffff, shininess: 100  } );

loader.load( './models/stl/binary/'+top, function ( newGeometry ) {

newMesh = new THREE.Mesh( newGeometry, newMaterial );

newMesh.position.set(  0,0.6, 0  );
newMesh.rotation.set(0,0.8,0);
newMesh.scale.set( 0.04, 0.04, 0.04 );

scene.add( newMesh );
var newMaterial = new THREE.MeshPhongMaterial( { color: 0xffffff, specular: 0xffffff, shininess: 100, map: THREE.ImageUtils.loadTexture( "textures/table/lighttexture.jpg" ),
    side: THREE.DoubleSide } );
    newMaterial.map.minFilter = THREE.LinearFilter;
以上代码的结果是相同的,只是纹理的颜色得到应用

var texture = new THREE.TextureLoader().load( "textures/water.jpg" );
texture.wrapS = THREE.RepeatWrapping;
texture.wrapT = THREE.RepeatWrapping;
texture.repeat.set( 4, 4 );
                var newMaterial = new THREE.MeshPhongMaterial( { color: 0xffffff, specular: 0xffffff, shininess: 100, map: texture } );
获取上述代码时出错:

Uncaught TypeError: Cannot set property 'wrapS' of undefined
谁能告诉我,我该如何在我的物体上获得原始纹理

编辑

纹理对于球体几何体正常工作,如下代码所示

            var sphereGeometry = new THREE.SphereGeometry(1, 10, 10);
            var mat = new THREE.MeshPhongMaterial();
            mat.map = new THREE.ImageUtils.loadTexture(
            "textures/table/lighttexture.jpg");
            mat.transparent = true;
            mat.side = THREE.DoubleSide;
            mat.depthWrite = false;
            mat.color = new THREE.Color(0xff0000);
            var sphere = new THREE.Mesh(sphereGeometry, mat);
            scene.add(sphere);

我怀疑您的几何体没有正确的UV 首先尝试对由三个参数生成的几何体进行纹理处理

geometry = new THREE.PlaneGeometry(100,100);
如果纹理显示正确,则表示从stl加载的几何体未设置UV或其值不正确(如全零)

要获得UV,请使用

geometry.faceVertexUvs
几何


如果您有一个BufferGeometry

new THREE.TextureLoader().load(“textures/water.jpg”);不返回纹理对象。您可以通过向加载函数添加第二个参数来获得它,该函数将以纹理作为参数进行回调。@mrVoid我是新来的。你能告诉我该怎么做吗?我告诉你一个已经回答过的问题和文件。我曾尝试过球宝石的纹理。它正确地显示了纹理。如何使用UV集检查STL对象?我不知道这个紫外线的东西,我应该如何使用它和所有。你能告诉我,我应该如何在我的STL对象中设置uv吗?请检查我的编辑。你必须计算uv-uv是纹理的坐标,通常从0到1,[0,0]是纹理的左上角,[1,1]是右下角,没有简单的方法自动计算uv,特别是对于自定义加载的对象,请参见