Unity 法线翻转
直接上干货
Vector3[] normals = line.GetComponent<MeshFilter>().mesh.normals;for (int i = 0; i < normals.Length; i++) {normals[i] = -normals[i];}line.GetComponent<MeshFilter>().mesh.normals = normals;int[] triangles = line.GetComponent<MeshFilter>().mesh.triangles;for (int i = 0; i < triangles.Length; i += 3) {int t = triangles[i];triangles[i] = triangles[i + 2];triangles[i + 2] = t;}line.GetComponent<MeshFilter>().mesh.triangles = triangles;
刚开始想到做法线翻转,只想到了直接把法线取负值,就是第一段代码
Vector3[] normals = line.GetComponent<MeshFilter>().mesh.normals;for (int i = 0; i < normals.Length; i++) {normals[i] = -normals[i];}line.GetComponent<MeshFilter>().mesh.normals = normals;
结果是这样子:
就是一个没有任何光线信息的样子(纯黑)
然后呢,我就一直百度,以求找到解决办法,百度了一个晚上,都是说,“为什么不到3dmax/MAYA中翻转法线呢”,你大爷的!
然后转战Google,5分钟后解决问题= =
int[] triangles = line.GetComponent<MeshFilter>().mesh.triangles;for (int i = 0; i < triangles.Length; i += 3) {int t = triangles[i];triangles[i] = triangles[i + 2];triangles[i + 2] = t;}line.GetComponent<MeshFilter>().mesh.triangles = triangles;
加上了第二段代码之后,是这样子的:
(是的,我做的是卡通渲染的描边,没使用shader)
Mesh.vertices
中,保存的是图形的顶点信息。
Mesh.triangles
中,保存的是对应于Mesh.vertices
的顶点的索引。就是一个三角形在渲染中的三个顶点的顺序,所以Mesh.triangles
的长度应该是3的倍数(Mesh.triangles
的类型为int[])
那为什么要交换第一点跟第三点的位置呢?
假如现在一个三角形是由P0、P1、P2,三个点组成的一个三角形。
那么,他的绘制的顺序应该是这样子的:
呈现一个逆时针的样子。图形学中(前几天看蓝宝书看到的,忘了是OpenGL中的还是说图形学中都是这样,请指正。Ps. 应该是逆时针吧)将拥有逆时针环绕的多边形为正面。
即上面这个三角形为正面
若我们从屏幕后面那个方向看这个三角形的话,那你看到的是他的背面。
当我们交换三角形的第一点跟第三点后,他的渲染顺序将变成这样子:
变成了从P2到P1再到P0的这么一个顺序。即这个三角形现在是一个顺时针环绕,我们看到的这个面,是他的背面。
在Unity中,默认的渲染是不会渲染背面的。
这样子就会出现刚才的这个效果
这是本人写的第一个文章,有什么不足之处,请指正。
写本文的目的在于,苦苦寻找解决解决方法的您不会像我一样,找了一晚上的百度,啥都没找到。(Ps.这样应该能百度得到吧)
Unity 法线翻转相关推荐
- Unity 法线贴图、高光贴图、Cube Map shader
Unity 相关纹理贴图 写unity shader有些时候了,出于寂寞,拿出来晒晒吧!!!! 先看一下Unity 法线贴图.高光贴图.Cube Map shader最终效果: 说老实话,我不怎么喜欢 ...
- unity法线贴图,光线烘培的应用
法线贴图 法线贴图是比较常用的一种贴图,作用是使一些面数比较少的模型的纹理更加的精致和逼真.这样在大幅度减少了运行的性能消耗,也能达到比较好的游戏画面.unity3d中有比较简单的法线贴图,就是看起来 ...
- blender翻转面法线
1.进入模型面板,即编辑模式 2.选择面编辑 3.选中面 4.在Mesh下找到法线–>翻转
- Unity Shader 学习记录(5) —— 实现漫反射光照模型
1 公式计算 从公式可以看出,要计算漫反射需要知道4 个参数:入射光线的颜色和强度 cgh"材质的漫反射系数mdiuse,表面法线n以及光源方向I. 为了防止点积结果为负值,我们需要使用ma ...
- Unity Shader学习记录(6) —— 高光反射光照模型和内置计算函数
1 高光反射光照模型计算公式 从公式可以看出,要计算高光反射需要知道 4 个参数:入射光线的颜色和强度c,材质的光反射系数 m,视角方向v以及反射方向r.其中,反射方向r可以由表面法线n和光源i计算得 ...
- Unity 图片拼接中间有空隙问题详解
有一种美,叫对称美.对称随处可见,从皇城庙宇到民宅轩榭,对称之美,美在庄重.项目中,我们常常会遇到一些对称的图片,但是为了节约资源,往往我们会选择将其分成两半,只取其一,另一半直接在Unity中翻转就 ...
- unity图片水平/垂直翻转
转载出处:Unity 图片翻转 //水平翻转Texture2D HorizontalFlipTexture(Texture2D texture){//得到图片的宽高int width = textur ...
- Unity Shader - 实现简单水体 - 浅水到深水颜色控制
文章目录 制作步骤 准备好水体网格 扰动水体网格 添加水体网格色调,纹理 放置海上放哨点(一些随便放的立方体) 添加水的深浅透视效果 添加水光效 重构水顶点法线 正交的相机的深度需要注意 改进 Pro ...
- fopen的路径怎么写_用C++写光线追踪:单根光线的渲染
0.背景介绍 我依稀记得自己写过一个"用unity写光线追踪"的系列,写了有几篇吧,最新一篇的大体内容早已写完,但始终无法解决网格模型在unity中的读取问题,故搁置了下去.点数组 ...
- Ruby Rose动态壁纸制作记录
为Wallpaper Engine做的动态壁纸,使用Unity制作,在这里记录一下制作过程和一些遇到的坑,以后有了github账号再搬到那边去. 最后大概要做出这样的效果,截图来自RWBY " ...
最新文章
- 心理所发表关于神经科学研究可信度的评论文章
- IDEA 运行run 为灰色解决办法
- python 微信_wxpy: 用 Python 玩微信
- Dx11DemoBase 基类(三) 实例应用 【已实现】【附带源码】
- map的key可以试一个数组吗?_二维数组的 DP
- 手机蓝绿厂终于转正了,已有“名分”!
- Service onStartCommand 返回值
- pandas统计所有列的基础数据
- 概率图模型(总结篇)
- 手写instanceof
- 一分钟让你了解蓝桥杯(电子类)单片机比赛规则
- miui9免解锁root,Miui解锁
- CTS、CTS Verify、GTS测试以及GMS认证介绍
- 【关于Java方法的学习】
- python的与 或 异或 运算
- Vue项目加载过慢优化研究
- Unity中使用TexturePacke打包的图集
- 微信内置浏览器Ajax请求10s超时重发问题的解决方案
- java jdbc连接sql server2014
- php习题,PHP程序设计试题与答案