2015-04-24 09:32:07 lingbaoer1234 阅读数 21212
  • ArcGIS之数字高程模型(DEM)分析上篇视频课程(GIS...

    课程采用ArcGIS10.3.1中文版进行录制,适用于10.0、10.1、10.2、10.4系列。介绍DEM的综合应用,使得学习者知道如何运用DEM进行在插值、精度检验,等高线编辑等,掌握TIN格式的创建及处理,不同数字高程模型之间的转换。DEM三种纬度可视化,使你在数据分析、制图、理论都有一大稳步提升。

    3688 人正在学习 去看看 黄晓军


Unity3D手册中介绍了两种地形制作方法:

1、在SceneView中使用height tools直接绘制;

2、使用外部工具制作的heightmaps;

生成真实地形,需要用到heightmaps方法,具体操作如下:

1、准备一块DEM数据,格式为img或tiff,并准备好Global Mapper和Photoshop两款软件;

2、在Global Mapper 14.1中文版中“文件”->“打开数据文件”,选择DEM数据文件,比如test.img,然后弹出对话框选“全是”;


打开后如图所示:


 

3、打开地形文件后,在工具栏下拉列表中选择“梯度渲晕”,在此列表框后面有一个“启用/取消晕渲”的按钮,我们需要取消渲染;

 

4、此时显示的是此dem数据的灰度图,如下:

 

我们可以导出这幅图;点击“文件”->“输出光栅/图像格式”,弹出对话框内选择JGP,然后点确定,又弹出一个框,还选确定,弹出下一个框。

 

5、在此对话框内设置jpg的属性;采样间距可以自己填写,值越小,图片经度越大,若不知道怎么选择可以先按默认值,后期看图片分辨率,根据需要在重设此参数,“图像品质”也可自行选择,而“光栅输出的带设置”中必须选择“灰度(1 8-字节带)”,下面的“生成世界文件”和“生成投影文件”可以不勾选,此文件对导入地形无关;

 

6、此时生成了一个“test.jpg”;我们用photoshop进行打开编辑;打开图片后选择“图像”->“画布大小”;单位选择像素,长宽值填写值需要是2的指数次幂比如1024或2048(我用的Unity版本中导入的图片大小貌视不能大于2048,否则会出错),这时我将宽度和高度均设置为2048(这里需要将长宽设置成一样值),点击确定;

 

7、导出raw文件;选择“文件”->"存储为",格式中选择raw,“保存”生成一个test.raw的文件;

 

8、打开Unity,在"Terrain"->"Create Terrain"中创建地形,然后点击“Terrain”->"Import Heightmap - Raw",导入刚生成的raw文件;

点击“设置”:

 

“Import Raw”在这儿:

 

9、在弹出对话框中进行设置,Depth选择8bit,Width选择2048,Height输入2048,ByteOrder根据自己的情况选择Mac或Windows,地形x,z先默认2000,y是高度,表示地形最高处的高度,我写200,直接点击“Import”即可以导入该地形;

 

10、如果原来地形有地貌,可以在Globalmap中使用地貌导出一张jpg文件作为Unity中可导入的纹理,按地形大小贴到导入的这块地形上。

 

这里的x,y要和之前地形的x,y大小保持一致才可以完整贴到地形上。

 

最终效果如下(还不错哈):

 

(PS:如果导入图片后发现图片和地形位置不对应可以在ps里对图片进行翻转和旋转等操作,进行调整):

 


2018-05-10 16:58:21 u013589768 阅读数 5166
  • ArcGIS之数字高程模型(DEM)分析上篇视频课程(GIS...

    课程采用ArcGIS10.3.1中文版进行录制,适用于10.0、10.1、10.2、10.4系列。介绍DEM的综合应用,使得学习者知道如何运用DEM进行在插值、精度检验,等高线编辑等,掌握TIN格式的创建及处理,不同数字高程模型之间的转换。DEM三种纬度可视化,使你在数据分析、制图、理论都有一大稳步提升。

    3688 人正在学习 去看看 黄晓军

使用ArcGIS工具转换国标.dem文件为通用.tif格式

*.dem是一种比较常见的DEM数据格式,其有两种文件组织方式,即NSDTF-DEM和USGS-DEM 1

  • NSDTF-DEM
    NSDTF-DEM是一种明码的中国国家标准空间数据的交换格式,遵从国家标准GB/T 17798-2007《地理空间数据交换格式》中的格网数据组织规范。

  • USGS-DEM
    USGS-DEM是一种由美国地质调查局所定义的公开的DEM数据格式标准,使用范围较广。这种格式的DEM可以通过ArcGIS可以直接读取,并在ArcGIS中的ArcToolBox中的“转换工具”“转到栅格””DEM转到栅格”工具直接将USGS格式的DEM转为栅格DEM。

NSDTF-DEM和USGS-DEM都是明码的数据交换格式,理论上,二者间的对应转换只需要将NSDTF中的头文件数据按USGS的格式重新组织后再通过ArcGIS中的”DEM转到栅格”工具即可转换为其他软件能够支持的通用栅格格式DEM数据;但实际操作时发现这两个文件之间的区别不仅仅在于头文件中,故而绕了点路执行下面的操作。


Step 1 将NSDTF-DEM头文件修改为USGS-DEM头文件

NSDTF-DEM的头文件信息如下(图转自超图对接NSDTF-DEM数据):

头文件每行数据对应的含义为:

DataMark:中国地球空间数据交换格式-格网数据交换格式(CNSDTF-RAS或CNSDTF-DEM)的标志。基本部分,不可缺省。
Version:该空间数据交换格式的版本号,如1.0。基本部分,不可缺省。
Unit:坐标单位,K表示公里,M表示米,D表示以度为单位的经纬度,S表示以度分秒表示的经纬度(此时坐标格式为DDDMMSS.SSSS, DDD为度, MM为分, SS.SSSS为秒)。基本部分,不可缺省。
Alpha:方向角。基本部分,不可缺省。
Compress:压缩方法。0表示不压缩,1表示游程编码。基本部分,不可缺省。
Xo:左上角原点X坐标。基本部分,不可缺省。
Yo:左上角原点Y坐标。基本部分,不可缺省。
DX:X方向的间距。基本部分,不可缺省。
DY:Y方向的间距。基本部分,不可缺省。
Row:行数。基本部分,不可缺省。
Co:列数。基本部分,不可缺省。
HZoom:高程放大倍率。基本部分,不可缺省。设置高程的放大倍率,使高程数据可以整数存贮,如高程精度精确到厘米,高程的放大倍率为100。如果不是DEM则HZoom为1。

USGS-DEM的头文件信息如下(图转自超图对接NSDTF-DEM数据):

其头文件每行数据对应的含义及参考转换方式2为:

ncols:数据列数,对应Co
nrows:数据行数,对应Row
xllcorner: 左上角x坐标值,对应Xo
yllcorner: 左上角y坐标值,对应Yo
cellsize: 数据分辨率(栅格单元的宽高),对应DXDY
NODATA_value: 无值数据标识。

注意:该作者也是转载的博客,但并没有粘贴地址;他的博客下边写了一个备注,具体内容可自行查看,经过实际测试发现,的确应把yllcorner的值赋为Yo-Row*DY,否则坐标有偏差。

Step 2 将USGS-DEM转换为栅格数据

直接修改后的文件是可以直接用ArcMap打开的,但是并不能在OSG中进行读取和显示,提示缺少对应的空间参考,因此应该在ArcMap中进行相关的操作并把它转换为栅格数据,方便各种平台的数据接入。
在ArcGISz中导出相应的栅格数据的方法为:在打开的*.dem文件上右键“数据”“导出数据”,选择导出路径后,在格式处选择TIFF。
这里需要注意,国标文件中的HZoom值无法体现在USGS-DEM中,因此需要借助ArcToolBox里 “Spatial Analyst 工具箱”“地图代数”“栅格计算器”计算转换后的GRID(注意不能填整数,不然会丢失很多信息),使它和原始数据保持一致。
当然也可以自己手动修正*.dem文件中的数据,编程实现或.csv用Excel处理都是可以的,但无论怎样,都要保证栅格中存储的高程数据与原始数据保持一致。

Step 3 为导出的栅格数据赋空间参考信息

我们这样导出的栅格数据实际上是没有空间参考信息的,为了能够在osgEarth或其他平台中正常使用该数据,应该利用ArcGIS的栅格投影工具对其进行正确的投影,这样才能够正确使用转换后的数据。
为栅格数据赋投影的操作步骤如下:
1)打开ArcToolBox里 “数据管理工具”“投影和变换”“栅格”“投影栅格”。
2)在“输入坐标系”处选择地理坐标系,如“Asia”»“China Geodetic Coordinate System 2000”;在处选择投影坐标,如“Gauss Kruger”»“CGCS200”»“CGCS200 3 Degree GK CM 105E”,该空间参考应与使用它的场景的空间参考相一致,如正射影像地图的空间参考。
3)执行转换,完成操作。

