THREE实战4_3D纹理
图片纹理
maya中的UV测试

uv就是把物体的表面全部展开,添加图片,像皮肤一样
这边我加载一个png图片

分割六个面,组合图片

THREE中的纹理构造函数
THREE.Texture(image,mapping,wrapS,wrapT,magFilter,minFilter,format,type,anisotropy);
| 参数 | 含义 |
|---|---|
| image | 图片类型 |
| mapping | 图像将如何应用到物体(对象),默认值是THREE.UVMapping对象类型,UV坐标被用于纹理映射 |
| wraps | x轴纹理的回环方式,当纹理宽度小于需要贴图的平面的宽度的时候,平面剩下的部分应该以何种方式贴图问题 |
| wrapT | y轴回环方式 |
| magFilter | 过滤方式,OpenGL的基本概念 |
| minFilter | 过滤方式,OpenGL的基本概念 |
| format | 图片格式有RGBAFormat,RGBAFormat等 |
| type | 表示存储纹理内存的每一个字节的格式,int、float等,这里默认无符号型(THREE.UnsignedByte Type) |
| anisotropy | 各向异性过滤,为了纹理效果更好,消耗更多的内存、cpu、gpu |
为平面赋予纹理二维UV坐标
geometry.vertices[0].uv=new THREE.Vector2(0,0);
geometry.vertices[1].uv=new THREE.Vector2(1,0);
geometry.vertices[2].uv=new THREE.Vector2(1,1);
geometry.vertices[3].uv=new THREE.Vector2(0,1);//逆时针
loadertexture函数
var texture=THREE.ImageUtils.loadTexture("M.png",null,function (t) {
});//加载图片
| 参数 | 含义 |
|---|---|
| 第一个参数路径 | 相对路径 |
| 第二个参数null | 纹理坐标参数覆盖geometry的参数 |
| 第三个参数function(t) | 回调函数,成功加载纹理后需要执行的函数,参数为texture |
指定材质纹理映射
var material=new THREE.MeshBasicMaterial({map:texture});//纹理映射
mesh = new THREE.Mesh( geometry,material);
代码重构
1.渲染背景橙黄色0xfd971f,背景颜色。
renderer.setClearColor(0xfd971f, 1.0);//橙黄色背景利于观察正方体
2.透视相机就位
var camera;
function initCamera() {
camera = new THREE.PerspectiveCamera(120, width/height, 1, 1000);
camera.position.x = 0;
camera.position.y = 0;
camera.position.z = 700;
camera.up.x = 0;//相机朝向位置
camera.up.y = 1;
camera.up.z = 0;
camera.lookAt(new THREE.Vector3(0,0,0));
}
3.白色环境光就位
function initLight() {
var light=new THREE.AmbientLight(0xffffff);//白色环境光,无处不在
var light_help=new THREE.SphereGeometry(16,16,16);
light.add(new THREE.Mesh(light_help,new THREE.MeshBasicMaterial({color:0xffffff})));//白色
scene.add(light);
}
4.创建box
var mesh=null;//全局变量
function initObject() {
var geometry = new THREE.CubeGeometry(300,300,300);//几何体
var material = new THREE.MeshLambertMaterial( { color:0xFFFFFF} );//白色
mesh = new THREE.Mesh( geometry,material);
mesh.position = new THREE.Vector3(0,0,0);
scene.add(mesh);
}

5.纹理贴图准备,重构几何体材质代码
var mesh=null;//全局变量
function initObject() {
var geometry = new THREE.CubeGeometry(300,300,300);//几何体
geometry.vertices[0].uv=new THREE.Vector2(0,0);
geometry.vertices[1].uv=new THREE.Vector2(1,0);
geometry.vertices[2].uv=new THREE.Vector2(1,1);
geometry.vertices[3].uv=new THREE.Vector2(0,1);
var texture=THREE.ImageUtils.loadTexture("demo1.jpg",null,function (t) {
});
var material=new THREE.MeshBasicMaterial({map:texture});//纹理映射
//var material = new THREE.MeshLambertMaterial( { color:0xFFFFFF} );//白色
mesh = new THREE.Mesh( geometry,material);
mesh.position = new THREE.Vector3(0,0,0);
scene.add(mesh);
}
6.为了利于观察,循环渲染加上box旋转
function animation()
{
mesh.rotation.y+=0.01;//绕y轴旋转
renderer.render(scene, camera);
requestAnimationFrame(animation);//递归调用
stats.update();//fps
}
测试的图片纹理

ok,奈斯运行看效果!

