直接上干货

        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 法线翻转相关推荐

  1. Unity 法线贴图、高光贴图、Cube Map shader

    Unity 相关纹理贴图 写unity shader有些时候了,出于寂寞,拿出来晒晒吧!!!! 先看一下Unity 法线贴图.高光贴图.Cube Map shader最终效果: 说老实话,我不怎么喜欢 ...

  2. unity法线贴图,光线烘培的应用

    法线贴图 法线贴图是比较常用的一种贴图,作用是使一些面数比较少的模型的纹理更加的精致和逼真.这样在大幅度减少了运行的性能消耗,也能达到比较好的游戏画面.unity3d中有比较简单的法线贴图,就是看起来 ...

  3. blender翻转面法线

    1.进入模型面板,即编辑模式 2.选择面编辑 3.选中面 4.在Mesh下找到法线–>翻转

  4. Unity Shader 学习记录(5) —— 实现漫反射光照模型

    1 公式计算 从公式可以看出,要计算漫反射需要知道4 个参数:入射光线的颜色和强度 cgh"材质的漫反射系数mdiuse,表面法线n以及光源方向I. 为了防止点积结果为负值,我们需要使用ma ...

  5. Unity Shader学习记录(6) —— 高光反射光照模型和内置计算函数

    1 高光反射光照模型计算公式 从公式可以看出,要计算高光反射需要知道 4 个参数:入射光线的颜色和强度c,材质的光反射系数 m,视角方向v以及反射方向r.其中,反射方向r可以由表面法线n和光源i计算得 ...

  6. Unity 图片拼接中间有空隙问题详解

    有一种美,叫对称美.对称随处可见,从皇城庙宇到民宅轩榭,对称之美,美在庄重.项目中,我们常常会遇到一些对称的图片,但是为了节约资源,往往我们会选择将其分成两半,只取其一,另一半直接在Unity中翻转就 ...

  7. unity图片水平/垂直翻转

    转载出处:Unity 图片翻转 //水平翻转Texture2D HorizontalFlipTexture(Texture2D texture){//得到图片的宽高int width = textur ...

  8. Unity Shader - 实现简单水体 - 浅水到深水颜色控制

    文章目录 制作步骤 准备好水体网格 扰动水体网格 添加水体网格色调,纹理 放置海上放哨点(一些随便放的立方体) 添加水的深浅透视效果 添加水光效 重构水顶点法线 正交的相机的深度需要注意 改进 Pro ...

  9. fopen的路径怎么写_用C++写光线追踪:单根光线的渲染

    0.背景介绍 我依稀记得自己写过一个"用unity写光线追踪"的系列,写了有几篇吧,最新一篇的大体内容早已写完,但始终无法解决网格模型在unity中的读取问题,故搁置了下去.点数组 ...

  10. Ruby Rose动态壁纸制作记录

    为Wallpaper Engine做的动态壁纸,使用Unity制作,在这里记录一下制作过程和一些遇到的坑,以后有了github账号再搬到那边去. 最后大概要做出这样的效果,截图来自RWBY " ...

最新文章

  1. 心理所发表关于神经科学研究可信度的评论文章
  2. IDEA 运行run 为灰色解决办法
  3. python 微信_wxpy: 用 Python 玩微信
  4. Dx11DemoBase 基类(三) 实例应用 【已实现】【附带源码】
  5. map的key可以试一个数组吗?_二维数组的 DP
  6. 手机蓝绿厂终于转正了,已有“名分”!
  7. Service onStartCommand 返回值
  8. pandas统计所有列的基础数据
  9. 概率图模型(总结篇)
  10. 手写instanceof
  11. 一分钟让你了解蓝桥杯(电子类)单片机比赛规则
  12. miui9免解锁root,Miui解锁
  13. CTS、CTS Verify、GTS测试以及GMS认证介绍
  14. 【关于Java方法的学习】
  15. python的与 或 异或 运算
  16. Vue项目加载过慢优化研究
  17. Unity中使用TexturePacke打包的图集
  18. 微信内置浏览器Ajax请求10s超时重发问题的解决方案
  19. java jdbc连接sql server2014
  20. php习题,PHP程序设计试题与答案

热门文章

  1. Laplance算子(二阶导数)
  2. 压缩包修改所属目录Linux,LINUX 压缩、解压、打包文件 修改文件所属组
  3. 10个程序员可以接私活的平台和一些建议
  4. 一文带你明白什么是浏览器插件?
  5. sentinel.conf样例
  6. Web.xml 错误或异常页面配置
  7. WIN7常用使用设置
  8. PHP全国快递寄件接口,1天接入四通一达,极兔,宅急送,德邦,京东,天天
  9. SHoj 420 购买装备
  10. docker安装kafka和zookeeper