2017-11-01 7 views
0

phongマテリアルを使用してバッファジオメトリオブジェクトをレンダリングしようとしていますが、黒く表示されます。以前は基本的な素材を使用していましたが、正しくレンダリングしています。照明を確認するために、私は口紅素材でキューブをレンダリングしました。バッファメトリーがphongmaterialで黒く表示されます

私はエラーを生成する最小限のコードに煮詰めました。頂点の色ではなく、ファセットを使用している可能性がありますが、わかりません。私は間違って何をしていますか?

このコードは動作します:

var cubeGeometry = new THREE.CubeGeometry(1,1,1); 
var material = new THREE.MeshPhongMaterial({color: 0x000044}); 
var cube = new THREE.Mesh(cubeGeometry, material); 
cube.position.z = 10; 
scene.add(cube); 

そしてbuffergeometryキューブを作成するため、このコードにはない:

squareMat = new THREE.MeshPhongMaterial({ 
    color: 0x0000ff, 
    vertexColors: THREE.FaceColors 
}); 

for (i = 0; i < verts.length; i += 4) { 
    //set 4 points 
    a = verts[i]; 
    b = verts[i + 1]; 
    c = verts[i + 2]; 
    d = verts[i + 3]; 


    for (j = 0; j < a.length; j += 1) { 
     a[j] = (a[j] * cubesize) + offsets[j]; 
     b[j] = (b[j] * cubesize) + offsets[j]; 
     c[j] = (c[j] * cubesize) + offsets[j]; 
     d[j] = (d[j] * cubesize) + offsets[j]; 
    } 

    vol.vertices.push(new THREE.Vector3(a[0], a[1], a[2])); 
    vol.vertices.push(new THREE.Vector3(b[0], b[1], b[2])); 
    vol.vertices.push(new THREE.Vector3(c[0], c[1], c[2])); 
    vol.vertices.push(new THREE.Vector3(d[0], d[1], d[2])); 

    idx = i/2; 
    face1 = faces[idx]; 
    face2 = faces[idx + 1]; 
    colval = face1[3]; 

    facecolor = new THREE.Color(colval); 

    f1 = new THREE.Face3(face1[0], face1[1], face1[2]); 
    f2 = new THREE.Face3(face2[0], face2[1], face2[2]); 
    f1.color = facecolor; 
    f2.color = facecolor; 
    vol.faces.push(f1); 
    vol.faces.push(f2); 
} 
bufferVol = new THREE.BufferGeometry().fromGeometry(vol); 
volMesh = new THREE.Mesh(bufferVol, squareMat); 
scene.add(volMesh); 
+2

シーンに光源がありますか? – prisoner849

+2

basicMaterialが機能し、他のものは間違っているか、欠落している法線や欠けている光源である可能性があります。 –

答えて

0

それは法線がありませんでした。私がbufferVol.computeVertexNormals()を呼び出したとき。それは働いた。マーティンありがとう!

関連する問題