使用 three.js和 shader 实现一个五星红旗 飘扬得着色器

server/2024/10/18 10:18:56/

使用 three.js和 shader 实现一个五星红旗 飘扬得着色器
在这里插入图片描述

源链接:https://threehub.cn/#/codeMirror?navigation=ThreeJS&classify=shader&id=chinaFlag

国内站点预览:http://threehub.cn

github地址: https://github.com/z2586300277/three-cesium-examples

import * as THREE from 'three'
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'const box = document.getElementById('box')const scene = new THREE.Scene()const camera = new THREE.PerspectiveCamera(75, box.clientWidth / box.clientHeight, 0.1, 1000)camera.position.set(0.5, -0.5, 3)const renderer = new THREE.WebGLRenderer()renderer.setSize(box.clientWidth, box.clientHeight)box.appendChild(renderer.domElement)new OrbitControls(camera, renderer.domElement)window.onresize = () => {renderer.setSize(box.clientWidth, box.clientHeight)camera.aspect = box.clientWidth / box.clientHeightcamera.updateProjectionMatrix()}const flagTexture = new THREE.TextureLoader().load(`https://file.threehub.cn/` + "images/chinaFlag.jpg")const flagMaterial = new THREE.RawShaderMaterial({vertexShader: `uniform mat4 projectionMatrix;uniform mat4 modelMatrix;uniform mat4 viewMatrix;uniform vec2 uFrequency;uniform float uTime;uniform float uStrength;attribute vec3 position;attribute vec2 uv;varying float vDark;varying vec2 vUv;void main() {vec4 modelPosition = modelMatrix * vec4(position, 1.0);float xFactor = clamp((modelPosition.x + 1.25) / 2.0, 0.0, 2.0); float vWave = sin(modelPosition.x * uFrequency.x - uTime ) * xFactor * uStrength ;vWave += sin(modelPosition.y * uFrequency.y - uTime) * xFactor * uStrength * 0.5;modelPosition.y += sin(modelPosition.x * 2.0 + uTime * 0.5) * 0.05 * xFactor;modelPosition.z += vWave;vec4 viewPosition = viewMatrix * modelPosition;vec4 projectedPosition = projectionMatrix * viewPosition;gl_Position = projectedPosition;vUv = uv;vDark = vWave;}`,fragmentShader: `precision mediump float;varying float vDark;uniform sampler2D uTexture;varying vec2 vUv;void main(){vec4 textColor = texture2D(uTexture, vUv);textColor.rgb *= vDark + 0.85;gl_FragColor = textColor;}`,side: THREE.DoubleSide,uniforms: {uFrequency: { value: new THREE.Vector2(3, 3) },uTime: { value: 0 },uTexture: { value: flagTexture },uStrength: { value: 0.2 }}})const flagGeometry = new THREE.BoxGeometry(3, 2, 0.025, 64, 64)const flagMesh = new THREE.Mesh(flagGeometry, flagMaterial)scene.add(flagMesh)animate()function animate() {flagMaterial.uniforms.uTime.value += 0.06renderer.render(scene, camera)requestAnimationFrame(animate)}

http://www.ppmy.cn/server/131252.html

相关文章

实时开放词汇目标检测(论文复现)

实时开放词汇目标检测(论文复现) 本文所涉及所有资源均在传知代码平台可获取 文章目录 实时开放词汇目标检测(论文复现)概述模型框架使用方式配置环境训练和评估训练评估 演示效果Gradio Demo 概述 YOLO-World是由腾讯人工智能实验…

进程间通信 —— 《命名管道》

文章目录 前言:命名管道的原理:代码编写: 前言: 在前面的一文,我们主要介绍了关于进程间的通信是如何实现的,以及引入了进程间通信的前提——“要让两个进程在OS中看到同一份资源”,而对于父子…

Springboot实现参数校验

Springboot实现参数校验 导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency>实体类中加上相应注解 public class User {// 用户名NotBlank(mess…

【笔记】Day2.5.1查询运费模板列表(未完

&#xff08;一&#xff09;代码编写 1.阅读需求&#xff0c;确保理解其中的每一个要素&#xff1a; 获取全部运费模板&#xff1a;这意味着我需要从数据库中查询所有运费模板数据。按创建时间倒序排序&#xff1a;这意味着查询结果需要根据模板的创建时间进行排序&#xff0…

架构设计笔记-14-云原生架构设计理论与实践

知识要点 云原生&#xff08;Cloud Native&#xff09;架构原则&#xff1a; 服务化原则&#xff1a;通过微服务架构&#xff0c;小服务&#xff08;MiniService&#xff09;架构把不同生命周期的模块分离出来&#xff0c;分别进行业务迭代&#xff0c;避免迭代频繁模块被慢速…

无线费控智能水表:智能生活的守护者

在当今智能化日益普及的时代&#xff0c;无线费控智能水表作为一项重要的技术创新&#xff0c;正在逐步改变我们的生活方式。它不仅能够实现远程抄表&#xff0c;自动计费&#xff0c;还能有效监控用水情况&#xff0c;促进水资源的合理利用&#xff0c;是现代城市智慧化管理不…

Python Django ORM 的工作原理

在 Web 开发中&#xff0c;处理数据库是非常常见的需求&#xff0c;尤其是在构建动态应用程序时。Django 作为一个流行的 Python Web 框架&#xff0c;提供了一套强大的工具帮助开发者轻松管理数据库。Django 的 ORM&#xff08;对象关系映射&#xff0c;Object-Relational Map…

【Jenkins】windows安装步骤

【Jenkins】windows安装步骤 官网使用WAR包方式运行浏览器访问Jenkinswindows-installer安装安装过程问题解决This account either does not hava the privilege to logon as a service or the account was unable to be verified 安装成功修改jenkins.xml启动jenkins访问jenki…