新网站的建设工作个人网站用移动硬盘做服务器

web/2025/10/4 16:07:28/文章来源:
新网站的建设工作,个人网站用移动硬盘做服务器,做网站文字字号大小,html期末作业网页代码通常我们是通过修改扩展three.js内置的材质来实现一些复杂的效果的#xff0c;而不是使用shaderMaterial材质从零开始实现。比如说很满意MeshStandardMaterial#xff08;一种常规材质#xff09;的效果#xff0c;但是我们希望在这个材质上添加一些顶点动画。如果我们打算…通常我们是通过修改扩展three.js内置的材质来实现一些复杂的效果的而不是使用shaderMaterial材质从零开始实现。比如说很满意MeshStandardMaterial一种常规材质的效果但是我们希望在这个材质上添加一些顶点动画。如果我们打算从头开始写一个全新的MeshStandardMaterial处理灯光、环境图、物理渲染、各种纹理等等就会耗费我们大量的时间。 有两种常见的方式可以修改着色器 通过使用一个Three.js提供的“钩子”函数在着色器编译之前改动着色器并插入我们的代码。新建一个全新的材质先复现原来的材质的功能效果然后再添加一个我们自己需要的效果 很明显第二种方式一般情况下并不太适合因为需要花费的时间比较多 [1]获取材质的着色器 要修改内置材质的着色器带啊吗首先需要访问获取到相应的着色器要获取着色器等信息我们可以调用材质的onBeforeCompile方法 // Material const material new THREE.MeshStandardMaterial( {map: mapTexture,normalMap: normalTexture }) material.onBeforeCompile (shader) {console.log(shader) }[2]向顶点着色器中添加内容 先打印看看原始材质的顶点着色器的内容 #define STANDARD varying vec3 vViewPosition; #ifdef USE_TRANSMISSIONvarying vec3 vWorldPosition; #endif #include common #include uv_pars_vertex #include uv2_pars_vertex #include displacementmap_pars_vertex #include color_pars_vertex #include fog_pars_vertex #include normal_pars_vertex #include morphtarget_pars_vertex #include skinning_pars_vertex #include shadowmap_pars_vertex #include logdepthbuf_pars_vertex #include clipping_planes_pars_vertex void main() {#include uv_vertex#include uv2_vertex#include color_vertex#include beginnormal_vertex#include morphnormal_vertex#include skinbase_vertex#include skinnormal_vertex#include defaultnormal_vertex#include normal_vertex#include begin_vertex#include morphtarget_vertex#include skinning_vertex#include displacementmap_vertex#include project_vertex#include logdepthbuf_vertex#include clipping_planes_vertexvViewPosition - mvPosition.xyz;#include worldpos_vertex#include shadowmap_vertex#include fog_vertex #ifdef USE_TRANSMISSIONvWorldPosition worldPosition.xyz; #endif }并没有太多的代码这是因为three.js对大部分着色器可复用的代码进行了封装以防止在不同材质之间重复相同的代码。每个都将 #include … 注入位于 Three.js依赖项的特定文件夹中的代码。 也就是说我们好些就可以直接使用JavaScript的replace方法直接替换掉其中的代码了 但是我们不知道哪个部分在做什么以及要替换哪个部分。为了理解代码我们需要深入研究 three 依赖关系。 为此我们可以看看/node_modules/three/src/renderers/shaders/ 文件夹这里可以找到大多数three.js着色器代码 再上面的顶点着色器中包含内容都称为块(chunk都可以在ShaderChunk/ 文件夹中找到它们然后更加可以按照上面打印的材质的着色器代码大概读一些相应的chunk或者按照你的想法去读和修改就行。 比如我想对通过修改顶点着色器修改模型的y坐标经过阅读原有的chunk后发现#include begin_vertex这个块里面的代码 export default /* glsl */ vec3 transformed vec3( position ); ;那我直接替换大法 const material new THREE.MeshStandardMaterial( {map: mapTexture,normalMap: normalTexture })material.onBeforeCompile (shader) {shader.vertexShader shader.vertexShader.replace(#include begin_vertex,#include begin_vertextransformed.y 3.0;)console.log(shader.vertexShader) } 然后看这个打印的代码 [3]旋转坐标 这里实验一下添加一个2D旋转矩阵相关内容可参考The Book of Shaders根据输入的角度返回一个循环矩阵然后将这个矩阵应用到模型坐标中 按照前面的思想我们先创建一个旋转矩阵函数 mat2 get2dRotateMatrix(float _angle){return mat2(cos(_angle), - sin(_angle), sin(_angle), cos(_angle)); }那么该将这个函数添加到那个chunk中呢如果是我们之际编写的着色器我们会把它放到main函数前面即可 那么看看有没有chunk这里有个#include commonchunk可以替换放置。 material.onBeforeCompile (shader) {shader.vertexShader shader.vertexShader.replace(#include common,#include commonmat2 get2dRotateMatrix(float _angle){return mat2(cos(_angle), - sin(_angle), sin(_angle), cos(_angle));})console.log(shader.vertexShader) }放置好后就可以在其他chunk中调用了 material.onBeforeCompile (shader) {shader.vertexShader shader.vertexShader.replace(#include common,#include commonmat2 get2dRotateMatrix(float _angle){return mat2(cos(_angle), - sin(_angle), sin(_angle), cos(_angle));})shader.vertexShader shader.vertexShader.replace(#include begin_vertex,#include begin_vertexfloat angle position.y * 0.9;mat2 rotateMatrix get2dRotateMatrix(angle);transformed.xz rotateMatrix * transformed.xz;)console.log(shader.vertexShader)}[4]动画 也可以通过onBeforeCompile钩子函数传递要给uniform时间变量过去片段着色器以实现动画效果 需要注意的是这里不同shaderMaterial不能将实时的时间通过如下方式传递material.uniforms.uTime.value elapsedTime而是向下面那样 const customUniforms {uTime: { value: 0 } }material.onBeforeCompile (shader) {shader.uniforms.uTime customUniforms.uTimeshader.vertexShader shader.vertexShader.replace(#include common,#include commonuniform float uTime;mat2 get2dRotateMatrix(float _angle){return mat2(cos(_angle), - sin(_angle), sin(_angle), cos(_angle));})shader.vertexShader shader.vertexShader.replace(#include begin_vertex,#include begin_vertexfloat angle (position.y uTime) * 0.9;mat2 rotateMatrix get2dRotateMatrix(angle);transformed.xz rotateMatrix * transformed.xz;)console.log(shader.vertexShader)}//。。。 /*** Animate*/ const clock new THREE.Clock()const tick () {const elapsedTime clock.getElapsedTime()// Update materialcustomUniforms.uTime.value elapsedTime// Update controlscontrols.update()// Renderrenderer.render(scene, camera)// Call tick again on the next framewindow.requestAnimationFrame(tick) }tick() [5]阴影修复 当我们使用上面的方式对模型的顶点坐标进行变换后如果你设置了阴影你会发现阴影的形状等并没有发生改变这是因为 当我们使用阴影时Three.js会从光源的视角对场景进行渲染。这些渲染结果会生成关于哪些部分在阴影中哪些部分在光线下的图片。当这些渲染发生时所有的材质都会被替换成另一套专门用于这种特定渲染的材质。问题在于这种材质不会随我们变化后的材质变化而变化因为它与我们修改过的MeshStandardMaterial没有任何关系 要解决这个问题我们需要找到一种方式来同时改变这个特定的material 用于阴影的材质是 MeshDepthMaterial要访问该材质并不容易但是我们可以使用mesh的customDepthMaterial属性来覆盖它以便告诉 Three.js 使用自定义材质 具体代码的做简单只需要在加载后面后对每个mesh应用customDepthMaterial属性即可 //创建一个此自定义材质这里使用MeshDepthMaterial因为这正是Three.js在这些渲染过程中使用的 const depthMaterial new THREE.MeshDepthMaterial({depthPacking: THREE.RGBADepthPacking }) /*** Models*/ gltfLoader.load(/models/LeePerrySmith/LeePerrySmith.glb,(gltf) {// Modelconst mesh gltf.scene.children[0]mesh.rotation.y Math.PI * 0.5mesh.material materialmesh.customDepthMaterial depthMaterial // Update the depth materialscene.add(mesh)updateAllMaterials()} )//同时也需要对改材质进行同样的操作 depthMaterial.onBeforeCompile (shader) {shader.uniforms.uTime customUniforms.uTimeshader.vertexShader shader.vertexShader.replace(#include common,#include commonuniform float uTime;mat2 get2dRotateMatrix(float _angle){return mat2(cos(_angle), - sin(_angle), sin(_angle), cos(_angle));})shader.vertexShader shader.vertexShader.replace(#include begin_vertex,#include begin_vertexfloat angle (position.y uTime) * 0.9;mat2 rotateMatrix get2dRotateMatrix(angle);transformed.xz rotateMatrix * transformed.xz;) }[6]法向修复 上面的进行阴影修复后其实还有个问题那个阴影会随着顶点的旋转而旋转。这是一个与法线有关的问题。 因为法线是与每个顶点相关联的坐标用于获取面朝向的方向。通过用于光照、反射和阴影等相关的内容 而当我们旋转顶点时我们只是旋转位置但我们没有旋转法线。我们需要修改处理法线的chunk 通过查找法线处理法线的chunk为beginnormal_vertex export default /* glsl */ vec3 objectNormal vec3( normal );#ifdef USE_TANGENTvec3 objectTangent vec3( tangent.xyz );#endif ;然后对顶点法线和顶点做同样的变换即可 depthMaterial.onBeforeCompile (shader) {shader.uniforms.uTime customUniforms.uTimeshader.vertexShader shader.vertexShader.replace(#include common,#include commonuniform float uTime;mat2 get2dRotateMatrix(float _angle){return mat2(cos(_angle), - sin(_angle), sin(_angle), cos(_angle));})shader.vertexShader shader.vertexShader.replace(#include beginnormal_vertex,#include beginnormal_vertexfloat angle (position.y uTime) * 0.9;mat2 rotateMatrix get2dRotateMatrix(angle);objectNormal.xz rotateMatrix * objectNormal.xz;)shader.vertexShader shader.vertexShader.replace(#include begin_vertex,#include begin_vertexfloat angle (position.y uTime) * 0.9;mat2 rotateMatrix get2dRotateMatrix(angle);transformed.xz rotateMatrix * transformed.xz;) }注意这块有些版本是不支持上面的写法的需要对一些语句去重因为最后是将上的着色器代码合并到一块的如果有重复语句会报错但是在新的版本中则不会。

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

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

