Smooth shading on perspective spheres

This commit is contained in:
Thomas FORGIONE 2015-04-08 12:26:38 +02:00
parent 260bc4f97b
commit 729aaa09c2
3 changed files with 35 additions and 1 deletions

View File

@ -0,0 +1,30 @@
var toGeometry = function (bg) {
// The following snipped is from Mattatz - Masatatsu Nakamura http://mattatz.org
var attrib = bg.getAttribute('position');
if(attrib === undefined) {
throw new Error('a given BufferGeometry object must have a position attribute.');
}
var positions = attrib.array;
var vertices = [];
for(var i = 0, n = positions.length; i < n; i += 3) {
var x = positions[i];
var y = positions[i + 1];
var z = positions[i + 2];
vertices.push(new THREE.Vector3(x, y, z));
}
var faces = [];
for(var i = 0, n = vertices.length; i < n; i += 3) {
faces.push(new THREE.Face3(i, i + 1, i + 2));
}
var geometry = new THREE.Geometry();
geometry.vertices = vertices;
geometry.faces = faces;
geometry.computeFaceNormals();
return geometry;
}

View File

@ -20,6 +20,7 @@
<script src="/js/FixedCamera.js"></script> <script src="/js/FixedCamera.js"></script>
<script src="/js/CameraContainer.js"></script> <script src="/js/CameraContainer.js"></script>
<script src="/js/Tools.js"></script> <script src="/js/Tools.js"></script>
<script src="/js/BufferGeometryToGeometry.js"></script>
<script src="js/main.js"></script> <script src="js/main.js"></script>
</body> </body>

View File

@ -135,11 +135,14 @@ function loadScene() {
if (child instanceof THREE.Mesh ) { if (child instanceof THREE.Mesh ) {
child.material.color.setHex(colors[i]); child.material.color.setHex(colors[i]);
child.up = new THREE.Vector3(0,0,1); child.up = new THREE.Vector3(0,0,1);
child.geometry.computeVertexNormals();
child.translateX(positions[i].x); child.translateX(positions[i].x);
child.translateY(positions[i].y); child.translateY(positions[i].y);
child.translateZ(positions[i].z); child.translateZ(positions[i].z);
new_id = child.id; new_id = child.id;
child.geometry = toGeometry(child.geometry);
child.geometry.mergeVertices();
child.geometry.computeFaceNormals();
child.geometry.computeVertexNormals();
} }
}); });
spheres[i] = object; spheres[i] = object;