3.js - 使用着色器实现各种图形

有更多案例,私我

main.js

import * as THREE from 'three'
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls'
import * as dat from 'dat.gui'
import { GUI } from 'three/examples/jsm/libs/lil-gui.module.min.js'// @ts-ignore
import basicVertexShader from './shader/11-02/deep/vertexShader.glsl?raw'
// @ts-ignore
import basicFragmentShader from './shader/11-02/deep/fragmentShader.glsl?raw'const scene = new THREE.Scene()
// scene.background = new THREE.Color('#ffffff')const camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000)
camera.aspect = window.innerWidth / window.innerHeight
camera.position.set(0, 0, 10)const axesHelper = new THREE.AxesHelper(2)
scene.add(axesHelper)// --------------------------------------------------------------------const textureLoader = new THREE.TextureLoader()
let texture = textureLoader.load('../public/assets/texture/ca.jpeg')// 创建着色器材质
const shaderMaterial = new THREE.ShaderMaterial({vertexShader: basicVertexShader,fragmentShader: basicFragmentShader,uniforms: {// 动画时间uTime: {value: 0},uTexture: {value: texture}},side: THREE.DoubleSide,transparent: true
})const floor = new THREE.Mesh(new THREE.PlaneGeometry(1, 1, 64, 64), shaderMaterial)
scene.add(floor)// --------------------------------------------------------------------const renderer = new THREE.WebGLRenderer({ alpha: true })
renderer.setSize(window.innerWidth, window.innerHeight)
document.body.appendChild(renderer.domElement)const controls = new OrbitControls(camera, renderer.domElement)
controls.enableDamping = trueconst clock = new THREE.Clock()
const render = () => {let time = clock.getElapsedTime()shaderMaterial.uniforms.uTime.value = time// controls.update()requestAnimationFrame(render)renderer.render(scene, camera)
}
render()window.addEventListener('resize', () => {// 重置相机的宽高比camera.aspect = window.innerWidth / window.innerHeight// 更新相机的投影矩阵camera.updateProjectionMatrix()// 重置渲染器的宽高比renderer.setSize(window.innerWidth, window.innerHeight)// 更新渲染器的像素比renderer.setPixelRatio(window.devicePixelRatio)
})

vertexShader.glsl

precision lowp float;varying vec2 vUv;void main() {vUv = uv;vec4 modelPosition = modelMatrix*vec4(position, 1.0);gl_Position = projectionMatrix*viewMatrix*modelPosition;
}

precision highp float;varying vec2 vUv;void main() {1、通过顶点对应的uv,决定每一个像素在uv图像的位置,通过这个位置x,y决定颜色// gl_FragColor = vec4(vUv, 0, 5);2、第1的变形// gl_FragColor = vec4(vUv, 1, 1);3、利用uv,实现,渐变效果,左 ->// float strengh = vUv.x;// gl_FragColor = vec4(strengh, strengh, strengh, 1);4、利用uv,实现,渐变效果,下 ->// float strengh = vUv.y;// gl_FragColor = vec4(strengh, strengh, strengh, 1);5、利用uv,实现,渐变效果,上 ->// float strengh = 1.0 - vUv.y;// gl_FragColor = vec4(strengh, strengh, strengh, 1);6、利用uv,实现,段范围内渐变(这里是,由,黑->白,的渐变)// float strengh = vUv.y * 5.0;// gl_FragColor = vec4(strengh, strengh, strengh, 1);7、利用取模,实现,反复效果// float strengh = mod(vUv.y * 5.0, 1.0); `就是把y,分成5份`float strengh = mod(vUv.x * 10.0, 1.0); `就是把x,分成10份`gl_FragColor = vec4(strengh, strengh, strengh, 1);8、利用,step(edge, x),如果 x < edge,返回0.0,否则返回1.0// float strengh = mod(vUv.y * 10.0, 1.0);// strengh = step(0.5, strengh);// gl_FragColor = vec4(strengh, strengh, strengh, 1);9、利用,step(edge, x),如果 x < edge,返回0.0,否则返回1.0// float strengh = mod(vUv.y * 10.0, 1.0);// strengh = step(0.8, strengh);// gl_FragColor = vec4(strengh, strengh, strengh, 1);10、利用,step(edge, x),如果 x < edge,返回0.0,否则返回1.0// float strengh = mod(vUv.x * 10.0, 1.0);// strengh = step(0.8, strengh);// gl_FragColor = vec4(strengh, strengh, strengh, 1);11、条纹相加// float strength = step(0.8, mod(vUv.x*10.0, 1.0));// strength += step(0.8, mod(vUv.y*10.0, 1.0));// gl_FragColor = vec4(strength, strength, strength, 1);12、条纹相乘// float strength = step(0.8, mod(vUv.x*10.0, 1.0));// strength *= step(0.8, mod(vUv.y*10.0, 1.0));// gl_FragColor = vec4(strength, strength, strength, 1);13、条纹相减float strength = step(0.8, mod(vUv.x*10.0, 1.0));strength -= step(0.8, mod(vUv.y*10.0, 1.0));gl_FragColor = vec4(strength, strength, strength, 1);
}

效果图-1

在这里插入图片描述

效果图-2

在这里插入图片描述

效果图-3

在这里插入图片描述

效果图-4

在这里插入图片描述

效果图-5

在这里插入图片描述

效果图-6

在这里插入图片描述

效果图-7-1

在这里插入图片描述

效果图-7-2

在这里插入图片描述

效果图-8

在这里插入图片描述

效果图-9

在这里插入图片描述

效果图-10

在这里插入图片描述

效果图-11

在这里插入图片描述

效果图-12

在这里插入图片描述

效果图-13

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/406077.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Prometheus3: 监控CPU

1. 查看监控CPU所需的key [rootlocalhost node_exporter]# curl http://localhost:9100/metrics | grep -i node_cpu | head% Total % Received % Xferd Average Speed Time Time Time CurrentDload Upload Total Spent Left Speed0 0 0 0 …

03、Redis实战:商户查询缓存、缓存更新策略、缓存穿透、缓存雪崩、缓存击穿

2、商户查询缓存 2.1 什么是缓存? 什么是缓存? 就像自行车,越野车的避震器 举个例子:越野车,山地自行车,都拥有"避震器",防止车体加速后因惯性,在酷似"U"字母的地形上飞跃,硬着陆导致的损害,像个弹簧一样; 同样,实际开发中,系统也需要"避震器&qu…

初阶数据结构之计数排序

非比较排序 计数排序 计数排序⼜称为鸽巢原理&#xff0c;是对哈希直接定址法的变形应⽤。 操作步骤&#xff1a; 1&#xff09;统计相同元素出现次数 2&#xff09;根据统计的结果将序列回收到原来的序列中 #include "CountSort.h" void Count(int* arr, int n)…

线段树-点修区查

翻博客的时候突然发现线段树好像一个没有&#xff0c;我就准备把线段树给讲一下 分三个章节 点修区查 区修区查 区修区查&#xff08;带乘法&#xff09; 今天这一章比较简单&#xff0c;最多就区查稍微要动一点脑子 题目简介 输入n和m&#xff0c;n代表数的个数&#x…

读软件开发安全之道:概念、设计与实施05模式(上)

1. 模式 1.1. 模式分类 1.1.1. 设计属性 1.1.2. 暴露最少信息 1.1.3. 冗余 1.1.4. 强力执行 1.1.5. 信任与责任 1.1.6. 反模式 1.2. 模式可以缓解或者避免很多种类的风险&#xff0c;它们可以形成一个重要的工具箱&#xff0c;帮我们解决潜在的安全威胁 1.3. 不需要为…

学习设置echarts 折线图使用相关参数的方法整理

学习设置echarts 折线图使用相关参数的方法整理 折线图堆叠设置为不堆叠的方法 折线图堆叠设置为不堆叠的方法 官网是这样的&#xff0c;但是不需要这种堆叠形式的如下图&#xff1a; 第2条数据值 第1条数据值 第2条数据值 第3条数据值 第2条数据值 第3条数据值 需要改成…

C语言高手参考手册:函数进阶技巧

[大师C语言]合集&#xff3b;大师C语言(第一篇)&#xff3d;C语言栈溢出背后的秘密&#xff3b;大师C语言(第二十五篇)&#xff3d;C语言字符串探秘&#xff3b;大师C语言(第二篇)&#xff3d;C语言main函数背后的秘密&#xff3b;大师C语言(第二十六篇)&#xff3d;C语言结构体…

汽车管理 API 接口:开启高效车辆运营新时代

API&#xff08;Application Programming Interface&#xff09;是一种接口&#xff0c;用于不同软件之间的通信。在汽车管理领域&#xff0c;API的应用可以帮助提升车辆运营的效率&#xff0c;让车主和车辆管理者更方便地获取车辆相关信息&#xff0c;进行保养和维修等工作。本…

Linux yum提示Error downloading packages

很明显的错误&#xff0c;没有考虑过磁盘空间&#xff0c;记录一下。 Error downloading packages:gcc-4.8.5-44.el7.x86_64: Insufficient space in download directory /var/cache/yum/x86_64/7/base/packages* free 0 * needed 16 M使用du查看当前目录下所有文件大小 du …

黑马头条vue2.0项目实战(十一)——功能优化(组件缓存、响应拦截器、路由跳转与权限管理)

1. 组件缓存 1.1 介绍 先来看一个问题&#xff1f; 从首页切换到我的&#xff0c;再从我的回到首页&#xff0c;我们发现首页重新渲染原来的状态没有了。 首先&#xff0c;这是正常的状态&#xff0c;并非问题&#xff0c;路由在切换的时候会销毁切出去的页面组件&#xff…

HBase原理和操作

目录 一、HBase在Zookeeper中的存储元数据信息集群状态信息 二、HBase的操作Web Console命令行操作 三、HBase中数据的保存过程 一、HBase在Zookeeper中的存储 元数据信息 HBase的元数据信息是HBase集群运行所必需的关键数据&#xff0c;它存储在Zookeeper的"/hbase&quo…

数据结构——链式队列和循环队列

目录 引言 队列的定义 队列的分类 1.单链表实现 2.数组实现 队列的功能 队列的声明 1.链式队列 2.循环队列 队列的功能实现 1.队列初始化 (1)链式队列 (2)循环队列 (3)复杂度分析 2.判断队列是否为空 (1)链式队列 (2)循环队列 (3)复杂度分析 3.判断队列是否…

【具体数学 Concrete Mathematics】1.1.2 平面上的直线

【具体数学 Concrete Mathematics】1.1.2 平面上的直线

Django 第一课 -- 简介

目录 一. 基本介绍 二. 特点 三. MVC 与 MTV 模型 3.1. MVC 模型 3.2. MTV 模型 一. 基本介绍 Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架。 Django 是一个高级的 Python Web 框架&#xff0c;用于快速开发可维护和可扩展的 Web 应用程序。 使用 Dja…

计算机毕业设计Python深度学习房价预测 房价可视化 链家爬虫 房源爬虫 房源可视化 卷积神经网络 大数据毕业设计 机器学习 人工智能 AI

基于python一/二手房数据爬虫分析预测系统可视化 商品房数据Flask框架&#xff08;附源码&#xff09; 项目介绍 技术栈&#xff1a; python语言、Flask框架、MySQL数据库、Echarts可视化 sklearn机器学习 多元线性回归预测模型、requests爬虫框架 链家一手房 一手房数据商品房…

docker连接宿主机redis,提示Connection refused

目录 一、测试环境 二、问题现象 三、问题总结 一、测试环境 centos 7 redis-5.0.14 docker-26.0.1 二、问题现象 服务器重启后docker连接宿主机redis&#xff0c;提示Connection refused Reconnecting, last destination was /172.25.xxx.x:6379 …

VMware vSphere Client无法访问和连接ESXi虚拟主机解决思路

文章目录 前言1. 问题现象2. 问题原因3. 解决方法4. 参考文章 前言 注意 : 可以先看看参考文章那里&#xff0c;在回过来看 1 、 2 、3 1. 问题现象 版本&#xff1a;VMware vCenter Server 5.5.0 build-2442329 问题描述&#xff1a;用VMware vSphere Client 登录ESXI主机出…

状态压缩、记忆化搜索---蒙德里安的梦想

291. 蒙德里安的梦想 - AcWing题库 求把 NMNM 的棋盘分割成若干个 1212 的长方形&#xff0c;有多少种方案。 例如当 N2&#xff0c;M4N2&#xff0c;M4 时&#xff0c;共有 55 种方案。当 N2&#xff0c;M3N2&#xff0c;M3 时&#xff0c;共有 33 种方案。 如下图所示&…

[数据集][目标检测]瞳孔虹膜检测数据集VOC+YOLO格式8768张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;8768 标注数量(xml文件个数)&#xff1a;8768 标注数量(txt文件个数)&#xff1a;8768 标注…

【微信小程序】自定义组件 - 数据、方法和属性

1. data 数据 2. methods 方法 在小程序组件中&#xff0c;事件处理函数和自定义方法需要定义到 methods 节点中&#xff0c;示例代码如下&#xff1a; 3. properties 属性 在小程序组件中&#xff0c;properties 是组件的对外属性&#xff0c;用来接收外界传递到组件中的数…