相关文章

pta程序设计平台丹东seo优化

NAT(Network AddressTranslators),网络地址转换: 网络地址转换是在IP地址日益缺乏的情况下产生的,它的主要目的就是为了能够地址重用。NAT分为两大类,基本的NAT和NAPT(Network Address/Port Translator)。 最开始NAT是运行在路由器…

中国建设银行的网站用户名是什么意思wordpress移动版插件

字典 1.字典的定义2.字典数据的获取3.字典的嵌套4.嵌套字典的内容获取5.字典的常用操作6.常用操作总结7.遍历字典8.练习 1.字典的定义 同样使用{},不过存储的元素是一个一个的:键值对,语法如下 # 定义字典字面量 {key:value,key:value,...,…

wdcp搭建网站教程柳州市城乡建设局网站

wipeRefreshLayout字面意思就是下拉刷新的布局,继承自ViewGroup,在support v4兼容包下,但必须把你的support library的版本升级到19.1。 提到下拉刷新大家一定对ActionBarPullToRefresh比较熟悉,而如今google推出了更官方的下拉刷新组件,这无疑是对开发者来说比较好的消…

网站建设方面的文章WordPress手机缩略图设置

这是称为“ Functional Java by Example”的系列文章的第3部分。 我在本系列的每个部分中发展的示例是某种“提要处理程序”,用于处理文档。 在前面的部分中,我从一些原始代码开始,并应用了一些重构来描述“什么”而不是“如何”。 为了帮助…

