当前位置: 首页 > news >正文

公司网站建设制作商东莞网站制作十年乐云seo

公司网站建设制作商,东莞网站制作十年乐云seo,网站设计过程中需要注意的问题,贵州建设监督管理局网站序之前,生成了地形图:(42条消息) 从灰度图到地形图_averagePerson的博客-CSDN博客那末,地形的法线贴图怎么获取?大概分为两个部分吧,先拿到法线数据,再画到纹理中去。关于法线计算Unity - Scripting API: M…

之前,生成了地形图:(42条消息) 从灰度图到地形图_averagePerson的博客-CSDN博客

那末,地形的法线贴图怎么获取?

大概分为两个部分吧,先拿到法线数据,再画到纹理中去。

关于法线

计算

Unity - Scripting API: Mesh.RecalculateNormals (unity3d.com)

这个链接讲的是法线的计算,它是什么空间下的?无所谓了……

这里也不对地形搞什么几何变换,而且它是方向,模型空间世界空间是一个结果。

获取

Unity - Scripting API: Mesh.normals (unity3d.com)

直接一个等于号,然后这个法线是对顶点不是对三角形面片。

就这两点,没了。

存到纹理中

构造

Unity - Scripting API: Texture2D (unity3d.com)

这个变量,好像在unity shader里也经常出现嘞

要把法线数据存到Texture2D里,首先得构造一下对象啊,构造函数是什么?

Unity - Scripting API: Texture2D.Texture2D (unity3d.com)

RGBA32,构造RenderTexture的时候也有你。

怎么赋值?

赋值

Unity - Scripting API: Texture2D.SetPixels (unity3d.com)

  1. 直接传数组

  1. 数组要展平【mesh.normals其实就是一维的,那就可以直接用了】

  1. 最后需要Apply

  1. 从左到右从下到上【地形顶点正好也是这个顺序的】

官方示例代码:

