Skip to content

Commit 54eabc2

Browse files
committed
Added double material for meshes in demos
1 parent fa42d90 commit 54eabc2

3 files changed

Lines changed: 36 additions & 17 deletions

File tree

examples/ExtractContours.ts

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import {GUI} from 'dat.gui';
2-
import { AmbientLight, BufferGeometry, DoubleSide, Float32BufferAttribute,
2+
import { AmbientLight, BackSide, BufferGeometry, Float32BufferAttribute,
3+
FrontSide,
34
LineBasicMaterial, LineDashedMaterial, LineSegments, Mesh, MeshPhongMaterial, PerspectiveCamera,
45
PointLight, Scene, WebGLRenderer } from 'three';
56
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
@@ -15,7 +16,7 @@ const params = {
1516
showHidden: true,
1617
}
1718

18-
const bgColor = 0x555555;
19+
const bgColor = 0x444444;
1920

2021
// Init renderer
2122
const renderer = new WebGLRenderer({ antialias: true });
@@ -63,13 +64,20 @@ window.addEventListener('resize', function () {
6364
}, false);
6465

6566
// Init mesh
66-
const meshMaterial = new MeshPhongMaterial({
67-
color: 0x777777,
67+
const meshFrontMaterial = new MeshPhongMaterial({
68+
color: 0x555577,
6869
flatShading: true,
69-
side: DoubleSide,
70+
side: FrontSide,
7071
});
71-
const mesh = new Mesh(new BufferGeometry(), meshMaterial);
72+
const meshBackMaterial = new MeshPhongMaterial({
73+
color: 0x333355,
74+
flatShading: true,
75+
side: BackSide,
76+
})
77+
const mesh = new Mesh(new BufferGeometry(), meshFrontMaterial);
78+
const backMesh = new Mesh(mesh.geometry, meshBackMaterial);
7279
scene.add(mesh);
80+
scene.add(backMesh);
7381

7482
// Init half edges visualizations
7583
const silhouetteGeometry = new BufferGeometry();
@@ -197,13 +205,15 @@ function updateHolesGui() {
197205

198206
function shapeChanged() {
199207
setupMeshGeometry(mesh, params.shape);
208+
backMesh.geometry = mesh.geometry;
200209
updateHolesGui();
201210
build();
202211
}
203212

204213
const debounceBuild = debounce(200, () => {
205214
struct.clear();
206215
setupMeshGeometry(mesh, params.shape);
216+
backMesh.geometry = mesh.geometry;
207217
removeTrianglesFromGeometry(mesh.geometry, params.holes);
208218
struct.buildFromGeometry(mesh.geometry);
209219
updateContours();

examples/HalfedgeDSVisualisation.ts

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import {GUI} from 'dat.gui';
2-
import { AmbientLight, BufferGeometry, Color, DoubleSide, Float32BufferAttribute,
2+
import { AmbientLight, BackSide, BufferGeometry, Color, Float32BufferAttribute,
3+
FrontSide,
34
LineBasicMaterial, LineSegments, Mesh, MeshPhongMaterial, PerspectiveCamera,
45
PointLight, Scene, Triangle, Vector3, WebGLRenderer } from 'three';
56
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
@@ -11,10 +12,10 @@ const struct = new HalfedgeDS();
1112

1213
const params = {
1314
shape: Shape.Sphere,
14-
holes: 0,
15+
holes: 30,
1516
}
1617

17-
const bgColor = 0x555555;
18+
const bgColor = 0x444444;
1819

1920
// Init renderer
2021
const renderer = new WebGLRenderer({ antialias: true });
@@ -62,19 +63,25 @@ window.addEventListener('resize', function () {
6263
}, false);
6364

6465
// Init mesh
65-
const meshMaterial = new MeshPhongMaterial({
66-
color: 0x777777,
66+
const meshFrontMaterial = new MeshPhongMaterial({
67+
color: 0x555577,
6768
flatShading: true,
68-
side: DoubleSide,
69+
side: FrontSide,
6970
});
70-
const mesh = new Mesh(new BufferGeometry(), meshMaterial);
71+
const meshBackMaterial = new MeshPhongMaterial({
72+
color: 0x333355,
73+
flatShading: true,
74+
side: BackSide,
75+
})
76+
const mesh = new Mesh(new BufferGeometry(), meshFrontMaterial);
77+
const backMesh = new Mesh(mesh.geometry, meshBackMaterial);
7178
scene.add(mesh);
79+
scene.add(backMesh);
7280

7381
// Init half edges visualizations
7482
const structMaterial = new LineBasicMaterial({
7583
depthTest: true,
7684
depthWrite: false,
77-
side: DoubleSide,
7885
vertexColors: true,
7986
});
8087

@@ -182,20 +189,22 @@ function updateHolesGui() {
182189
const index = mesh.geometry.getIndex();
183190
const position = mesh.geometry.getAttribute('position');
184191
const nbOfFaces = index ? index.count/3 : position.count/3;
185-
holesGUI.max(nbOfFaces/3);
186-
params.holes = Math.min(params.holes, nbOfFaces/3);
192+
holesGUI.max(nbOfFaces/2);
193+
params.holes = Math.min(params.holes, nbOfFaces/2);
187194
holesGUI.setValue(params.holes);
188195
}
189196

190197
function shapeChanged() {
191198
setupMeshGeometry(mesh, params.shape);
199+
backMesh.geometry = mesh.geometry;
192200
updateHolesGui();
193201
build();
194202
}
195203

196204

197205
const debounceBuild = debounce(200, () => {
198206
setupMeshGeometry(mesh, params.shape);
207+
backMesh.geometry = mesh.geometry;
199208
removeTrianglesFromGeometry(mesh.geometry, params.holes);
200209
struct.clear();
201210
const startTime = performance.now();

examples/utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ export function removeTrianglesFromGeometry(
3434
const position = geometry.getAttribute('position');
3535

3636
const nTriangles = index ? index.count/3 : position.count/3;
37-
n = Math.min(n, nTriangles/3);
37+
n = Math.min(n, nTriangles/2);
3838

3939
if (n === 0) {
4040
return;

0 commit comments

Comments
 (0)