扭曲的光盘

扭曲的光盘


更多有趣示例 尽在 知屋安砖社区

示例

在这里插入图片描述

HTML

<!--
Given to vertex shaders by Three.js:
"uniform mat4 modelMatrix;"
"uniform mat4 modelViewMatrix;"
"uniform mat4 projectionMatrix;"
"uniform mat4 viewMatrix;"
"uniform mat3 normalMatrix;"
"uniform vec3 cameraPosition;"
see: http://stackoverflow.com/questions/15663859/threejs-predefined-shader-attributes-uniforms
-->
<script type="text/x-glsl-es-vert" id="vertex">
      varying float vZ;
      uniform float time;
      void main() {
        vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );
        mvPosition.y += 20.0*sin(time*0.5+mvPosition.x/25.0);
        mvPosition.x += 30.0*cos(time*0.5+mvPosition.y/25.0);
        vec4 p = projectionMatrix * mvPosition;
        vZ = p.z;
        gl_Position = p;
      }
</script>

<!--
Given to fragment shaders by Three.js:
"uniform mat4 viewMatrix;"
"uniform vec3 cameraPosition;"
see: http://stackoverflow.com/questions/15663859/threejs-predefined-shader-attributes-uniforms
-->
<script type="text/x-glsl-es-vert" id="fragment">
      varying float vZ;
      uniform float time;
      uniform vec2 size;
      void main() {
        vec2 d = gl_FragCoord.xy - (0.5+0.01*sin(time))*size;
        float a = sin(time*0.3) * (2.0*3.14159);
        d += vec2(d.x*cos(a) + d.y*sin(a),
                 -d.x*sin(a) + d.y*cos(a));
        vec2 rg = vec2(1.0)-abs(d)/(0.5*size.yy);
        float b = abs(vZ) / 160.0;
        gl_FragColor = vec4(rg,b,1.0);
      }
</script>


JS

// Learning about shaders.
// Modified from http://fhtr.org/BasicsOfThreeJS/#27
  
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

var fov = 45; // camera field-of-view in degrees
var width = renderer.domElement.width;
var height = renderer.domElement.height;
var aspect = width / height; // view aspect ratio
var near = 1; // near clip plane
var far = 10000; // far clip plane
var camera = new THREE.PerspectiveCamera( fov, aspect, near, far );
camera.position.z = 160;
camera.position.y = 40;
camera.position.x = 40;
var scene = new THREE.Scene();

var uniforms = {
  time : { type: "f", value: 1.0 },
  size : { type: "v2", value: new THREE.Vector2(width,height) }
};
var cube = new THREE.Mesh(
  new THREE.SphereGeometry(50, 64, 64),
  //new THREE.MeshNormalMaterial();
  new THREE.ShaderMaterial({
    uniforms : uniforms,
    vertexShader : $('#vertex').text(),
    fragmentShader : $('#fragment').text()
  }));
scene.add(cube);

function animate() {
  requestAnimationFrame(animate);
  render();
}
function render() {
  uniforms.time.value += 0.03;
  cube.rotation.y += 0.005;
  cube.rotation.z += 0.008;
  renderer.clear();
  camera.lookAt(scene.position);
  renderer.render(scene, camera);
}  

// KICK IT OFF
animate();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值