|
@@ -13,19 +13,21 @@
|
|
import * as THREE from '../build/three.module.js';
|
|
import * as THREE from '../build/three.module.js';
|
|
|
|
|
|
import { OrbitControls } from './jsm/controls/OrbitControls.js';
|
|
import { OrbitControls } from './jsm/controls/OrbitControls.js';
|
|
- import { OBJLoader } from "./jsm/loaders/OBJLoader.js";
|
|
|
|
- import { BufferGeometryUtils } from "./jsm/utils/BufferGeometryUtils.js";
|
|
|
|
- import { EdgeSplitModifier } from "./jsm/modifiers/EdgeSplitModifier.js";
|
|
|
|
|
|
+ import { OBJLoader } from './jsm/loaders/OBJLoader.js';
|
|
|
|
+ import { BufferGeometryUtils } from './jsm/utils/BufferGeometryUtils.js';
|
|
|
|
+ import { EdgeSplitModifier } from './jsm/modifiers/EdgeSplitModifier.js';
|
|
|
|
|
|
- import { GUI } from "./jsm/libs/dat.gui.module.js";
|
|
|
|
|
|
+ import { GUI } from './jsm/libs/dat.gui.module.js';
|
|
|
|
|
|
let renderer, scene, camera;
|
|
let renderer, scene, camera;
|
|
let modifier, mesh, baseGeometry;
|
|
let modifier, mesh, baseGeometry;
|
|
|
|
+ let map;
|
|
|
|
|
|
const params = {
|
|
const params = {
|
|
smoothShading: true,
|
|
smoothShading: true,
|
|
edgeSplit: true,
|
|
edgeSplit: true,
|
|
cutOffAngle: 20,
|
|
cutOffAngle: 20,
|
|
|
|
+ showMap: true,
|
|
};
|
|
};
|
|
|
|
|
|
init();
|
|
init();
|
|
@@ -63,10 +65,11 @@
|
|
'./models/obj/cerberus/Cerberus.obj',
|
|
'./models/obj/cerberus/Cerberus.obj',
|
|
function ( group ) {
|
|
function ( group ) {
|
|
|
|
|
|
|
|
+ const cerberus = group.children[ 0 ];
|
|
|
|
+
|
|
// Retrieve Cerberus vertex positions only
|
|
// Retrieve Cerberus vertex positions only
|
|
- const modelGeometry = group.children[ 0 ].geometry;
|
|
|
|
|
|
+ const modelGeometry = cerberus.geometry;
|
|
modelGeometry.deleteAttribute( 'normal' );
|
|
modelGeometry.deleteAttribute( 'normal' );
|
|
- modelGeometry.deleteAttribute( 'uv' );
|
|
|
|
|
|
|
|
modifier = new EdgeSplitModifier();
|
|
modifier = new EdgeSplitModifier();
|
|
baseGeometry = modelGeometry;
|
|
baseGeometry = modelGeometry;
|
|
@@ -78,6 +81,13 @@
|
|
mesh.translateZ( 1.5 );
|
|
mesh.translateZ( 1.5 );
|
|
scene.add( mesh );
|
|
scene.add( mesh );
|
|
|
|
|
|
|
|
+ if ( map !== undefined && params.showMap ) {
|
|
|
|
+
|
|
|
|
+ mesh.material.map = map;
|
|
|
|
+ mesh.material.needsUpdate = true;
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
render();
|
|
render();
|
|
|
|
|
|
}
|
|
}
|
|
@@ -85,12 +95,26 @@
|
|
|
|
|
|
window.addEventListener( 'resize', onWindowResize, false );
|
|
window.addEventListener( 'resize', onWindowResize, false );
|
|
|
|
|
|
|
|
+ new THREE.TextureLoader().load( './models/obj/cerberus/Cerberus_A.jpg', function ( texture ) {
|
|
|
|
+
|
|
|
|
+ map = texture;
|
|
|
|
+
|
|
|
|
+ if ( mesh !== undefined && params.showMap ) {
|
|
|
|
+
|
|
|
|
+ mesh.material.map = map;
|
|
|
|
+ mesh.material.needsUpdate = true;
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ } );
|
|
|
|
|
|
- const gui = new GUI( { name: "Edge split modifier parameters" } );
|
|
|
|
|
|
|
|
- gui.add( params, "smoothShading" ).onFinishChange( updateMesh );
|
|
|
|
- gui.add( params, "edgeSplit" ).onFinishChange( updateMesh );
|
|
|
|
- gui.add( params, "cutOffAngle" ).min( 0 ).max( 180 ).onFinishChange( updateMesh );
|
|
|
|
|
|
+ const gui = new GUI( { name: 'Edge split modifier parameters' } );
|
|
|
|
+
|
|
|
|
+ gui.add( params, 'showMap' ).onFinishChange( updateMesh );
|
|
|
|
+ gui.add( params, 'smoothShading' ).onFinishChange( updateMesh );
|
|
|
|
+ gui.add( params, 'edgeSplit' ).onFinishChange( updateMesh );
|
|
|
|
+ gui.add( params, 'cutOffAngle' ).min( 0 ).max( 180 ).onFinishChange( updateMesh );
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
@@ -129,12 +153,25 @@
|
|
|
|
|
|
function updateMesh() {
|
|
function updateMesh() {
|
|
|
|
|
|
- mesh.geometry = getGeometry();
|
|
|
|
|
|
+ if ( mesh !== undefined ) {
|
|
|
|
|
|
- mesh.material.flatShading = params.smoothShading === false;
|
|
|
|
- mesh.material.needsUpdate = true;
|
|
|
|
|
|
+ mesh.geometry = getGeometry();
|
|
|
|
|
|
- render();
|
|
|
|
|
|
+ let needsUpdate = mesh.material.flatShading === params.smoothShading;
|
|
|
|
+ mesh.material.flatShading = params.smoothShading === false;
|
|
|
|
+
|
|
|
|
+ if ( map !== undefined ) {
|
|
|
|
+
|
|
|
|
+ needsUpdate = needsUpdate || mesh.material.map !== ( params.showMap ? map : null );
|
|
|
|
+ mesh.material.map = params.showMap ? map : null;
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ mesh.material.needsUpdate = needsUpdate;
|
|
|
|
+
|
|
|
|
+ render();
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|