网站的建设及维护的费用医院网站建设与维护题库

fluorinefx C# 版的开源rtmp服务器 - [其它资源] 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://25swf.blogbus.com/logs/28529745.html fluorinefx支持的 .net 框架集有 1.1 2.0 3.5 以及 mono 1.2.4支持的东东Flex, Flash Remoting (RP…

简洁大气摄影网站在哪做网站不要钱

:构建便捷出行新体验 一、引言:探索打车系统小程序源码的重要性 在数字化快速发展的今天,打车系统小程序已成为我们日常生活中不可或缺的一部分。它以其便捷、高效的特点,极大地改变了我们的出行方式。而背后的关键,…

品牌展示型网站源码网店设计与装修的作用与意义

在这个数字化的时代,外卖小程序已经成为餐饮业的一项重要工具。在本文中,我们将通过一些简单而实用的技术代码,向您展示如何构建一个基本的外卖小程序。我们将使用微信小程序平台作为例子,但这些原理同样适用于其他小程序平台。 …

东莞想做网站找什么公司做网站实现图片自动压缩

实现这个游戏需要Easy_X 这个在我前面一篇C之番外篇爱心代码有程序教你怎么下载,大家可自行查看 然后就是需要植物大战僵尸的素材和音乐,需要的可以在评论区 首先是main.cpp //开发日志 //1导入素材 //2实现最开始的游戏场景 //3实现游戏顶部的工具栏…