using UnityEngine;
using System.Collections;public class ExampleClass : MonoBehaviour
{void Start(){Renderer rend = GetComponent<Renderer>();// duplicate the original texture and assign to the materialTexture2D texture = Instantiate(rend.material.mainTexture) as Texture2D;rend.material.mainTexture = texture;// colors used to tint the first 3 mip levelsColor[] colors = new Color[3];colors[0] = Color.red;colors[1] = Color.green;colors[2] = Color.blue;int mipCount = Mathf.Min(3, texture.mipmapCount);// tint each mip levelfor (int mip = 0; mip < mipCount; ++mip){Color[] cols = texture.GetPixels(mip);for (int i = 0; i < cols.Length; ++i){cols[i] = Color.Lerp(cols[i], colors[mip], 0.33f);}texture.SetPixels(cols, mip);}// actually apply all SetPixels, don't recalculate mip levelstexture.Apply(false);}
}

试一试

根据文档,调api就行了。

代码

计算法线的

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Terrian : MonoBehaviour
{public int N = 10;public Texture2D texture2dHeightMap;[Range(1,100)]public float heightRatio = 30.0f;//一个系数,控制地形总体的高度的public Texture2D normalTex;MeshRenderer meshRenderer;MeshFilter meshFilter;// 用来存放顶点数据List<Vector3> verts;List<int> indices;Vector3[] normals;private void Awake(){}private void Start(){verts = new List<Vector3>();indices = new List<int>();meshRenderer = GetComponent<MeshRenderer>();meshFilter = GetComponent<MeshFilter>();//normalTex = new Texture2D(texture2dHeightMap.width, texture2dHeightMap.height, TextureFormat.RGB24,-1,false);normalTex = new Texture2D(N,N, TextureFormat.RGB24, -1, false);//2.5D的地形,顶点的法线,法线贴图规模不是灰度图规模}private void Update(){Generate();normals = new Vector3[N * N];normals = meshFilter.mesh.normals;for(int i = 0; i < 10; ++i){print(normals[i]);}Color[] colors = new Color[N * N];for(int i = 0; i < N * N; ++i){colors[i] = new Color(normals[i].x, normals[i].y, normals[i].z);}normalTex.SetPixels(colors);normalTex.Apply(false);}public void Generate(){ClearMeshData();// 把数据填写好AddMeshData();// 把数据传递给Mesh,生成真正的网格Mesh mesh = new Mesh();mesh.vertices = verts.ToArray();mesh.triangles = indices.ToArray();mesh.RecalculateNormals();mesh.RecalculateBounds();meshFilter.mesh = mesh;}void ClearMeshData(){verts.Clear();indices.Clear();}void AddMeshData(){//01填充顶点数据for (int z = 0; z < N; ++z)//按先x后z的顶点排列顺序,所以先循环的是z{for(int x = 0; x < N; ++x){int u = Mathf.FloorToInt(1.0f * x / N * texture2dHeightMap.width);int v = Mathf.FloorToInt(1.0f * z / N * texture2dHeightMap.height);float grayValue = texture2dHeightMap.GetPixel(u,v).grayscale;float height = grayValue*heightRatio;Vector3 temp = new Vector3(x, height, z);verts.Add(temp);}}//02填充索引数据for(int z = 0; z < N - 1; ++z){for(int x = 0; x < N - 1; ++x){int index_lb = z * N + x;//index of the left bottom vertex. lb = left bottomint index_lt = (z + 1) * N + x;int index_rt = (z + 1) * N + x + 1;int index_rb = z * N + x + 1;indices.Add(index_lb);indices.Add(index_lt);indices.Add(index_rt);indices.Add(index_rt);indices.Add(index_rb);indices.Add(index_lb);}}}}

显示法线贴图的。这个是在摄像机上的——屏幕后处理嘛!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class ShowTexture2D : MonoBehaviour
{public Terrian terrian;// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){}private void OnRenderImage(RenderTexture source, RenderTexture destination){Graphics.Blit(terrian.normalTex, destination);}}

结果

看着……走势差不多吧。而且,绿色的,表示向上,符合的。

对不对?在这种情况下,没法看出来。只能接着往下做,然后拔出萝卜带出泥巴。

纯平面是纯绿色

高度系数越大,颜色越深

http://www.yayakq.cn/news/729389/

相关文章:

  • 网站建设很难吗深圳注册贸易公司网上注册流程
  • 怎样用别人的网站做修改病句国内外贸公司前十名
  • 学校网站建设步骤过程俄罗斯网站设计
  • 滨州网站建设公司报价深圳代理记账多少钱一月
  • 重庆教育建设有限公司网站首页网站价钱
  • 青岛做网站找什么公司wordpress mp4 插件
  • 聊城开发网站建设佛山网站建设首页排名
  • 响水网站制作公司浙江平湖建设局网站
  • 网站建设维护协议广东建设信息网查询成绩
  • dede 网站标题网络管理系统的管理软件
  • 网站建设需要注意.net开发手机网站
  • 长春网页网站制作广东网站建设的
  • 简单响应式网站长链接转短链接生成器
  • 深圳做手机的企业网站东莞做网站的公司吗
  • 做网站哪个好杭州公司注册虚拟地址
  • 做外国人的生意哪家网站好室内设计平面图纸
  • 基于ssh框架的网站开发流程图山东企业网站建设
  • 怎么做网站受众分析受欢迎的企业网站建设
  • 照明网站建设深圳福永做网站
  • 软件工网站开发课程设计报告织梦淘客网站
  • 重庆网站制作济南品牌网站制作公司
  • 杭州高端网站建设到蓝韵网络国内免备案网站空间
  • 做网站导航用什么开元程序网站建设服务合同缴纳印花税吗
  • 自建网站的流程乙方宝招标官网
  • 如何给网站添加关键词做营销网站制作
  • 网站建设哈尔滨网站建设1有名网站建设公司
  • 网站备案提交资料生活馆网站开发背景
  • 手机网站适合分开做高邮建设局网站
  • 母婴网站建设朝阳市网站制作
  • 投资手机网站源码下载万能wifi钥匙免费连接无线网