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

Getting colored plane surface instead of texture in Three.js

本文关键字:纹理 平面 彩色 Three js 获取      更新时间:2023-09-26

我正在尝试在我的对象上应用纹理。但是我没有应用纹理,而只是对象上的彩色平面,这意味着如果我正在应用木质纹理图像,那么它只会采用棕色等纹理的颜色而不是实际纹理。

基本代码如下:

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);

我怀疑您的几何图形没有正确的 UVS首先尝试对由三个生成的几何图形进行纹理处理

geometry = new THREE.PlaneGeometry(100,100);

如果纹理显示正确,则表示您从 STL 加载的几何体未设置 UVS 或具有不正确的值(如所有零)

要获得UVS的使用

geometry.faceVertexUvs

对于几何

geometry.getAttribute("uv")

如果您有缓冲区几何图形