three+webgl实现三维立体熔岩灯代码

代码语言:html

所属分类:三维

代码描述:three+webgl实现三维立体熔岩灯代码

代码标签: three webgl 三维 立体 熔岩灯 代码

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

<!DOCTYPE html>
<html lang="en" >

<head>
  <meta charset="UTF-8">
  

  
  
  
<style>
body {
  overflow: hidden;
  margin: 0;
}
</style>


  
</head>

<body translate="no">
  <script type="importmap">
  {
    "imports": {
      "three": "https://unpkg.com/three@0.182.0/build/three.module.js",
      "three/addons/": "https://unpkg.com/three@0.182.0/examples/jsm/"
    }
  }
</script>
<script>
  let sdf = {
    pars_vertex:`
      varying vec3 vPosition;
      varying mat4 vProjMat;
      varying mat4 vModelViewMat;
      varying mat3 vNormalMatrix;
    `,
    vertex: `
      vPosition = position;
      vProjMat = projectionMatrix;
      vModelViewMat = modelViewMatrix;
      vNormalMatrix = normalMatrix;
    `,
    pars_fragment:`
      uniform float time;
      uniform vec3 camPos;
    
      varying vec3 vPosition;
      varying mat4 vProjMat;
      varying mat4 vModelViewMat;
      varying mat3 vNormalMatrix;
      
      #define MAX_STEPS 250
      #define MAX_DIST 100.
      #define SURF_DIST 1e-4

      mat2 Rot(float a) {
        float s = sin(a), c = cos(a);
        return mat2(c, -s, s, c);
      }

      vec2 opMin(vec2 a, vec2 b){
        return a.x < b.x ? a : b;
      }
      
      #<GetDist>
      
      vec2 RayMarch(vec3 ro, vec3 rd) {
        vec2 dO=vec2(0.);
        for(int i = 0; i < MAX_STEPS; i++) {
          vec3 p = ro + rd*dO.x;
          vec2 dS = GetDist(p);
          dO.x += dS.x;
          dO.y = dS.y;
          if(dO.x>MAX_DIST || dO.x<SURF_DIST) break;
        }
        return dO;
      }

      vec3 GetNormal(vec3 p) {
        float d = GetDist(p).x;
        vec2 e = vec2(SURF_DIST, 0.........完整代码请登录后点击上方下载按钮下载查看

网友评论0