canvas+webgl实现三维神庙教堂内效果代码

代码语言:html

所属分类:三维

代码描述:canvas+webgl实现三维神庙教堂内效果代码

代码标签: canvas webgl 三维 神庙 教堂

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

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

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


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


  
</head>

<body translate="no">
  <canvas id="myCanvas"></canvas>
  
      <script >
const canvas = document.getElementById('myCanvas');
const gl = canvas.getContext('webgl2');

const vertexShaderSource = `#version 300 es

in vec2 a_position;

void main() {
    gl_Position = vec4(a_position, 0.0, 1.0);
}
`;

const fragmentShaderSource = `#version 300 es

precision highp float;

uniform vec2 iResolution; // Declare as vec2 (canvas width and height)
uniform vec2 iMouse;
uniform float iTime;

out vec4 fragColor;

// Shadertoy code here

#define PI 3.14159265359
#define RES iResolution
#define PT iMouse
#define smin smoothmin
#define smax smoothmax

float d0 = 120.;

// Signed distance function for a plane
float sdPlane(vec3 p, vec3 n, float h) {
  return dot(p, n) + h;
}

float sdCylinder(vec3 p, in float r, in float h, in int hAxis) {
  vec2 aR, aH;

  if (hAxis == 0) { // x-axis
    aR = p.yz, aH = vec2(p.x, 0.0);
  } else if (hAxis == 1) { // y-axis
    aR = p.xz, aH = vec2(p.y, 0.0);
  } else { // z-axis
    aR = p.xy, aH = vec2(p.z, 0.0);
  }

  vec2 d = vec2(length(aR) - r, abs(aH.x) - h / 2.0);

  // Return the distance to the cylinder
  return min(max(d.x, d.y), 0.0) + length(max(d, 0.0));
}

float sdCuboid(vec3 p, vec2 a, float h) {
  vec3 d = abs(p) - vec3(a.x, h, a.y);
  return length(max(d, 0.0)) + min(max(d.x, max(d.y, d.z)), 0.0);
}

float sdSphere(vec3 p, float r) {
  return length(p) - r;
}

float smoothmin(float d1, float d2, float k) {
  .........完整代码请登录后点击上方下载按钮下载查看

网友评论0