转自:https://www.cnblogs.com/gucheng/p/10116857.html

新建ue c++工程。
在Build.cs中添加"ProceduralMeshComponent"模块。
在 uproject中添加"ProceduralMeshComponent"模块。
创建材质,传入grass贴图
导入灰度图资源
创建继承自Actor的类 ATerrainCreateActor,并创建蓝图类对象
将蓝图对象拖入场景,设置其灰度贴图参数、Z值缩放比例参数、材质参数
最终效果
ATerrainCreateActor类代码如下
 
头文件
#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "ProceduralMeshComponent.h"
#include "TerrainCreateActor.generated.h" UCLASS()
class UETERRAIN_API ATerrainCreateActor : public AActor
{
GENERATED_BODY() public:
ATerrainCreateActor();
private:
UPROPERTY(VisibleAnywhere)
UProceduralMeshComponent * mesh;//自定义mesh
UPROPERTY(EditAnywhere)
UTexture2D * grayTexture;//传入灰度图
UPROPERTY(EditAnywhere)
float zScale;//z值系数
UPROPERTY(EditAnywhere)
UMaterial* meshMat;//材质 protected: virtual void BeginPlay() override;
public: virtual void Tick(float DeltaTime) override;
};

源文件

#include "TerrainCreateActor.h"

ATerrainCreateActor::ATerrainCreateActor()
{
PrimaryActorTick.bCanEverTick = true;
mesh = CreateDefaultSubobject<UProceduralMeshComponent>(TEXT("terrainMesh"));
RootComponent = mesh;
mesh->bUseAsyncCooking = true;
} void ATerrainCreateActor::BeginPlay()
{
Super::BeginPlay(); //读取灰度图像素信息
FTexture2DMipMap* MyMipMap = &grayTexture->PlatformData->Mips[];
FByteBulkData* RawImageData = &MyMipMap->BulkData;
FColor* FormatedImageData = static_cast<FColor*>(RawImageData->Lock(LOCK_READ_ONLY));
uint32 TextureWidth = MyMipMap->SizeX, TextureHeight = MyMipMap->SizeY;
//mesh基础信息
TArray<FVector> vertices;
TArray<int32> Triangles;
TArray<FVector> normals;
TArray<FVector2D> UV0;
TArray<FProcMeshTangent> tangents;
TArray<FLinearColor> vertexColors;
for (size_t i = ; i < TextureWidth; i++)
{
for (size_t j = ; j < TextureHeight; j++)
{
//根据颜色设定顶点z值
FColor PixelColor = FormatedImageData[j * TextureWidth + i];
float tempZ = (PixelColor .B* + PixelColor .G* + PixelColor.R * + ) / ;//rgb转灰度
tempZ *= zScale;
vertices.Add(FVector(i*, j*, tempZ)); //顶点
normals.Add(FVector(, , ));//法线
UV0.Add(FVector2D((float)i/(float)TextureWidth, (float)j/(float)TextureHeight));//uv
//UV0.Add(FVector2D(i,j));//uv
tangents.Add(FProcMeshTangent(, , ));//切线
vertexColors.Add(FLinearColor(0.75, 0.75, 0.75, 1.0)); //顶点颜色 if (j < TextureHeight - && i < TextureWidth - )
{
//三角索引 此处按照vertice的添加顺序确定索引
Triangles.Add(i*TextureHeight + j);
Triangles.Add(i*TextureHeight + j + );
Triangles.Add(i*TextureHeight + j + TextureHeight); Triangles.Add(i*TextureHeight + j + TextureHeight);
Triangles.Add(i*TextureHeight + j + );
Triangles.Add(i*TextureHeight + j + TextureHeight + );
}
}
} RawImageData->Unlock(); //创建mesh
mesh->CreateMeshSection_LinearColor(, vertices, Triangles, normals, UV0, vertexColors, tangents, true);
mesh->ContainsPhysicsTriMeshData(true);
mesh->SetMaterial(, meshMat);
} void ATerrainCreateActor::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}

