设置物体轮廓发光
< script setup >
import * as THREE from 'three' ;
import { OrbitControls } from 'three/addons/controls/OrbitControls.js' ;
import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js' ;
import { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass.js' ;
import { OutlinePass } from 'three/examples/jsm/postprocessing/OutlinePass.js' ;
const scene = new THREE. Scene ( ) ;
const cubeGeometry = new THREE. BoxGeometry ( 1 , 1 , 1 ) ;
const cubeMaterial = new THREE. MeshBasicMaterial ( { color: 0xffff00 } ) ;
const cube = new THREE. Mesh ( cubeGeometry, cubeMaterial) ;
cube. position. set ( 5 , 0 , 0 ) ;
scene. add ( cube) ; const torusKnotGeometry = new THREE. TorusKnotGeometry ( 1 , 0.35 , 100 , 16 ) ;
const torusKnotMaterial = new THREE. MeshBasicMaterial ( { color: 0x00ffff } ) ;
const torusKnot = new THREE. Mesh ( torusKnotGeometry, torusKnotMaterial) ;
torusKnot. position. set ( 0 , 0 , 0 ) ;
scene. add ( torusKnot) ;
const camera = new THREE. PerspectiveCamera ( 75 , window. innerWidth / window. innerHeight, 0.1 , 1000 ) ;
camera. position. set ( 0 , 0 , 10 ) ;
const axesHelper = new THREE. AxesHelper ( 5 ) ;
scene. add ( axesHelper) ;
const renderer = new THREE. WebGLRenderer ( { antialias: true
} ) ;
renderer. setSize ( window. innerWidth, window. innerHeight) ;
document. body. appendChild ( renderer. domElement) ;
const controls = new OrbitControls ( camera, renderer. domElement) ;
controls. enableDamping = true
const composer = new EffectComposer ( renderer) ;
const renderPass = new RenderPass ( scene, camera) ;
composer. addPass ( renderPass) ;
const outlinePass = new OutlinePass ( new THREE. Vector2 ( window. innerWidth, window. innerHeight) , scene, camera
) ;
outlinePass. edgeStrength = 10 ;
outlinePass. edgeGlow = 1 ;
outlinePass. edgeThickness = 2 ;
outlinePass. pulsePeriod = 5 ;
outlinePass. visibleEdgeColor = new THREE. Color ( 0xff3333 ) ;
outlinePass. hiddenEdgeColor = new THREE. Color ( 0x000000 ) ;
composer. addPass ( outlinePass) ;
outlinePass. selectedObjects = [ torusKnot]
window. addEventListener ( 'click' , ( e ) => { outlinePass. selectedObjects = [ cube] ;
} )
const clock = new THREE. Clock ( )
function render ( time ) { controls. update ( ) composer. render ( ) ; requestAnimationFrame ( render) ;
}
render ( )
window. addEventListener ( 'resize' , ( ) => { camera. aspect = window. innerWidth / window. innerHeight; camera. updateProjectionMatrix ( ) ; renderer. setSize ( window. innerWidth, window. innerHeight) ; renderer. setPixelRatio ( window. devicePixelRatio)
} )
</ script>
设置物体泛光
< script setup >
import * as THREE from 'three' ;
import { OrbitControls } from 'three/addons/controls/OrbitControls.js' ;
import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js' ;
import { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass.js' ;
import { OutlinePass } from 'three/examples/jsm/postprocessing/OutlinePass.js' ;
import { UnrealBloomPass } from 'three/examples/jsm/postprocessing/UnrealBloomPass.js' ;
const scene = new THREE. Scene ( ) ;
const cubeGeometry = new THREE. BoxGeometry ( 1 , 1 , 1 ) ;
const cubeMaterial = new THREE. MeshBasicMaterial ( { color: 0xffff00 } ) ;
const cube = new THREE. Mesh ( cubeGeometry, cubeMaterial) ;
cube. position. set ( 5 , 0 , 0 ) ;
cube. layers. set ( 1 )
scene. add ( cube) ; const torusKnotGeometry = new THREE. TorusKnotGeometry ( 1 , 0.35 , 100 , 16 ) ;
const torusKnotMaterial = new THREE. MeshBasicMaterial ( { color: 0x00ffff } ) ;
const torusKnot = new THREE. Mesh ( torusKnotGeometry, torusKnotMaterial) ;
torusKnot. position. set ( 0 , 0 , 0 ) ;
scene. add ( torusKnot) ;
const camera = new THREE. PerspectiveCamera ( 75 , window. innerWidth / window. innerHeight, 0.1 , 1000 ) ;
camera. position. set ( 0 , 0 , 10 ) ;
const axesHelper = new THREE. AxesHelper ( 5 ) ;
scene. add ( axesHelper) ;
const renderer = new THREE. WebGLRenderer ( { antialias: true ,
} ) ;
renderer. setSize ( window. innerWidth, window. innerHeight) ;
renderer. autoClear = false ;
document. body. appendChild ( renderer. domElement) ;
const controls = new OrbitControls ( camera, renderer. domElement) ;
controls. enableDamping = true
const composer = new EffectComposer ( renderer) ;
const renderPass = new RenderPass ( scene, camera) ;
composer. addPass ( renderPass) ;
const unrealBloomPass = new UnrealBloomPass ( new THREE. Vector2 ( window. innerWidth, window. innerHeight) , 0.5 , 0.5 , 0.5
)
composer. addPass ( unrealBloomPass) ;
window. addEventListener ( 'click' , ( e ) => { if ( cube. layers. mask === 1 ) { cube. layers. set ( 1 ) ; } else { cube. layers. set ( 0 ) ; }
} )
const clock = new THREE. Clock ( )
function render ( time ) { controls. update ( ) renderer. clear ( ) ; camera. layers. set ( 0 ) ; composer. render ( ) ; renderer. clearDepth ( ) ; camera. layers. set ( 1 ) ; renderer. render ( scene, camera) ; requestAnimationFrame ( render) ;
}
render ( )
window. addEventListener ( 'resize' , ( ) => { camera. aspect = window. innerWidth / window. innerHeight; camera. updateProjectionMatrix ( ) ; renderer. setSize ( window. innerWidth, window. innerHeight) ; renderer. setPixelRatio ( window. devicePixelRatio)
} )
</ script>