您的位置 首页 > 数码极客

如何投影贴图 草图大师投影贴图

记得关注我们哦

今天给大家分享一点关于Android图像处理的知识,OpenGL ES的纹理投影效果,知道纹理投影效果的原理吗?知道是怎么操作的嘛?话不多说,动手搞起来。

同时,在给大家分享之前,这里推荐下我自己建的Android技术分享群 :539850601,不管你是小白还是大牛,小编我都挺欢迎,不定期分享干货,包括2017最新的Android企业案例学习资料和零基础入门教程,欢迎初学和进阶中的小伙伴,大家一起交流学习,共同进步。

首先今天为大家介绍如何把一张纹理贴图投影到复杂的几何体上。下面是例子运行的结果。

下面是未开启纹理投影的效果图。

这张是用来投影的纹理图。

涉及到的重要知识点

1.基本几何体的渲染

2.法线贴图

3.纹理坐标

4.投影矩阵

基本原理

这个效果和真实生活中的投影仪很像。假设我们把投影仪当做一个摄像机,并且设置好投影矩阵,如下图所示。那么投影仪就具备了MVP中的VP两个矩阵了。

3D物体的顶点经过投影仪的VP和自身的M变换后就会变成投影仪空间的坐标。

经过投影变换的点如果在可视范围内,它的x,y都会落在-1和1之间,所以我们可以将投影仪空间的坐标当做UV来使用,UV的范围是0~1,-1~1的范围只要加1再乘以0.5就可以很方便的变换成0~1的范围。这样我们就可以根据顶点在投影仪空间的坐标来获取UV了。

Fragment Shader

本文使用的Fragment Shader在 文件中。首先我们添加投影的纹理贴图和投影矩阵。

useProjector 主要用作开关投影效果。projectorMatrix 由投影仪的投影矩阵和观察矩阵相乘而来。

接着根据投影仪空间的坐标计算UV

positionInProjectorSpace /= ;

positionInProjectorSpace /= ; 之所以要除以 w,是因为如果你使用的是透视投影矩阵,那么有可能 w 不为1,这时候需要 xyzw 都除以 w 保证 xy范围的正确性。

最后我们判断UV的坐标来决定是否接受到了投影

UV超出0~1范围的说明不在投影仪的可视范围内,所以不需要进行投影处理。

这里我使用4:6的比例简单的混合了两种颜色。

你也可以把它当做光照颜色来处理,使用它计算diffuse和specular的颜色。

上面便是Fragment Shader中和投影效果相关的代码。

生成并刷新投影仪的矩阵

我们回到OC代码来生成投影仪需要的VP矩阵。

每次渲染时我都会刷新 projectorMatrix,让它围绕y轴旋转。只要让camera的up向量围绕y轴旋转就可以做到这一点。随着 projectorMatrix的旋转,投影的纹理也会随之旋转。

然后把 projectorMatrix 赋值给uniform就可以了。

投影纹理

针对投影纹理需要处理的事情很简单,初始化&设置uniform。

最后大家如果觉得不错就点赞转发+关注哦

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“如何投影贴图,草图大师投影贴图,su投影贴图,sketchup投影贴图”边界阅读