【问题标题】:Unity: Create a texture from TerrainUnity:从地形创建纹理
【发布时间】:2019-11-17 01:23:18
【问题描述】:

我有一个基于Unity's Terrain System 的程序生成Terrain

现在我想要来自TerrainMap,不是小地图而是完整地图,保存为2D Texture

首先我想到了RenderTexture,但如果我用Camera 来捕捉整个Terrain,结果取决于分辨率方面,我也有问题导致@987654331 的width @ 是3.2x length

有没有更好的方法来解决这个问题?

【问题讨论】:

  • 我会在地形上设置一个正交相机,其宽度和高度与地形相匹配,您可以随意设置纹理的分辨率
  • @Ruzihm 我试过了,但是如果屏幕纵横比发生变化,宽度和高度将不再与地形匹配。是否可以通过某种方式设置正交相机,使其获得不随分辨率变化的固定值?
  • 是的! “在宽度和高度与地形匹配的地形上设置正交相机”的一部分包括设置该相机的纵横比。请参阅my answer 了解更多信息。

标签: c# unity3d unity3d-terrain


【解决方案1】:
  1. 制作一个新相机并将其放置在地形上。

  2. 确保它处于正交模式

  3. camera.aspect字段设置为terrainData.size.x / terrainData.size.z

  4. camera.orthographicSize字段设置为terrainData.size.z/2f

  5. 确保相机框架的方向与地形的轴一致。类似于cam.transform.LookAt(terrain.GetPosition(), terrain.transform.forward); 的东西可以解决问题。

然后,您应该能够创建一个具有您想要的像素分辨率的RenderTexture(基于 Rafal Wiliński 的this answer):

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

【讨论】:

  • 谢谢,成功了!只需两件事,您需要将 camera.aspect 设置为“terrainData.size.x / terrainData.size.z”,将 camera.orthographicSize 设置为“terrainData.size.z / 2f”。
【解决方案2】:

这个问题有四种解决方案,按优先顺序排列:

  1. 显示缩放到屏幕垂直分辨率的图像,并创建水平滚动机制。这可能需要针对屏幕外目标的附加指标。

  2. 以全分辨率或统一缩小的分辨率显示地图,并进行全 X、Y 滚动。

  3. 缩小图像以适应屏幕的宽度。这将在屏幕的顶部和底部创建“信箱”边框。

  4. 将整个图像缩放到屏幕分辨率。造成严重失真。

长宽比问题没有“灵丹妙药”的解决方案。

【讨论】:

  • 我的问题不是将图像缩放到分辨率,而是用不同分辨率的相机创建图像。
  • 那么请在您的问题中说明。
猜你喜欢
  • 2018-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-20
相关资源
最近更新 更多