从Unity到Three.js(shader创建)

本文介绍three.js 中shader的创建和应用到模型,具体shader的语法和函数应用,已经有很多大佬总结过了。
three.js shader详解

import * as THREE from 'three';const scene = new THREE.Scene();//创建场景
scene.background=new THREE.Color(0,0.1,0.2,1);//设置背景色
const geometry = new THREE.BoxGeometry(1, 1,1);//创建box物体
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);//配置相机参数
camera.position.z = 5;//设置相机位置//顶点着色器
const vertex = `
varying vec2 vUv;//必须带varyingvoid main() {vUv = uv;//记录UV信息gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);//顶点信息}
`;//片元着色器
const fragment = `
varying vec2 vUv;//对应顶点着色器记录的UV信息void main() {//gl_FragColor = vec4(vUv.x, vUv.y, vUv.x, 1.0);//gl_FragColor = vec4(vec3(vUv.x), 1.0);//gl_FragColor = vec4(vUv, 0.0, 1.0);//gl_FragColor = vec4(step(0.5,vUv.x), step(0.5,vUv.y),1.0, 1.0);float color = step(0.5, vUv.x);float color2 = step(0.45,vUv.x);gl_FragColor = vec4(vec3(color2-color), 1.0);gl_FragColor = vec4(vec3(fract(vUv.x * 3.0)), 1.0);gl_FragColor = vec4(vec3(step(0.5,fract(vUv.x*5.0))),1.0)*vec4(vec3(step(0.5,fract(vUv.y*5.0))),1.0);}
`;
//创建对应shader的材质方法封装,获取对应shader的材质
function getMaterial()
{return new THREE.ShaderMaterial({vertexShader: vertex,fragmentShader: fragment});
}const cube = new THREE.Mesh(geometry, getMaterial());
cube.position.x -= 2;
cube.position.y -= 2;
scene.add(cube);
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);function animate() {requestAnimationFrame(animate);renderer.render(scene, camera);}animate();

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

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

相关文章

系统找不到xinput1_3.dll怎么办?试试这五种解决方法轻松搞定

在计算机系统运行过程中,当我们遭遇“找不到xinput1_3.dll”这一错误提示时,实际上正面临一个软件兼容性、系统组件缺失以及游戏或应用程序无法正常启动的关键问题。深入探究这一现象,我们会发现它可能引发一系列连带问题,例如某些…

linux之前后端项目部署与发布

目录 前言 简介 一、安装Nginx 二、后端部署 2.1多个tomcat负载均衡 2.2 负载均衡 2.3 后端项目部署 三、前端部署 1.解压前端 2.Nginx配置文件修改 3.IP域名映射 4.重启Nginx服务 前言 上篇博主已经讲解过了单机项目的部署linux之JAVA环境配置JDK&Tomcat&a…

车载终端_联发科MTK6762车载平板电脑解决方案

智能车载终端方案搭载了MTK联发科8xARM Cortex-A53(64bit)高速CPU,采用12nm工艺制程,提供更快的数据采集速度和APP响应速度,能够快速满足用户的应用需求。配备3GB RAM32GB ROM的低功耗EMCP一体化存储,性能良好,支持多任…

【LeetCode:2476. 二叉搜索树最近节点查询 + 中序遍历 + 有序表】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

panelRef.value.getBoundingClientRect is not a function

<el-cascader-panel v-model"value" ref"panelRef" expand-change"expandChange" />const panelRef ref(null) panelRef.value.getBoundingClientRect()报错&#xff1a; panelRef.value.getBoundingClientRect is not a function 报错原…

python使用winio控制x86工控机的gpio

视频讲解 https://www.bilibili.com/video/BV1Nu4m1w7iv/?vd_source5ba34935b7845cd15c65ef62c64ba82f pywinio库 https://pypi.org/project/pywinio/ 安装库 pip install pywinio寄存器地址 测试代码 import pywinio winio get_winio() # 设置排针2输出1,0x40是bit6置…

嵌入式中逻辑分析仪基本操作方法

前期准备 1.一块能触摸的屏对应的主板机 2.逻辑分析仪对应的软件工具 3.对应的拓展板 4.确定拓展板的引脚分布情况 第一步&#xff1a;逻辑分析仪j基本操作 1.数据捕捉需要先进行对应软件安装,并按照需求进行配置 2.这里以A20为例:此手机使用显示驱动芯片CST148,触摸屏分辨…

插件废土课:打造属于你的“智能笔记”!

哎呀嘞&#xff0c;亲爱的网页冲浪者们&#xff0c;抓紧浮板&#xff0c;我们要继续在Chrome插件的海浪上翻滚啦&#xff01;上次我们玩了个小把戏&#xff0c;搞了个显示时间的Hello World插件&#xff0c;这次我们要把游戏玩大&#xff0c;准备打造一个能让你在网页上乱涂乱画…

