Three.js个人学习笔记三

纹理

纹理在3D世界中,就类似于皮肤的概念
3D世界的纹理由图片组成。纹理就是图片,或者贴图。将纹理以一定的规则映射到几何体上,一般是三角形上,那么这个几何体就有纹理皮肤了。

在three.js中要实现纹理,首先应该有一个纹理类,其次是有一个加载图片的方法,将这张图片和这个纹理类绑定起来。

THREE.Texture(image, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy)

Image:这是一个图片类型,基本上它有ImageUtils来加载,如下代码:

var image = THREE.ImageUtils.loadTexture(url); 
// url 是一个http://xxxx/aaa.jpg 的类似地址,javascript没有从本地加载数据的能力,所以没有办法从您电脑的C盘加载数据。

Mapping:是一个THREE.UVMapping()类型,它表示的是纹理坐标。

wrapS:表示x轴的纹理的回环方式,就是当纹理的宽度小于需要贴图的平面的宽度的时候,平面剩下的部分应该p以何种方式贴图的问题。

wrapT:表示y轴的纹理回环方式。

magFilter和minFilter表示过滤的方式,这是OpenGL的基本概念。当不设置的时候,它会取默认值。

format:表示加载的图片的格式,这个参数可以取THREE.RGBAFormat,RGBFormat等。THREE.RGBAFormat表示每个像素点要使用四个分量表示,分别是红、绿、蓝、透明来表示。RGBFormat则不使用透明,也就是说纹理不会有透明的效果。

type:表示存储纹理的内存的每一个字节的格式,是有符号,还是没有符号,是整形,还是浮点型。默认是无符号(THREE.UnsignedByteType)。

anisotropy:各向异性过滤。使用各向异性过滤能够使纹理的效果更好,但是会消耗更多的内存、CPU、GPU时间。

为平面赋纹理坐标

在给平面赋纹理坐标的时候也要注意方向,要为逆时针方向

扫描二维码关注公众号,回复: 2999677 查看本文章

将canvas作为纹理,将动画作为纹理

从本质上来说,纹理只是图片而已,它是由像素点组成。无论在内存还是显存中,它都是由4个分量组成,这四个分量是R、G、B和A。唯一的不同的,在显存中,会比内存中更快的渲染到显示器上。这是毋庸置疑的,因为显存中的帧缓冲本来就是和显示器上 的像素一一对应的。

从上面的概念中,我们就能够引申出一些重要的理解了,就是只要是图像数据,准确的说是内存或者显存中的图像数据,都可以作为纹理,显示在屏幕中。

上面的是通过loadtexture函数在服务器上加载一张图片作为纹理,接下来的是通过html中的canvas来作为纹理。

它们两者之间有很多差别,这个差别就是图片和canvas的差别,图片是通过图像处理软件,如photoshop来处理的。而canvas是通过浏览器的绘图API来绘制的。显示canvas能够给程序员更多的想象空间,从而做出更有意思的效果出来。
过程:

1.在canvas上画图
2.将canvas传递给THREE.Texture纹理
3.将纹理传递给THREE.MeshBasicMaterial材质
4.最后构造THREE.Mesh

ps:感兴趣的可以去原网站看详细的http://www.hewebgl.com

猜你喜欢

转载自blog.csdn.net/disasters/article/details/81783008