c# - Unity:从地形创建纹理
问题描述
我有一个程序生成Terrain
,基于Unity's Terrain System
.
现在我想要一个Map
来自 的Terrain
,不是小地图而是完整的地图,保存为2D Texture
.
首先我想到了a RenderTexture
,但是如果我用aCamera
来捕捉整体Terrain
,结果取决于分辨率方面,而且我也有问题,因为width
theTerrain
是。3.2x
length
有没有更好的方法来解决这个问题?
解决方案
制作一个新相机并将其放置在地形上。
确保它处于正交模式
将
camera.aspect
字段设置为terrainData.size.x / terrainData.size.z
将
camera.orthographicSize
字段设置为terrainData.size.z/2f
确保相机框架的方向与地形的轴一致。类似的东西
cam.transform.LookAt(terrain.GetPosition(), terrain.transform.forward);
可以解决问题。
然后,您应该能够RenderTexture
使用您想要的像素分辨率创建一个(基于Rafal Wiliński 的这个答案):
int resHeight = 1000;
int resWidth = Mathf.RoundToInt(resHeight * camera.aspect);
RenderTexture rt = new RenderTexture(resWidth, resHeight, 24);
camera.targetTexture = rt; //Create new renderTexture and assign to camera
Texture2D screenShot = new Texture2D(resWidth, resHeight, TextureFormat.RGB24, false); //Create new texture
camera.Render();
RenderTexture.active = rt;
screenShot.ReadPixels(new Rect(0, 0, resWidth, resHeight), 0, 0); //Apply pixels from camera onto Texture2D
camera.targetTexture = null;
RenderTexture.active = null; //Clean
Destroy(rt); //Free memory
然后,您的地形将被捕获screenshot
推荐阅读
- python - 用特定变量替换 null
- tfs - 内部 TFS 中是否提供构建管道触发器
- actions-on-google - Action on Google 用户查询的时长是否有限制?
- sql - 列出 SQL Server 中所有删除的数据库
- sql - 选择 ID 范围 SQL Server 之间的总和
- sql - SQL - 连接多个表
- r - R - svyciprop 不能仅与集群中的两个组一起使用
- json - 抓取 JSON 并将其映射到对象
- amazon-web-services - 在 AWS Query 中列出 EBS VolumeID 和 Instance ID
- python-3.x - YahooFinancials:将多维字典写入 csv