add fiddle showing normal defects with indexed geometry
This commit is contained in:
parent
19721b0dcc
commit
a7e0867d8c
1 changed files with 138 additions and 0 deletions
138
web/mesh/fiddle.html
Normal file
138
web/mesh/fiddle.html
Normal file
|
|
@ -0,0 +1,138 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
body, div {
|
||||||
|
border: 0;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script>self.module = { exports: {} }</script>
|
||||||
|
<script src="/src/main/gapp.js"></script>
|
||||||
|
<script src="/src/ext/three.js"></script>
|
||||||
|
<script src="/src/add/three.js"></script>
|
||||||
|
<script src="/src/moto/orbit.js"></script>
|
||||||
|
<script>
|
||||||
|
let camera, scene, renderer, controls;
|
||||||
|
let material, mesh;
|
||||||
|
let vertices, indices;
|
||||||
|
let unindexed, indexed;
|
||||||
|
|
||||||
|
function light(i, x, y, z) {
|
||||||
|
let l = new THREE.PointLight(0xffffff, i);
|
||||||
|
l.position.set(x,y,z);
|
||||||
|
return l;
|
||||||
|
}
|
||||||
|
|
||||||
|
function init() {
|
||||||
|
scene = new THREE.Scene();
|
||||||
|
camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 1, 10000);
|
||||||
|
camera.position.z = 15;
|
||||||
|
|
||||||
|
scene.add(camera);
|
||||||
|
scene.add(new THREE.AmbientLight(0xffffff, 0.2));
|
||||||
|
scene.add(light(0.2, 30, 0, 0));
|
||||||
|
scene.add(light(0.2, -30, 0, 0));
|
||||||
|
scene.add(light(0.2, 0, 30, 0));
|
||||||
|
scene.add(light(0.2, 0, -30, 0));
|
||||||
|
scene.add(light(0.2, 0, 0, 30));
|
||||||
|
scene.add(light(0.2, 0, 0, -30));
|
||||||
|
|
||||||
|
vertices = Float32Array.from([
|
||||||
|
-2, -2, -2,
|
||||||
|
-2, 2, -2,
|
||||||
|
2, 2, -2,
|
||||||
|
2, -2, -2,
|
||||||
|
-2, -2, 2,
|
||||||
|
-2, 2, 2,
|
||||||
|
2, 2, 2,
|
||||||
|
2, -2, 2,
|
||||||
|
]);
|
||||||
|
|
||||||
|
indices = Uint32Array.from([
|
||||||
|
0, 1, 2, // bottom
|
||||||
|
0, 2, 3,
|
||||||
|
6, 5, 4, // top
|
||||||
|
7, 6, 4,
|
||||||
|
0, 4, 1, // side 1
|
||||||
|
1, 4, 5,
|
||||||
|
2, 6, 3, // side 2
|
||||||
|
3, 6, 7
|
||||||
|
]);
|
||||||
|
|
||||||
|
// generate full vertices list (non-indexed)
|
||||||
|
let vertall = [];
|
||||||
|
for (let i of indices) {
|
||||||
|
vertall = vertall.concat([...vertices].slice(i*3,i*3+3));
|
||||||
|
}
|
||||||
|
vertall = Float32Array.from(vertall);
|
||||||
|
|
||||||
|
material = new THREE.MeshPhongMaterial({
|
||||||
|
side: THREE.DoubleSide,
|
||||||
|
shininess: 100,
|
||||||
|
specular: 0x404040,
|
||||||
|
transparent: false,
|
||||||
|
color: 0xffff00,
|
||||||
|
opacity: 0.5
|
||||||
|
});
|
||||||
|
|
||||||
|
// non-indexed geometry
|
||||||
|
unindexed = new THREE.BufferGeometry()
|
||||||
|
.setAttribute('position', new THREE.BufferAttribute(vertall, 3));
|
||||||
|
unindexed.computeVertexNormals();
|
||||||
|
|
||||||
|
// mesh with non-indexed geometry
|
||||||
|
let meshU = new THREE.Mesh(unindexed, material);
|
||||||
|
meshU.add(new THREE.Mesh(
|
||||||
|
unindexed.clone(), new THREE.MeshBasicMaterial({
|
||||||
|
wireframe: true,
|
||||||
|
color: 0xffff00
|
||||||
|
})
|
||||||
|
));
|
||||||
|
scene.add(meshU);
|
||||||
|
meshU.position.y = 2.5;
|
||||||
|
|
||||||
|
// indexed geometry
|
||||||
|
indexed = new THREE.BufferGeometry()
|
||||||
|
.setAttribute('position', new THREE.BufferAttribute(vertices, 3))
|
||||||
|
.setIndex(new THREE.BufferAttribute(indices, 1));
|
||||||
|
indexed.computeVertexNormals();
|
||||||
|
|
||||||
|
// mesh with indexed geometry
|
||||||
|
let meshI = new THREE.Mesh(indexed, material);
|
||||||
|
meshI.add(new THREE.Mesh(
|
||||||
|
indexed.clone(), new THREE.MeshBasicMaterial({
|
||||||
|
wireframe: true,
|
||||||
|
color: 0xffff00
|
||||||
|
})
|
||||||
|
));
|
||||||
|
scene.add(meshI);
|
||||||
|
meshI.position.y = -2.5;
|
||||||
|
|
||||||
|
renderer = new THREE.WebGLRenderer({
|
||||||
|
antialias: true,
|
||||||
|
preserveDrawingBuffer: true,
|
||||||
|
logarithmicDepthBuffer: true
|
||||||
|
});
|
||||||
|
|
||||||
|
controls = new moto.Orbit(camera, renderer.domElement);
|
||||||
|
controls.update();
|
||||||
|
|
||||||
|
renderer.setSize(window.innerWidth, window.innerHeight);
|
||||||
|
document.body.appendChild(renderer.domElement);
|
||||||
|
|
||||||
|
animate();
|
||||||
|
}
|
||||||
|
|
||||||
|
function animate() {
|
||||||
|
requestAnimationFrame(animate);
|
||||||
|
render();
|
||||||
|
}
|
||||||
|
|
||||||
|
function render() {
|
||||||
|
renderer.render(scene, camera);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body onload="init()"></body>
|
||||||
|
</html>
|
||||||
Loading…
Reference in a new issue