dede替换网站模板电商网站的特点

在物联网(IoT)时代,随着智能设备的普及和万物互联的加速,隐私保护与数据安全成为了亟待解决的关键问题。以下是一些重要的隐私保护与数据安全策略,以确保在万物互联背景下信息的安全: 1. 加强设备安全&…

cco网站素材网站制作公司 云南

STM32 OTA-IAP设计方案 OTA是Over-the-Air的简写,即空中下载技术,通过网络远程给用户进行系统更新和升级。IAP是In Application Programming的简写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在…

主题网站设计欣赏dw做的网站怎么上传图片

随着网络技术的不断发展,网络安全威胁也在不断增加,勒索病毒攻击企业计算机服务器的事件时有发生,并且勒索病毒的加密形式也越来越复杂。近期,云天数据恢复中心陆续接到很多企业的求助,企业的计算机服务器遭到了mallox…

自己建设网站难不难哪个网站做不锈钢好

一、获得命令帮助 1.1、内部命令与外部命令 简单来说,在linux系统中有存储位置的命令为外部命令; 没有存储位置的为内部命令,可以理解为内部命令嵌入在linux的shell中,所以看不到。 type来判断到底为内部命令还是内部命令 [ro…

北京住房与城乡建设网站怎么查看网页源代码

在sbin文件夹下是start-all.sh可以运行的,但是到了别的文件夹下就不行了,于是想到了是文件路径问题,因为hadoop环境是和java环境一起配置的导致sbin写成了bin 解决办法: 打开.bashrc配置hadoop的环境变量 sudo vim ~/.bashrc …

古镇免费网站建设最好看免费观看高清大全猪蜜蜜剧本

适用于什么场景? 检索比较多的场景,例如学生成绩管理系统,老师对学生的成绩进行排名或查询操作 ArrayList有哪些特点? 1、ArrayList集合底层采用了数组数据结构,是Object类型 2、动态数组。ArrayList的默认初始容量…

传奇高端网站设计制作大庆网站建设优化

查看WEB服务器的连接数 https://technet.microsoft.com/en-us/sysinternals/bb897437 tcpView转载于:https://www.cnblogs.com/daishuguang/p/4973342.html

h5网站建设模板html5 网站源码

文章目录后端有关说明前端有关说明接口设计小程序注册/登录接口APP 注册/登录接口PC Web 端的注册/登录接口小程序注册/登录序列图校验 token后端有关说明 登录和注册的逻辑要独立抽取写成2个接口:注册接口、登录接口 小程序、APP、PC端的登录接口和注册接口要分开…

移动网站建设服务商重庆必去的十大景点

Android开发要点说明 商户在微信开放平台申请开发应用后,微信开放平台会生成APP的唯一标识APPID。由于需要保证支付安全,需要在开放平台绑定商户应用包名和应用签名,设置好后才能正常发起支付。 应用包名:是在APP项目配置文件And…

做拆分盘网站南充做网站略奥网络

第一道题:求有删除情况的最长回文子串 题目: 解题思路: 这个题严格意义上来说,删除了字符就谈不上回文串了,既然有删除,那估计考察的不是回文串,而是其他的,但是这个东西又有回文串的…

好网站建设公司服务子网站建设方案

分布式并发架构 微服务、Docker容器的基本原理、架构设计,以及应用场景。 缓存:Redis、Memcached、CDN、本地缓存 搜索引擎的选型:Lucene、Solr等选型与比较 应用服务器雪崩:长事务、SQL超时、同步接口引起的雪崩场景&#xff…

免费在线观看电影电视剧网站wordpress菜单对齐修改

探寻SQL的背后机制 前言 在数据领域,SQL(Structured Query Language)是一门广泛使用的语言,用于查询和处理数据。你可能已经使用过诸如MySQL、Hive、ClickHouse、Doris、Spark和Flink等工具来编写SQL查询。 每一种框架都提供了…