three.js 着色器材质之变量(二)】的更多相关文章

上一篇郭先生在例子中用到了着色器变量中的uniform和varying.这篇继续结合例子将一下attribute变量,在使用过程中也发现由于three.js的版本迭代,之前的一些属性和参数已经发生了改变,ShaderMaterial也不需要传递attributes属性值,查看源码我们可以看到如果传递了attributes参数,会给出下面这样的错误. attributes should now be defined in THREE.BufferGeometry instead. 因为我们现在想传…
上一篇说顶点着色器和片元着色器的皮毛,这篇郭先生说一说着色器变量,通过变量可以设置材质.先看看今天要做的如下图.在线案例请点击博客原文. 在这个案例之前,我们先复习一下着色器变量 Uniforms是所有顶点都具有相同的值的变量. 比如灯光,雾,和阴影贴图就是被储存在uniforms中的数据. uniforms可以通过顶点着色器和片元着色器来访问. Varyings 是从顶点着色器传递到片元着色器的变量.因此需要在两个着色器中同时定义,对于每一个片元,每一个varying的值将是相邻顶点值的平滑插…
这篇郭先生在练习一下着色器变量,在度娘上面或者官网上经常看到类似水波一样的效果,这篇就试着做一个这样的效果,顺便巩固一下顶点着色器和片元着色器,毕竟多多练习才能更好地掌握.效果如下图,在线案例请点击博客原文. 这里用到了用到了顶点着色器和片元着色器. 1. 设置几何体 设置一个几何体,对于波浪效果,我们制作一个球几何体(当然也可以设置其他的,可能有意想不到的效果哦!). var sphere = new THREE.SphereBufferGeometry(10, 120, 80); 2. 设置…
说起three.js,着色器材质总是绕不过的话题,今天郭先生就说一说什么是着色器材质.着色器材质是很需要灵感和数学知识的,可以用简短的代码和绘制出十分丰富的图像,可以说着色器材质是脱离three.js的另一块知识,因此它十分难讲,我们只能在一个一个案例中逐渐掌握着色器语言的使用技巧. 1. 什么是着色器材质 着色器材质(ShaderMaterial)是一个用GLSL编写的小程序 ,在GPU上运行.它能够提供 materials 之外的效果,也可以将许多对象组合成单个Geometry或Buffer…
这篇郭先生说一下three.js着色器的内置变量,分别是 gl_PointSize:在点渲染模式中,控制方形点区域渲染像素大小(注意这里是像素大小,而不是three.js单位,因此在移动相机是,所看到该点在屏幕中的大小不变) gl_Position:控制顶点选完的位置 gl_FragColor:片元的RGB颜色值 gl_FragCoord:片元的坐标,同样是以像素为单位 gl_PointCoord:在点渲染模式中,对应方形像素坐标 他们或者单个出现在着色器中,或者组团出现在着色器中,是着色器的灵…
今天郭先生说一说如何在three.js着色器中添加纹理,先看看今天要完成的效果,在线案例请点击博客原文. 这里我们分别引入三个纹理,分别是地球的表面纹理,对应的海拔灰度图,和云朵的纹理.使用表面纹理还是地球的外貌,海拔灰度图给地球添加凹凸效果,云朵纹理给地球添加云朵效果.下面我们说一说代码. 1. 绘制几何体,加载贴图 我们只需要在一个球体中进行操作,所以新建一个球体.然后分别加载三张纹理. var sphere = new THREE.SphereBufferGeometry(10, 128,…
郭先生发现在开始学习three.js着色器材质时,我们经常会无从下手,辛苦写下的着色器,也会因莫名的报错而手足无措.原因是着色器材质它涉及到另一种语言–GLSL,只有懂了这个语言,我们才能更好的写出着色器材质,利用好的我们的GPU.这篇说一说glsl内置函数. 1. 和角度相关的函数 下面是一个和角度相关的函数,他们的用法我们度熟悉. 函数 参数 描述 sin(x) 弧度 正弦函数 cos(x) 弧度 余弦函数 tan(x) 弧度 正切函数 asin(x) 弧度 反正弦函数 acos(x) 弧度…
OpenGL ES着色器语言之变量和数据类型(二)(官方文档第四章) 4.5精度和精度修饰符 4.5.1范围和精度 用于存储和展示浮点数.整数变量的范围和精度依赖于数值的源(varying,uniform,纹理查找,等等),是不是顶点或者片元着色器,还有其他一些底层实现的细节.最低存储需要通过精度修饰符来声明.典型地,精度操作必须要保留变量包含的精度存储.仅有的例外是需要大量复杂计算的内建函数,如atan(),返回值的精度低于声明的精度. 强烈建议顶点语言提供一种匹配IEEE单精度浮点数或更高精…
通用js函数集锦<来源于网络> [二] 1.数组方法集2.cookie方法集3.url方法集4.正则表达式方法集5.字符串方法集6.加密方法集7.日期方法集8.浏览器检测方法集9.json方法10.extend方法11.类型判断的方法 数组方法集 Angela.array = { //# 数组方法 // index, 返回位置! 不存在则返回 -1: index: function (t, arr) { //# 返回当前值所在数组的位置 if (arr.indexOf) { return ar…
[D3.V3.js系列教程]--(十二)坐标尺度 1.多种类型的缩放尺度 Quantitative Scales Linear Scales Identity Scales Power Scales 可以参考https://github.com/mbostock/d3/wiki/Quantitative-Scales 我们一般采用线性缩放 2.定义域和值域 定义域范围domain([100, 500]) 值域范围.range([10, 350]) var scale = d3.scale.lin…
OpenGL ES着色器语言之变量和数据类型(一)(官方文档第四章)   所有变量和函数在使用前必须声明.变量和函数名是标识符. 没有默认类型,所有变量和函数声明必须包含一个声明类型以及可选的修饰符.变量在声明的时候首先要标明类型,后边可以跟多个变量,之间用逗号隔开.很多情况下,变量在声明的时候可以使用等号“=”进行初始化. 用户定义类型可以使用struct,在结构体中所有变量类型都必须是OpenGL ES着色器语言定义的关键字.OpenGL ES着色语言是类型安全的,因此不支持隐式类型转换.…
js的惰性声明, js中声明过的变量(预解释),后在不会重新声明了 fn(); // 声明+定义 js中声明过一次的变量,之后在不会重新声明了 function fn() { console.log("ok") } fn(); //ok fn = 22; //赋值是允许的 fn(); // Uncaught TypeError: fn is not a function function fn() { console.log("ok !!!");} fn(); //…
js调用PHP里的变量,怎么弄 网上给的例子都是js文件里一开始先给这个变量一个值,要是那样有啥意思啊,我要的就是可以变化的. hychyc_2008 | 浏览 2741 次  2013-04-18 12:24 2013-04-20 10:34   最佳答案   <script>var str=<?php echo $value;?></script>这种做法我以前用过,有的浏览器可以,有的浏览器就认不出来.具体是IE几我忘了~~~好像是IE6认不出来.我的做法是:&l…
js中三种定义变量的方式const, var, let的区别 1.const定义的变量不可以修改,而且必须初始化. 1 const b = 2;//正确 2 // const b;//错误,必须初始化 3 console.log('函数外const定义b:' + b);//有输出值 4 // b = 5; 5 // console.log('函数外修改const定义b:' + b);//无法输出 2.var定义的变量可以修改,如果不初始化会输出undefined,不会报错. 1 var a =…
用 JS 做一个数独游戏(二) 在 上一篇博客 中,我们通过 Node 运行了我们的 JavaScript 代码,在控制台中打印出来生成好的数独终盘.为了让我们的数独游戏能有良好的体验,这篇博客将会为生成好的数独终盘做一个比较完善的界面.最终的效果如下: 你也可以访问网页上的 demo 进行数独游戏的体验. 完善挖洞算法 上一篇博客 中提到过挖洞算法,实际上那并不完整,因为算法里面只有生成数独终盘的部分,并没有进行挖洞处理(也就是隐藏部分格子).为了补充完整挖洞的算法,我们在 Game 对象里面…
前两天遇到的问题,经过很多网友的深刻讨论,终于有一个相对可以解释的通的逻辑了,然后我仔细研究了一下相关的点,顺带研究了一下js中的隐式变量. 以下文章中提到的隐式变量都是指没有用var,let,const等关键字定义的变量. 以下文章中提到的var变量都是指用var声明定义的变量. 一遇到隐式变量,我们去百度一下,都会看见这样一句话,隐式变量是全局变量,在函数中用隐式变量也是全局变量,但是在函数中用var变量是局部变量,那我们来具体看下隐式变量到底与var变量有什么区别,下面我们来通过一些代码来…
浅谈JS中 var let const 变量声明 用var来声明变量会出现的问题: 1. 允许重复的变量声明:导致数据被覆盖 2. 变量提升:怪异的数据访问.闭包问题 3. 全局变量挂载到全局对象:全局对象成员污染问题 例1: 用var声明的变量会默认被提升到当前作用域的顶部 例2: For循环内的i变量当前所处的环境是全局作用域(函数局部作用域同理,只不过声明之后不绑定在window上). ,这就产生了闭包,如下图   ES6 中引入let 和 const,以及块级作用域来解决这个问题   什…
正则表达式 js 怎么获取匹配的变量 $0 ~ $9 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!…
前不久同事询问我js里面怎么给正则中添加变量的问题,遂写篇博客记录下.   一.字面量 其实当我们定义一个字符串,一个数组,一个对象等等的时候,我们习惯用字面量来定义,例如: var s = "string"; var a = [1,2]; var o = {}; 如果需要加入变量,那也是十分简单的事情,比如: var v = "bl"; var s = "string" + v; //"stringbl" var a = […
一. JS 的面向对象 JS没有类,其类就用function来代替如下所示: function Cat(name, color){ this.name=name; this.color=color; } 这就相当于是构造函数,可以生成对象: // 声明Cat对象 var cat1 = new Cat("jack", "yellow"); var cat2 = new Cat("tom","black"); // 用法和其他语言…
JS(变量类型和计算) 题目1.JS 中使用 typeof 能得到那些类型? 题目2.何时使用 === 何时使用==? 题目3.JS 中有哪些内置函数? 题目4.JS 变量按照存储方式区分为那些类型,描述其特点? 题目5.如何理解 JSON 一.变量类型(存储方式) 1.值类型 值类型是把值存储在具体的位置,a 存储100,a 赋值给 b ,则 b 存储100,将 a 的位置改为200,但 b 的位置仍存储100. 2.引用类型 引用类型中,将 a 赋值成对象,这个对象存在另一个地方,a 内存的…
虽然看了多次js函数作用域及变量提升的理论知识,但也是一知半解~ 这几天做了几道js小题,对这部分进行了从新的理解,还是有所收获的~ 主要参考书籍: <你不知道的JavaScript(上卷)>第一部分 <JavaScript高级程序设计>第四章 4.2 执行环境与作用域 理解要点: 1. js其实是一门编译语言,代码的执行分为两个阶段:(<你不知道的JavaScript(上卷)>) a.编译阶段 b.执行阶段 2. 作用域嵌套: 在当前作用域中无法找到某个变量时,引擎就…
说在前面:这是我近期开发或者看书遇到的一些点,觉得还是蛮重要的. 一.为你的 JavaScript 对象提供命名空间 <!DOCTYPE html> <html> <head> <title>为自己的js对象提供命名空间</title> </head> <body> <div>封装自己的数据和函数,防止和其他的库搞混了</div> <script> var jscbObject = {…
闭包主要涉及到js的几个其他的特性:作用域链,垃圾(内存)回收机制,函数嵌套,等等 一.作用域链:函数在定义的时候创建的,用于寻找使用到的变量的值的一个索引,而他内部的规则是,把函数自身的本地变量放在最前面,把自身的父级函数中的变量放在其次,把再高一级函数中的变量放在更后面,以此类推直至全局对象为止.当函数中需要查询一个变量的值的时候,js解释器会去作用域链去查找,从最前面的本地变量中先找,如果没有找到对应的变量,则到下一级的链上找,一旦找到了变量,则不再继续.如果找到最后也没找到需要的变量,则…
由于Node.js平台是在后端运行JavaScript代码,所以,必须首先在本机安装Node环境. 一.安装Node.js 首先,从Node.js官网下载对应平台的安装程序,网速慢的童鞋请移步国内镜像.在Windows上安装时务必选择全部组件,包括勾选Add to Path. 安装完成后,在Windows环境下,请打开命令提示符,然后输入node -v,如果安装正常,你应该看到v8.10.0这样的输出.继续在命令提示符输入node,此刻你将进入Node.js的交互环境.在交互环境下,你可以输入任…
全局中的解析和执行过程 预处理:创建一个词法环境(LexicalEnvironment,在后面简写为LE),扫描JS中的用声明的方式声明的函数,用var定义的变量并将它们加到预处理阶段的词法环境中去. 一.全局环境中如何理解预处理 比如说下面的这段代码: var a = 1;//用var定义的变量,以赋值 var b;//用var定义的变量,未赋值 c = 3;//未定义,直接赋值 function d(){//用声明的方式声明的函数 console.log('hello'); } var e…
一.HTML标签中设置CSS变量 如下: <div style="--color: #cd0000;"> <img src="mm.jpg" style="border: 10px solid var(--color);"> </div> 二.JS中设置CSS变量 如下,HTML示意: <div id="box"> <img src="mm.jpg" s…
JS的俩种引入方式: 1. <!--js的引入方式1--> <script> /*网页中的弹框*/ alert("js的学习!!") </script> 2. <!-- js的引入方式2 src=引入文件的路径 charset=指定引入的编码 注意:引入js的时候千万不要二合一 --> <script type="text/javascript" src="js/text.js" charse…
JavaScript执行上下文栈和变量对象 JS是单线程的语言,执行顺序肯定是顺序执行,但是JS 引擎并不是一行一行地分析和执行程序,而是一段一段地分析执行,会先进行编译阶段然后才是执行阶段. 例子一:变量提升 foo; // undefined var foo = function () { console.log('foo1'); } foo(); // foo1,foo赋值 var foo = function () { console.log('foo2'); } foo(); // f…
[一]基础 (1)什么是数据? 存储在内存里 代表特定信息 本质为0101,二进制数据 (2)什么是内存? 内存条通电后产生的可存储数据的空间(临时的) 拓展: 1.2种数据 2.内存分类--栈和堆 (3)什么是变量? (4)数据.变量.内存区别 [二]相关问题 (1)内存 (2)引用变量赋值 (3)传参问题 答案:值传递 (4)JS引擎如何管理内存 此时还有两个内存,因为这两者都在栈内存,堆内存已经释放.全局变量生命周期相关. [释放内存分情况] . .…