ue4读取灰度图生成三维地形mesh的更多相关文章

  1. unity读取灰度图生成三维地形mesh

    准备灰度图 IGray.png及草地贴图 IGrass.jpg ,放入Assets下StreamingAssets文件夹中.     创建空材质,用作参数传入脚本.   脚本如下,挂载并传入材质球即可 ...

  2. unity 读取灰度图生成三维地形并贴图卫星影像

    从 https://earthexplorer.usgs.gov/ 下载高程数据 从谷歌地球上保存对应地区卫星图像 从灰度图创建地形模型,并将卫星影像作为贴图 using System.Collect ...

  3. opengl读取灰度图生成三维地形并添加光照

    转自:https://www.cnblogs.com/gucheng/p/10152889.html 准备第三方库 glew.freeglut.glm.opencv 准备一张灰度图 最终效果 代码如下 ...

  4. opengl读取灰度图生成三维地形

    准备第三方库 glew.freeglut.glm.opencv 准备灰度图片和草地贴图 最终效果 代码包括主程序源文件mainApp.cpp.顶点着色器shader.vs.片元着色器shader.fs ...

  5. unity 读取灰度图生成按高程分层设色地形模型

    准备灰度图 1.高程按比例对应hue色相(hsv)生成mesh效果 o.color = float4(hsv2rgb(float3(v.vertex.y/100.0, 0.5, 0.75)), 1.0 ...

  6. unity读取灰度图生成等值线图

    准备灰度图 grayTest.png,放置于Assets下StreamingAssets文件夹中.   在场景中添加RawImage用于显示最后的等值线图.   生成等值线的过程,使用Marching ...

  7. blender导入灰度图生成地形模型

    安装软件 在此处下载blender并安装. 添加平面 1.打开blender,右键删除初始的立方体. 2.shift+a选择平面添加进场景: 3.按下s键鼠标拖动调节平面大小确定后按下鼠标左键: 4. ...

  8. (二)GameMaker:Studio ——使用等高图生成3D地形

    上一篇,我们讲解了GM中导入模型的方法,这节我们来讲地形. 源文件地址:http://pan.baidu.com/share/link?shareid=685772423&uk=2466343 ...

  9. c语言实现灰度图转换为二值图

    将上篇得到的灰度图转换为二值图,读取像素数据,低于某一值置0,否则设置为255,为得到更好的效果不同图片应采用不同的值 /* 2015年6月2日11:16:22 灰度图转换为二值图 blog:http ...

随机推荐

  1. 51nod 2502 最多分成多少块

    小b有个长度为n的数组a,她想将这个数组排序. 然而小b很懒,她觉得对整个数组排序太累了,因此她请你将a分成一些块,使得她只需要对每一块分别排序,就能将整个数组排序. 请问你最多能把a分成多少块. 保 ...

  2. linux添加用户adduser出现 useradd:cannot lock /etc/passwd; try again

    找一下有个叫/etc/passwd.lock的文件,找到,给它用root删掉就好了,可能是上次使用到这个文件没有正常关闭.具体操作:切换到root用户,用cd etc到etc目录下,rm .pwd.l ...

  3. BZOJ 2200: [Usaco2011 Jan]道路和航线

    Description Farmer John正在一个新的销售区域对他的牛奶销售方案进行调查.他想把牛奶送到T个城镇 (1 <= T <= 25,000),编号为1T.这些城镇之间通过R条 ...

  4. ARDUNIO IMU processing姿态数据可视化

    https://www.arduino.cn/thread-42852-1-1.html 关键数据打包 float roll, pitch, heading; Serial.print("O ...

  5. 2-移远GSM/GPRS M26 模块 Mini板 开发板(M26入门)

    https://www.cnblogs.com/yangfengwu/p/11214553.html 资料获取,首先说一下....很多东西需要自己悟,没有QQ群,没有微信群,论坛也寥寥无几!!!! 估 ...

  6. [RN] React Native 实现 类似QQ 登陆页面

    [RN] React Native 实现 类似QQ 登陆页面 一.主页index.js 项目目录下index.js /** * @format */ import {AppRegistry} from ...

  7. LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力

    二次联通门 : LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力 /* LibreOJ #517. 「LibreOJ β Round #2」计算几何瞎暴力 叫做计算几 ...

  8. Processing设计Android APP(1) - 安装

    1.安装环境: A. Android Studio B. Processing 3.4 (64bit) 首先,直接安装Android Studio,我这里版本是3.2.1. 然后,新建一个Sample ...

  9. 解决IE报错[vue router]Failed to resolve async component default:strict 模式下不允许分配到只读属性

    之前遇到过一个奇怪的问题,在其他浏览器下一切正常,但在万恶的IE下,却一直不行. 具体问题场景就是:比如orderDetail页面出现问题,那么只要是路由跳转的,点第1次无法跳转,必须得点第2次才可以 ...

  10. Android入门教程(五)

    关注我,每天都有优质技术文章推送,工作,学习累了的时候放松一下自己. 欢迎大家关注我的微信公众号:「醉翁猫咪」 字面量: 1.整数字面量为整型(int) 2.小数字面量为双精度浮点型(double) ...