Onlyfans信用卡支付失败怎么办?怎么订阅Onlyfans

OnlyFans信用卡支付失败解决方案及订阅指南 简介 OnlyFans是一个以内容创作者为重点的订阅平台&#xff0c;让用户可以通过支付订阅费用来获取独家内容。然而&#xff0c;有时候在进行信用卡支付时可能会遇到一些问题。本篇文章将为你提供解决OnlyFans信用卡支付失败的方案&a…

数学建模【GM(1, 1)灰色预测】

一、GM(1, 1)灰色预测简介 乍一看&#xff0c;这个名字好奇怪&#xff0c;其实是有含义的 G&#xff1a;Grey&#xff08;灰色&#xff09;M&#xff1a;Model&#xff08;模型&#xff09;(1, 1)&#xff1a;只含有一个变量的一阶微分方程模型 提到灰色&#xff0c;就得先说…

大数据开发项目--音乐排行榜

环境&#xff1a;windows10&#xff0c;centos7.9&#xff0c;hadoop3.2、hbase2.5.3和zookeeper3.8完全分布式&#xff1b; 环境搭建具体操作请参考以下文章&#xff1a; CentOS7 Hadoop3.X完全分布式环境搭建 Hadoop3.x完全分布式环境搭建Zookeeper和Hbase 1. 集成MapReduce…

消息中间件之RocketMQ源码分析(十八)

Broker CommitLog索引机制中的构建过程 1.创建ConsumeQueue和IndexFile。 ConsumeQueue和IndexFile两个索引都是由ReputMessageService类创建的 RequestMessageService类图 ReputMessageService服务启动后的执行过程。 doReput()方法用于创建索引的入口&#xff0c;通常通过…

运用工具Postman快速导出python接口测试脚本

Postman的脚本可以导出多种语言的脚本&#xff0c;方便二次维护开发。 Python的requests库&#xff0c;支持python2和python3&#xff0c;用于发送http/https请求 使用unittest进行接口自动化测试 一、环境准备 1、安装python&#xff08;使用python2或3都可以&#xff09;…

【数据结构与算法】常用算法 前缀和

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《数据结构与算法&#xff1a;初学者入门指南》&#x1f4d8;&am…

离散数学——树思维导图

离散数学——树思维导图 文章目录 前言内容大纲参考 前言 这是当初学习离散数学时整理的笔记大纲&#xff0c;其中包含了自己对于一些知识点的体悟。现将其放在这里作为备份&#xff0c;也希望能够对你有所帮助。 当初记录这些笔记只是为了在复习时更快地找到对应的知识点。…

Cubase学习:Cubase高效技巧,快速复制,快速写音符

1小节后再写 写歌时&#xff0c;建议在第3小节开始写。 快速复制 可以选中后CtrlD&#xff0c;进行快速的复制粘贴。 快速写音符 先是切换到选择状态&#xff0c;按Alt时写音符&#xff0c;松开时回到选择状态。 写一个音时&#xff0c;先确定是哪个区域的&#xff0c;再…

Python爬虫之极验滑动验证码的识别

极验滑动验证码的识别 上节我们了解了可以直接利用 tesserocr 来识别简单的图形验证码。近几年出现了一些新型验证码&#xff0c;其中比较有代表性的就是极验验证码&#xff0c;它需要拖动拼合滑块才可以完成验证&#xff0c;相对图形验证码来说识别难度上升了几个等级。本节将…

MinIO搭建指南:构建高性能的私有云存储服务

MinIO搭建指南&#xff1a;构建高性能的私有云存储服务 摘要&#xff1a;本文将指导您一步步搭建MinIO&#xff0c;一个高性能的开源对象存储服务&#xff0c;用于构建私有云存储解决方案。我们将介绍MinIO的基本概念、安装配置、以及如何与应用程序集成。 一、MinIO简介 Mi…

如何在Linux部署Portainer并结合内网穿透远程管理本地Docker容器

文章目录 前言1. 部署Portainer2. 本地访问Portainer3. Linux 安装cpolar4. 配置Portainer 公网访问地址5. 公网远程访问Portainer6. 固定Portainer公网地址 前言 Portainer 是一个轻量级的容器管理工具&#xff0c;可以通过 Web 界面对 Docker 容器进行管理和监控。它提供了可…

数据分析---Python与sql

目录 Python的pandas,如何实现SQL中的leftjoinPython的pandas,如何实现SQL中的unionPython的pandas,如何实现类似SQL中的where进行限制Python的pandas,如和实现SQL中的group byPython的pandas,如何删除某一列Python的pandas,如何实现SQL中的leftjoin 在Python的pandas库中…