three+gsap实现三维圆点构成的地球旋转动画效果代码

代码语言:html

所属分类:三维

代码描述:three+gsap实现三维圆点构成的地球旋转动画效果代码,单击增加圆点及旋转坐标。

代码标签: three gsap 三维 圆点 地球 旋转 动画

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en" >
<head>
  <meta charset="UTF-8">
<style>
    body {
  padding: 0;
  margin: 0;
}
.title {
	position: fixed;
	top: 7px;
	color: #ddd;
	font-family: sans-serif;
	width: 100%;
	text-align: center;
	opacity: 0;
}
.demo {
  width: 100%;
  height: 100vh;
  display: flex;
  justify-content: center;
  align-items: center;
  background-color: #1C1C1E;
}
#globe-3d, #globe-2d-overlay, #globe-popup-overlay, .globe-popup {
  display: block;
  position: absolute;
}
#globe-2d-overlay, #globe-popup-overlay {
  pointer-events: none;
}
.globe-popup-overlay {
  width: 100%;
  height: 100%;
  opacity: 0;
}
.globe-popup {
  top: 0;
  left: 0;
  background-color: rgba(75, 192, 200, .9);
  opacity: 0;
  color: #111;
  font-family: sans-serif;
  font-weight: bold;
  padding: 5px 10px;
  font-size: 15px;
  border-radius: 3px;
}
</style>

</head>
<body>
<!-- partial:index.partial.html -->
<div class="title">单击地球增加点</div>
<div class="demo">
    <div class="animation-wrapper">
        <canvas id="globe-3d"></canvas>
        <canvas id="globe-2d-overlay"></canvas>
        <div id="globe-popup-overlay">
            <div class="globe-popup"></div>
        </div>
    </div>
</div>


<script type="x-shader/x-fragment" id="fragment-shader-map">
    uniform vec3 u_color_main;

    varying float vOpacity;

    float circle(vec2 st, float r) {
        vec2 dist = st - vec2(.5);
        return 1. - smoothstep(.99 * r, 1.01 * r, dot(dist, dist) * 4.);
    }

    void main() {
        float dot = circle(gl_PointCoord.xy, .7);
        if (dot < 0.5) discard;
        gl_FragColor = vec4(u_color_main, dot * vOpacity);
    }
</script>

<script type="x-shader/x-vertex" id="vertex-shader-map">
    uniform sampler2D u_visibility;
    uniform float u_size;
    uniform float u_time_since_click;
    uniform vec3 u_clicked;

    varying float vOpacity;

    void main() {

        // mask with world map
        float visibility = 1. - step(.4, texture2D(u_visibility, uv).x);
        gl_PointSize = visibility * u_size;

        // add ripple
        float time = u_time_since_click;
        float dist = length(position - u_clicked);
        float damping = pow(1. - sin(min(time, 1.)), 5.);
        float wave = (1. + sin(3. * dist + 13. * time));
        float delta = -.025 * damping * wave;

        // .........完整代码请登录后点击上方下载按钮下载查看

网友评论0