这样,就可以将国标格式的DEM数据转换为通用的栅格格式DEM进行各种使用了。


  1. 我也是个傻瓜.ArcGIS读取DEM格式数据.Link
  2. 流云飞飞.NSDTF-DEM格式数据.Link
2020-01-05 14:40:45 charlee44 阅读数 25
  • ArcGIS之数字高程模型(DEM)分析上篇视频课程(GIS...

    课程采用ArcGIS10.3.1中文版进行录制,适用于10.0、10.1、10.2、10.4系列。介绍DEM的综合应用,使得学习者知道如何运用DEM进行在插值、精度检验,等高线编辑等,掌握TIN格式的创建及处理,不同数字高程模型之间的转换。DEM三种纬度可视化,使你在数据分析、制图、理论都有一大稳步提升。

    3688 人正在学习 去看看 黄晓军

1. 概述

DEM(地形文件)天然自带三维信息,可以将其转换成gltf模型文件。DEM是栅格数据,可以通过GDAL进行读取;gltf是一种JSON格式,可以采用nlohmann/json进行读写。

2. 详细

直接把代码贴出来:

#include <iostream>
#include <fstream>
#include <iomanip>
#include <nlohmann\json.hpp>
#include "fifo_map.hpp"

#include <gdal/gdal_priv.h>

using namespace std;
using namespace nlohmann;

// A workaround to give to use fifo_map as map, we are just ignoring the 'less' compare
template<class K, class V, class dummy_compare, class A>
using my_workaround_fifo_map = fifo_map<K, V, fifo_map_compare<K>, A>;
using my_json = basic_json<my_workaround_fifo_map>;

int main()
{
	GDALAllRegister();
	CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "NO");  //支持中文路径

	my_json gltf;

	gltf["asset"] = {
		{"generator", "CL"},
		{"version", "2.0"} 
	};

	gltf["scene"] = 0;
	gltf["scenes"] = {
		{{"nodes", {0} }}
	};

	gltf["nodes"] = {
		{{"mesh", 0}}
	};

	my_json positionJson;
	positionJson["POSITION"] = 1;
	positionJson["TEXCOORD_0"] = 2;
	
	my_json primitivesJson;
	primitivesJson = {
		{{"attributes", positionJson}, {"indices", 0}, {"material", 0} }
	};	

	gltf["meshes"] = {
		{{"primitives", primitivesJson}}
	};

	my_json pbrJson;
	pbrJson["baseColorTexture"]["index"] = 0;

	gltf["materials"] = {
		{{"pbrMetallicRoughness", pbrJson}}
	};
	
	size_t pointNum = 0;
	size_t binBufNum = 0;
	size_t indicesNum = 0;
	
	{	
		string binPath = "D:/Work/WebGLTutorial/Data/new.bin";
		ofstream binFile(binPath, std::ios::binary);
	
		const char *filePath = "D:/Work/WebGLTutorial/Data/DEM.tif";
		GDALDataset* img = (GDALDataset *)GDALOpen(filePath, GA_ReadOnly);
		if (!img)
		{
			printf("Can't Open Image!");
			return 0;
		}
		int bufWidth = img->GetRasterXSize();   //图像宽度
		int bufHeight = img->GetRasterYSize();  //图像高度
		int bandNum = img->GetRasterCount();    //波段数
		if (bandNum != 1)
		{
			printf("DEM波段数不为1");
			return 0;
		}
		int depth = GDALGetDataTypeSize(img->GetRasterBand(1)->GetRasterDataType()) / 8;    //图像深度
		
		 //获取地理坐标信息
		double padfTransform[6];
		if (img->GetGeoTransform(padfTransform) == CE_Failure)
		{
			printf("获取仿射变换参数失败");
			return 0;
		}

		double startX = padfTransform[0];
		double dX = padfTransform[1];
		double startY = padfTransform[3];
		double dY = padfTransform[5];

		//申请buf
		size_t imgBufNum = (size_t)bufWidth * bufHeight * bandNum;
		float *imgBuf = new float[imgBufNum];

		//读取
		img->RasterIO(GF_Read, 0, 0, bufWidth, bufHeight, imgBuf, bufWidth, bufHeight,
			GDT_Float32, bandNum, nullptr, bandNum*depth, bufWidth*bandNum*depth, depth);

		pointNum = (size_t)bufWidth * bufHeight;
		size_t position_texture_num = pointNum * 5;
		float *position_texture = new float[position_texture_num];
		
		for (int yi = 0; yi < bufHeight; yi++)
		{
			for (int xi = 0; xi < bufWidth; xi++)
			{
				size_t n = (size_t)(bufWidth * 5) * yi + 5 * xi;
				position_texture[n] = dX * xi;
				position_texture[n+1] = dY * yi;
				size_t m = (size_t)(bufWidth * bandNum) * yi + bandNum * xi;
				position_texture[n + 2] = imgBuf[m];
				position_texture[n + 3] = float(xi) / (bufWidth-1);
				position_texture[n + 4] = float(yi) / (bufHeight-1);			
			}
		}

		//释放
		delete[] imgBuf;
		imgBuf = nullptr;					
	
		binFile.write((char*)position_texture, position_texture_num * sizeof(float));
	
		size_t vertexBufNum = position_texture_num * sizeof(float);
		binBufNum = binBufNum + vertexBufNum;

		int mod = vertexBufNum % sizeof(uint16_t);	
		if (mod != 0)
		{					
			int spaceNum = sizeof(float) - mod;		
			char *space = new char[spaceNum];
			binBufNum = binBufNum + sizeof(char) * spaceNum;
			memset(space, 0, sizeof(char) * spaceNum);
			binFile.write(space, sizeof(char) * spaceNum);
			delete[] space;
			space = nullptr;
		}
					
		indicesNum = (size_t)(bufWidth - 1) * (bufHeight - 1) * 2 * 3;
		uint16_t *indices = new uint16_t[indicesNum];

		for (int yi = 0; yi < bufHeight-1; yi++)
		{
			for (int xi = 0; xi < bufWidth-1; xi++)
			{
				uint16_t m00 = (uint16_t)(bufWidth * yi + xi) ;
				uint16_t m01 = (uint16_t)(bufWidth * (yi+1) + xi);
				uint16_t m11 = (uint16_t)(bufWidth * (yi + 1) + xi + 1);
				uint16_t m10 = (uint16_t)(bufWidth * yi + xi + 1);

				size_t n = (size_t)(bufWidth - 1) * yi + xi;
				indices[n * 6] = m00;
				indices[n * 6 + 1] = m01;
				indices[n * 6 + 2] = m11;
				indices[n * 6 + 3] = m11;
				indices[n * 6 + 4] = m10;
				indices[n * 6 + 5] = m00;
			}
		}
		
		binFile.write((char*)indices, sizeof(uint16_t) * indicesNum);
		binBufNum = binBufNum + sizeof(uint16_t) * indicesNum;

		delete[] position_texture;
		position_texture = nullptr;

		delete[] indices;
		indices = nullptr;
	}
	   
	gltf["textures"] = {
		{{"sampler", 0}, {"source", 0}}
	};

	gltf["images"] = {
		{{"uri", "tex.jpg"}}
	};

	gltf["samplers"] = {
		{{"magFilter", 9729}, {"minFilter", 9987}, {"wrapS", 33648}, {"wrapT", 33648}}
	};

	   	  
	gltf["buffers"] = {
	{{"uri", "new.bin"}, {"byteLength", binBufNum}}
	};
	
	my_json indicesBufferJson;
	indicesBufferJson["buffer"] = 0;
	indicesBufferJson["byteOffset"] = pointNum * 5 * 4;
	indicesBufferJson["byteLength"] = indicesNum * 2;
	indicesBufferJson["target"] = 34963;

	my_json positionBufferJson;
	positionBufferJson["buffer"] = 0;
	positionBufferJson["byteStride"] = sizeof(float) * 5;
	positionBufferJson["byteOffset"] = 0;
	positionBufferJson["byteLength"] = pointNum * 5 * 4;
	positionBufferJson["target"] = 34962;
	
	gltf["bufferViews"] = {
		indicesBufferJson, positionBufferJson
	};

	my_json indicesAccessors;
	indicesAccessors["bufferView"] = 0;
	indicesAccessors["byteOffset"] = 0;
	indicesAccessors["componentType"] = 5123;
	indicesAccessors["count"] = indicesNum;
	indicesAccessors["type"] = "SCALAR";
	indicesAccessors["max"] = { 18719 };
	indicesAccessors["min"] = { 0 };
	
	my_json positionAccessors;
	positionAccessors["bufferView"] = 1;
	positionAccessors["byteOffset"] = 0;
	positionAccessors["componentType"] = 5126;
	positionAccessors["count"] = pointNum;
	positionAccessors["type"] = "VEC3";
	positionAccessors["max"] = { 770, 0.0,  1261.151611328125 };
	positionAccessors["min"] = { 0.0, -2390,  733.5555419921875 };

	my_json textureAccessors;
	textureAccessors["bufferView"] = 1;
	textureAccessors["byteOffset"] = sizeof(float) * 3;
	textureAccessors["componentType"] = 5126;
	textureAccessors["count"] = pointNum;
	textureAccessors["type"] = "VEC2";
	textureAccessors["max"] = { 1, 1 };
	textureAccessors["min"] = { 0, 0 };

	gltf["accessors"] = {
		indicesAccessors, positionAccessors, textureAccessors
	};	   	  

	string jsonFile = "D:/Work/WebGLTutorial/Data/new.gltf";
	std::ofstream outFile(jsonFile);
	outFile << std::setw(4) << gltf << std::endl;        
}