没问题!
智能推荐
OpenGL与3D开发-应用纹理贴图
应用纹理贴图 文章目录 应用纹理贴图 1、纹理的基本概念 2、纹理坐标 2.1坐标映射 3、纹理映射的步骤是 1. 启用纹理映射功能 2.创建纹理对象 3. 设置纹理属性 4. 指定纹理 5.纹理映射 6.绑定纹理 4、纹理环绕(Texture Wrapping) 5、纹理过滤 5.1 有三种情况: 5.2 OpenGL允许我们为放大和缩小分配过滤器,并允许我们使用最邻近、双线性和三线性过滤。 5...
【U3D/Shader】05.基础纹理(上)基础纹理,凹凸映射
自我介绍 广东双非一本的大三小白,计科专业,想在制作毕设前夯实基础,毕设做出一款属于自己的游戏! 基础纹理 概念: 单张纹理 纹理映射坐标:也称UV坐标,范围在 [0, 1] 之间 逐纹素(纹素主要是和像素进行区分):控制模型的颜色 凹凸纹理 凹凸映射,也称法线纹理映射 单张纹理 我们通常会用一张纹理来代替物体的漫反射颜色 需要注意的是: 尽管在属性区里只定义了一个 _MainTex("...
Three JS 3D渲染JS引擎
1.定义 Three.js是一款开源的主流3D绘图JS引擎(名字Three就是3D的含义),原作者为Mr.Doob,GItHub项目地址为:https://github.com/mrdoob/three.js/,可以下载项目,分析下源码和实现原理。 我们知道WebGL是一种网页3D绘图标准,和jQuery简化了HTML DOM操作一样,Three.js可以简化WebGL编程。 WebGL是HTML...
安卓:通过BaseAdapter适配器对ListView组件的简单应用案例
项目结果演示: 案例实现流程: 在布局文件中新建一个ListView组件 ↓ 在另一个布局文件中新建一个用于展示的布局文件 ↓ 在java文件中新建实体类Student ↓ 在java文件中新建StudentApdater继承BaseAdapter并覆写相关方法(重点:覆写getView方法) ↓ 通过LinkedList插入数据 ↓ 调用自己定义...
递归与树(三)
图的遍历: 深度优先搜索 从任意节点开始, 访问v。 (递归的)访问每一个依附于v的(未访问过的)节点。 如果图是连通的,我们最终可以到达所有的节点。 深度优先搜索递归实现: 要访问图中与节点k相连的所有节点,我们将它标记为访问过的,然后递归的访问k的邻接表中所有未访问过的节点。 void traverse(link k,void (*visit)(int)) { li...
猜你喜欢
博客运用Hexo-Next主题美化(上)
–此篇文章有转载,转载url放在最后方 1、前言 上篇文章已经在Windows上将个人博客个搭建好了(如果还不知道怎么搭建的,可以戳这里,可是大家有没有发现,搭建的Hexo博客使用的是默认主题,而且不咋好看,跟那些大神们的个人博客相比,还差了很多,不过不要紧,看完这篇文章,你也可以拥有那些炫酷吊炸天的效果。废话少说,那就直接开始吧。 2、设置主题 Hexo给我们提供了很多的主题供我...
spring-boot整合jax-ws发布服务
第一步:导入依赖 第二步:创建接口 第三步:创建实现类 第四部:创建配置类 第五部:启动项目,访问http://localhost:8091/demo/api?wsdl 显示效果如下,则发布成功...
ArrayList中的迷惑行为
当我准备利用ArrayList的add(index,element)方法时遇到一个郁闷的结果。 废话不多说,show time 我现在需要满足一个需求,就是希望利用arrayList可以将本来的无序的元素添加到对应的index下 执行后: java.lang.IndexOutOfBoundsException: Index: 3, Size: 0 ArrayList初始化源码 因为初始化的 arr...
1+x云计算中级,第二天串讲,拓扑图
1+x云计算中级,串讲第二天的内容为利用ensp模拟华为设备 拓扑图如下 需要达到的效果:网络互通,各个vlan之间能正常通信,三个PC机能通过dhcp获得地址,能够通过cloud连接到外网,ping通8.8.8.8 需要用的技术有,vlan划分,OSPF,静态路由,路由的重发布,nat,基于端口的dhcp技术,cloud的使用 配置步骤 cloud的设置,连接物理机的网卡,请选择vm netwo...
小波变换图像融合
最近在做一个小实验,基于小波变换对图像进行融合的MATLAB实验。 ***小波变换图像融合原理:***对一幅灰度图像进行N层的小波分解,形成3N+1个不同频带的数据,其中有3N个包含细节信息的高频带和一个包含近似分量的低频带。分解层数越多,越高层的数据尺寸越小,形成塔状结构,用小波对图像进行多尺度分解的过程,可以看作是对图像的多尺度边缘提取过程。小波变换具有空间和频域局部性,它可将图像分解到一系列...
