【问题标题】:add geometry from vertex and vertex nromal从顶点和顶点法线添加几何图形
【发布时间】:2014-12-26 13:04:45
【问题描述】:

我用顶点和顶点正态加载一个模型,

for (var i = 0, vindex = 0; i < triangle.length; i++, vindex += 3) {

            x = parseFloat(triangle[i].attributes.getNamedItem('x1').value);
            y = parseFloat(triangle[i].attributes.getNamedItem('y1').value);
            z = parseFloat(triangle[i].attributes.getNamedItem('z1').value);
            this.geometry.vertices.push(new THREE.Vector3(x * scale + this.translateVector.x, y * scale + this.translateVector.y, z * scale + this.translateVector.z));

            x = parseFloat(triangle[i].attributes.getNamedItem('x2').value);
            y = parseFloat(triangle[i].attributes.getNamedItem('y2').value);
            z = parseFloat(triangle[i].attributes.getNamedItem('z2').value);
            this.geometry.vertices.push(new THREE.Vector3(x * scale + this.translateVector.x, y * scale + this.translateVector.y, z * scale + this.translateVector.z));

            x = parseFloat(triangle[i].attributes.getNamedItem('x3').value);
            y = parseFloat(triangle[i].attributes.getNamedItem('y3').value);
            z = parseFloat(triangle[i].attributes.getNamedItem('z3').value);
            this.geometry.vertices.push(new THREE.Vector3(x * scale + this.translateVector.x, y * scale + this.translateVector.y, z * scale + this.translateVector.z));

            var face = new THREE.Face3(vindex, vindex + 1, vindex + 2);
            face.color.setHex(this.faceColor || this.defaultcolor);
            face.vertexNormals = [];

            nx = parseFloat(triangle[i].attributes.getNamedItem('nx1').value);
            ny = parseFloat(triangle[i].attributes.getNamedItem('ny1').value);
            nz = parseFloat(triangle[i].attributes.getNamedItem('nz1').value);
            face.vertexNormals.push(new THREE.Vector3(-nx, -ny, -nz));

            nx1 = parseFloat(triangle[i].attributes.getNamedItem('nx2').value);
            ny1 = parseFloat(triangle[i].attributes.getNamedItem('ny2').value);
            nz1 = parseFloat(triangle[i].attributes.getNamedItem('nz2').value);
            face.vertexNormals.push(new THREE.Vector3(-nx1, -ny1, -nz1));

            nx2 = parseFloat(triangle[i].attributes.getNamedItem('nx3').value);
            ny2 = parseFloat(triangle[i].attributes.getNamedItem('ny3').value);
            nz2 = parseFloat(triangle[i].attributes.getNamedItem('nz3').value);
            face.vertexNormals.push(new THREE.Vector3(-nx2, -ny2, -nz2));

            face.normal.set((nx + nx1 + nx2) / 3, (ny + ny1 + ny2) / 3,(nz + nz1 + nz2) / 3);

            this.geometry.faces.push(face);
            }

this.material = new THREE.MeshBasicMaterial({ vertexColors: THREE.FaceColors, overdraw: true , opacity: 1, transparent: 0 });

        this.mesh = new THREE.Mesh(this.geometry, this.material);
        this.mesh.name = this.id;

        this.mesh.updateMatrix();
        this.mesh.matrixAutoUpdate = false;

        scene.add(this.mesh);

下面的房子,正面是看不见的,所以前墙和左墙是看不见的,我们可以看到房子的内部,但我想让它显示所有的墙壁而不是透视,有人能帮帮我吗?

在我更改为 Lambert 材质后,它仍然在里面显示房子,我尝试过 cw、ccw 或反转顶点索引,反转法线。有没有人可以帮忙?

【问题讨论】:

    标签: three.js


    【解决方案1】:

    面部紫外线可能有问题。尝试将材料双面应用。

    【讨论】:

      【解决方案2】:

      似乎找到了答案。

      那是因为部分房屋模型position.z

      【讨论】:

        猜你喜欢
        • 2015-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-01
        相关资源
        最近更新 更多