THREE实战4_3D纹理

标签: webgl  图片纹理

图片纹理

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,奈斯运行看效果!
在这里插入图片描述
没问题!

版权声明:本文为qq_38870145原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_38870145/article/details/105112255

智能推荐

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个包含细节信息的高频带和一个包含近似分量的低频带。分解层数越多,越高层的数据尺寸越小,形成塔状结构,用小波对图像进行多尺度分解的过程,可以看作是对图像的多尺度边缘提取过程。小波变换具有空间和频域局部性,它可将图像分解到一系列...