基于three的3d悬浮切换图片效果
代码语言:html
所属分类:三维
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title> ThreeJS Texture Transition Hover Effect</title>
<style>
html,
body {
width: 100%;
height: 100%;
overflow: hidden;
margin: 0;
}
</style>
</head>
<body translate="no">
<canvas id="canvas"></canvas>
<script src='http://repo.bfw.wiki/bfwrepo/js/TweenMax.min.js'></script>
<script src='http://repo.bfw.wiki/bfwrepo/js/three.js'></script>
<script>
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value, enumerable: true, configurable: true, writable: true
});
} else {
obj[key] = value;
}return obj;
} /* Utils ------------------------------------------ */
const textureLoader = new THREE.TextureLoader();
/* Scene Subjects ----------------------------------------- */
class PlaneSubject {
constructor(scene) {
_defineProperty(this, "raycaster", new THREE.Raycaster()); _defineProperty(this, "scene", null);
const geometry = new THREE.PlaneBufferGeometry(5, 7);
const material = new THREE.ShaderMaterial({
vertexShader: `
varying vec2 vUv;
void main() {
vUv = uv;
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
}
`,
fragmentShader: `
precision highp float;
varying vec2 vUv;
uniform float dispFactor;
uniform sampler2D disp;
uniform sampler2D tex1;
uniform sampler2D tex2;
void main() {
vec2 uv = vUv;
vec4 disp = texture2D(disp, uv);
float r = dispFactor * (1.0 + 0.05 * 2.0) - 0.05;
float mixit = clamp((disp.r - r) * (1.0 / 0.05), 0.0, 1.0);
vec4 _tex1 = texture2D(tex1, uv);
vec4 _tex2 = texture2D(tex2, uv);
if (_tex1.a < 0.5)discard;
if (_tex2.a < 0.5)discard;
gl_FragColor = mix(_tex2, _tex1, mixit);
}
`,
uniforms: {
dispFactor: {
type: 'f',
value: 0.0
},
tex1: {
type: 't',
value: textureLoader.load('https://images.unsplash.com/photo-1515.........完整代码请登录后点击上方下载按钮下载查看
网友评论0