1 Star 0 Fork 0

lei2sf/AR-Examples

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
water-effect.html 4.22 KB
一键复制 编辑 原始数据 按行查看 历史
Lee Stemkoski 提交于 2018-05-31 11:16 . Adding more examples
<!DOCTYPE html>
<head>
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
<title>Hello, world!</title>
<!-- include three.js library -->
<script src='js/three.js'></script>
</head>
<body style='margin : 0px; overflow: hidden; font-family: Monospace;'>
<!--
Example created by Lee Stemkoski: https://github.com/stemkoski
-->
<!-- ---------------- Custom Shader Code ------------------------ -->
<script id="vertexShader" type="x-shader/x-vertex">
uniform float time;
varying vec2 textureUV;
uniform sampler2D baseTexture;
void main()
{
textureUV = uv;
vec2 repeatUV = textureUV * vec2(4.0, 1.0);
float sideDisplacement = 0.0;
// side displacement only applied near edge of texture
if (repeatUV.y < 0.15)
{
float angle = atan(position.y, position.x);
float s1 = sin(8.3 * angle);
float s2 = sin(7.1 * angle);
sideDisplacement = 0.08 * s1 * s1 * abs(sin(0.65*time)) + 0.09 * s2 * s2 * abs(sin(0.74*time));
}
vec3 newPosition = position + normal * sideDisplacement;
gl_Position = projectionMatrix * modelViewMatrix * vec4( newPosition, 1.0 );
}
</script>
<script id="fragmentShader" type="x-shader/x-vertex">
uniform float time;
uniform sampler2D baseTexture;
varying vec2 textureUV;
void main()
{
vec2 repeatUV = textureUV * vec2(4.0, 1.0);
// displacement creates scrolling effect on texture
vec2 displaceUV = repeatUV + vec2(0.0, time/20.0);
float alpha = 1.0;
// transparency only applied near edge of texture
if (repeatUV.y < 0.15)
alpha = 1.0/0.15 * repeatUV.y;
vec4 tintColor = texture2D( baseTexture, displaceUV ) * vec4( 1.0, 1.0, 1.0, alpha );
gl_FragColor = tintColor;
}
</script>
<!-- ----------------------------------------------------------- -->
<script>
var scene, camera, renderer, clock, deltaTime, totalTime;
var arToolkitSource, arToolkitContext;
var markerRoot1;
var material1, mesh1;
initialize();
animate();
function initialize()
{
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 0.1, 1000 );
camera.position.set(0, 2, 4);
camera.lookAt( scene.position );
scene.add( camera );
let ambientLight = new THREE.AmbientLight( 0xcccccc, 1.00 );
scene.add( ambientLight );
renderer = new THREE.WebGLRenderer({
antialias : true,
alpha: false
});
renderer.setClearColor(new THREE.Color('lightgrey'), 0)
renderer.setSize( window.innerWidth, window.innerHeight );
renderer.domElement.style.position = 'absolute'
renderer.domElement.style.top = '0px'
renderer.domElement.style.left = '0px'
document.body.appendChild( renderer.domElement );
window.addEventListener( 'resize', onWindowResize, false );
clock = new THREE.Clock();
deltaTime = 0;
totalTime = 0;
let geometry1 = new THREE.TorusGeometry(1.25,1.25, 64, 256); // radius, tube radius
let loader = new THREE.TextureLoader();
let texture = loader.load( 'images/water-2.jpg' );
// let texture = loader.load( 'images/color-grid.png' );
// repeat texture
texture.wrapS = THREE.RepeatWrapping;
texture.wrapT = THREE.RepeatWrapping;
texture.repeat.set(8,2);
// Shader-based material
material1 = new THREE.ShaderMaterial({
uniforms: {
time: { value: 1.0 },
baseTexture: { value: texture },
},
vertexShader: document.getElementById( 'vertexShader' ).textContent,
fragmentShader: document.getElementById( 'fragmentShader' ).textContent,
transparent: true,
});
mesh1 = new THREE.Mesh( geometry1, material1 );
mesh1.rotation.x = -Math.PI/2;
mesh1.scale.z = 0.10;
scene.add( mesh1 );
// floor
let floorG = new THREE.PlaneGeometry(10,10,1,1);
let floorT = loader.load( 'images/sand.jpg' );
let floorM = new THREE.MeshBasicMaterial({map: floorT});
let floor = new THREE.Mesh(floorG, floorM);
floor.rotation.x = -Math.PI/2;
scene.add(floor);
}
function update()
{
material1.uniforms.time.value += deltaTime;
}
function render()
{
renderer.render( scene, camera );
}
function animate()
{
requestAnimationFrame(animate);
deltaTime = clock.getDelta();
totalTime += deltaTime;
update();
render();
}
function onWindowResize()
{
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize( window.innerWidth, window.innerHeight );
}
</script>
</body>
</html>
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/lei2sf/AR-Examples.git
[email protected]:lei2sf/AR-Examples.git
lei2sf
AR-Examples
AR-Examples
master

搜索帮助