1.这里使用的DEM是tif格式的图像,使用GDAL读取。由于显示模型文件不需要大坐标,所以没有把DEM的起始XY坐标值算进去。同时附带了一张纹理贴图,正好覆盖整个DEM的范围。

2.转换的的原理非常简单,就是将DEM的每个网格绘制成两个三角形,通过顶点索引进行绘制。gltf具体的规范可以参看github上的教程,网上还有相关的中文翻译

3.原生的nlohmann/json组件写出来的JSON格式是根据字符串顺序排序不是根据插入顺序排序的,查阅的时候不方便。所以这里使用了nlohmann::fifo_map容器专门化对象类型。

3. 结果

转换出来的结果用OSG显示如下:

地形gltf

4. 参考

[1] github上的gltf教程
[2] gltf教程中文翻译
[3] nlohmann/json关于保留插入顺序的讨论

2014-04-29 10:28:05 c198904 阅读数 11314
  • ArcGIS之数字高程模型(DEM)分析上篇视频课程(GIS...

    课程采用ArcGIS10.3.1中文版进行录制,适用于10.0、10.1、10.2、10.4系列。介绍DEM的综合应用,使得学习者知道如何运用DEM进行在插值、精度检验,等高线编辑等,掌握TIN格式的创建及处理,不同数字高程模型之间的转换。DEM三种纬度可视化,使你在数据分析、制图、理论都有一大稳步提升。

    3688 人正在学习 去看看 黄晓军

在进行SAR数据处理时我们需要用到DEM数据,这里面以Aster数据为例介绍在SARSCAPE和GAMMA下所需的数据格式的转换。

1、SARSCAPE下DEM数据格式转换

SARSCAPE下可以直接利用Digital Elevation Model Extraction下载DEM数据,这里不详细说了。我下载的DEM数据是TIFF格式的SARSCAPE下需要的是_DEM格式,这就需要DEM进行格式转换。

首先,如果我们研究区的范围较大,DEM先进行拼接。我的研究区需要6景DEM,如下图所示:

选择Mosaicking--->Georeferenced,把DEM数据导进去,如下图所示,然后点击apply生成拼接的DEM,这里生成的DEM是ENVI的标准格式,

其次,我们对生成的ENVI标准格式的DEM进行格式转换,SARSCAPE菜单下选择Import Data中的ENVI original,界面如下图所示

选择输入文件,在输出文件中会自动出现输出文件路径和输出文件名称,我的输出文件名自动是mosaic_bil,把文件名改为mosaic_DEM就可以了。Data Units我们选择DEM,点击start执行。就可以生成SARSCAPE所需要的_DEM数据。

在SARSCAPE中如果我们的DEM数据是TIFF格式的,我们在选择Import Data的数据类型需要选择TIFF,界面如下图所示,这里面可以选择

有地理编码和无地理编码的,我们选择有地理编码,点击start执行

2、GAMMA下DEM数据格式转换

  1. 数据格式转换

    ERDAS下选择import工具栏,如下图1所示,输出数据,数据格式为GenericBinary,点击OK后,弹出图2对话框。

1


2

在图2的对话框中,选择dataformatBIL,这里选择默认。data Type这里选择Signed 16 Bit,这里是根据图像自身信息获得,其信息如图3所示。 ByteOrder选择Motorola(Big Endian),这个是gamma所要求的格式。除了上述信息可在图中得出,我们还需要记住下图中矩形框内的信息,这在gamma的下一步处理中将要用到。



3



2、在Gamma中进行格式转换

ERDAS得到.dem数据需要在Gamma中进行格式转换,利用swap_bytes函数进行格式转换,在命令窗口中输入如下命令:swap_bytes xiangge_16.dem xiangge_16_swap.dem 2 回车执行转换命令。

3、创建DEM参数文件

执行Create_dem_par xiangge_16_swap.dem_par命令,出现下图4窗口,要求输入DEM projection,根据DEM自身信息我们选择EQA(等角投影),在图中的参数中我们需要特别注意的是DEM widthDEM lengthlatitude and longitude postinglatitude andlongitude of first DEM sample这些参数需要根据每个图像自身信息输入,我们在ERDAS中所记录的信息就在这个地方用到生成的参数文件如下所示:

                               图4

利用参数文件进行显示,输入命令disdem_par xiangge_16_swap.dem xiangge_16_swap.dem_par,显示图像如下所示:

特别说明的一点:如果要转换成其他投影,我们可以利用DEM_TRANS进行转换,这里不详细说了。同时如果DEM图像中有空洞,我们需要利用replace_values函数去除空洞





2019-12-25 17:35:54 tangshenq17565 阅读数 13
  • ArcGIS之数字高程模型(DEM)分析上篇视频课程(GIS...

    课程采用ArcGIS10.3.1中文版进行录制,适用于10.0、10.1、10.2、10.4系列。介绍DEM的综合应用,使得学习者知道如何运用DEM进行在插值、精度检验,等高线编辑等,掌握TIN格式的创建及处理,不同数字高程模型之间的转换。DEM三种纬度可视化,使你在数据分析、制图、理论都有一大稳步提升。

    3688 人正在学习 去看看 黄晓军

如何用通过Unity 3D生成真实地形

使用Unity3D制作真实地形的两种方法:

 

1、在SceneView中使用height tools直接绘制;

2、使用外部工具制作的heightmaps;

 

具体操作如下:

1、准备一块DEM数据,格式为img或tiff,并准备好Global Mapper和Photoshop两款软件;

2、在Global Mapper 14.1中文版中“文件”->“打开数据文件”,选择DEM数据文件,比如test.img,然后弹出对话框选“全是”;

image.png

打开后如图所示:

image.png

3、打开地形文件后,在工具栏下拉列表中选择“梯度渲晕”,在此列表框后面有一个“启用/取消晕渲”的按钮,我们需要取消渲染;

image.png

4、此时显示的是此dem数据的灰度图,如下:

image.png

我们可以导出这幅图;点击“文件”->“输出光栅/图像格式”,弹出对话框内选择JGP,然后点确定,又弹出一个框,还选确定,弹出下一个框。

image.png

5、在此对话框内设置jpg的属性;采样间距可以自己填写,值越小,图片经度越大,若不知道怎么选择可以先按默认值,后期看图片分辨率,根据需要在重设此参数,“图像品质”也可自行选择,而“光栅输出的带设置”中必须选择“灰度(1 8-字节带)”,下面的“生成世界文件”和“生成投影文件”可以不勾选,此文件对导入地形无关;

6、此时生成了一个“test.jpg”;我们用photoshop进行打开编辑;打开图片后选择“图像”->“画布大小”;单位选择像素,长宽值填写值需要是2的指数次幂比如1024或2048(我用的Unity版本中导入的图片大小貌视不能大于2048,否则会出错),这时我将宽度和高度均设置为2048(这里需要将长宽设置成一样值),点击确定;

image.png

7、导出raw文件;选择“文件”->"存储为",格式中选择raw,“保存”生成一个test.raw的文件;

image.png

8、打开Unity,在"Terrain"->"Create Terrain"中创建地形,然后点击“Terrain”->"Import Heightmap - Raw",导入刚生成的raw文件;

点击“设置”:

image.png

“Import Raw”在这儿:

image.png

9、在弹出对话框中进行设置,Depth选择8bit,Width选择2048,Height输入2048,ByteOrder根据自己的情况选择Mac或Windows,地形x,z先默认2000,y是高度,表示地形最高处的高度,我写200,直接点击“Import”即可以导入该地形;

10、如果原来地形有地貌,可以在Globalmap中使用地貌导出一张jpg文件作为Unity中可导入的纹理,按地形大小贴到导入的这块地形上。

这里的x,y要和之前地形的x,y大小保持一致才可以完整贴到地形上。

(PS:如果导入图片后发现图片和地形位置不对应可以在ps里对图片进行翻转和旋转等操作,进行调整)

没有更多推荐了,返回首页