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

新建ue c++工程。
在Build.cs中添加"ProceduralMeshComponent"模块。
在 uproject中添加"ProceduralMeshComponent"模块。
创建材质,传入grass贴图
导入灰度图资源
创建继承自Actor的类 ATerrainCreateActor,并创建蓝图类对象
将蓝图对象拖入场景,设置其灰度贴图参数、Z值缩放比例参数、材质参数
最终效果
ATerrainCreateActor类代码如下
 
头文件
  1. #pragma once
  2.  
  3. #include "CoreMinimal.h"
  4. #include "GameFramework/Actor.h"
  5. #include "ProceduralMeshComponent.h"
  6. #include "TerrainCreateActor.generated.h"
  7.  
  8. UCLASS()
  9. class UETERRAIN_API ATerrainCreateActor : public AActor
  10. {
  11. GENERATED_BODY()
  12.  
  13. public:
  14. ATerrainCreateActor();
  15. private:
  16. UPROPERTY(VisibleAnywhere)
  17. UProceduralMeshComponent * mesh;//自定义mesh
  18. UPROPERTY(EditAnywhere)
  19. UTexture2D * grayTexture;//传入灰度图
  20. UPROPERTY(EditAnywhere)
  21. float zScale;//z值系数
  22. UPROPERTY(EditAnywhere)
  23. UMaterial* meshMat;//材质
  24.  
  25. protected:
  26.  
  27. virtual void BeginPlay() override;
  28. public:
  29.  
  30. virtual void Tick(float DeltaTime) override;
  31. };

源文件

  1. #include "TerrainCreateActor.h"
  2.  
  3. ATerrainCreateActor::ATerrainCreateActor()
  4. {
  5. PrimaryActorTick.bCanEverTick = true;
  6. mesh = CreateDefaultSubobject<UProceduralMeshComponent>(TEXT("terrainMesh"));
  7. RootComponent = mesh;
  8. mesh->bUseAsyncCooking = true;
  9. }
  10.  
  11. void ATerrainCreateActor::BeginPlay()
  12. {
  13. Super::BeginPlay();
  14.  
  15. //读取灰度图像素信息
  16. FTexture2DMipMap* MyMipMap = &grayTexture->PlatformData->Mips[];
  17. FByteBulkData* RawImageData = &MyMipMap->BulkData;
  18. FColor* FormatedImageData = static_cast<FColor*>(RawImageData->Lock(LOCK_READ_ONLY));
  19. uint32 TextureWidth = MyMipMap->SizeX, TextureHeight = MyMipMap->SizeY;
  20. //mesh基础信息
  21. TArray<FVector> vertices;
  22. TArray<int32> Triangles;
  23. TArray<FVector> normals;
  24. TArray<FVector2D> UV0;
  25. TArray<FProcMeshTangent> tangents;
  26. TArray<FLinearColor> vertexColors;
  27. for (size_t i = ; i < TextureWidth; i++)
  28. {
  29. for (size_t j = ; j < TextureHeight; j++)
  30. {
  31. //根据颜色设定顶点z值
  32. FColor PixelColor = FormatedImageData[j * TextureWidth + i];
  33. float tempZ = (PixelColor .B* + PixelColor .G* + PixelColor.R * + ) / ;//rgb转灰度
  34. tempZ *= zScale;
  35. vertices.Add(FVector(i*, j*, tempZ)); //顶点
  36. normals.Add(FVector(, , ));//法线
  37. UV0.Add(FVector2D((float)i/(float)TextureWidth, (float)j/(float)TextureHeight));//uv
  38. //UV0.Add(FVector2D(i,j));//uv
  39. tangents.Add(FProcMeshTangent(, , ));//切线
  40. vertexColors.Add(FLinearColor(0.75, 0.75, 0.75, 1.0)); //顶点颜色
  41.  
  42. if (j < TextureHeight - && i < TextureWidth - )
  43. {
  44. //三角索引 此处按照vertice的添加顺序确定索引
  45. Triangles.Add(i*TextureHeight + j);
  46. Triangles.Add(i*TextureHeight + j + );
  47. Triangles.Add(i*TextureHeight + j + TextureHeight);
  48.  
  49. Triangles.Add(i*TextureHeight + j + TextureHeight);
  50. Triangles.Add(i*TextureHeight + j + );
  51. Triangles.Add(i*TextureHeight + j + TextureHeight + );
  52. }
  53. }
  54. }
  55.  
  56. RawImageData->Unlock();
  57.  
  58. //创建mesh
  59. mesh->CreateMeshSection_LinearColor(, vertices, Triangles, normals, UV0, vertexColors, tangents, true);
  60. mesh->ContainsPhysicsTriMeshData(true);
  61. mesh->SetMaterial(, meshMat);
  62. }
  63.  
  64. void ATerrainCreateActor::Tick(float DeltaTime)
  65. {
  66. Super::Tick(DeltaTime);
  67. }

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. P1197 [JSOI2008]星球大战[并查集+图论]

    题目来源:洛谷 题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治着整个星系. 某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球 ...

  2. Git学习笔记--实践(三)

    文中红色的文字(标为:## 插曲)是在Git学习/实践过程中,我个人遇到的一些问题,每个“## 插曲”之后,都有相应的解决方案. 一.创建版本库 版本库又名仓库,英文名repository,可简单的理 ...

  3. LeetCode 1059. All Paths from Source Lead to Destination

    原题链接在这里:https://leetcode.com/problems/all-paths-from-source-lead-to-destination/ 题目: Given the edges ...

  4. P2340 奶牛会展 DP 背包

    P2340 奶牛会展 DP \(n\)头牛,每头牛有智商\(s[i]\)情商\(f[i]\),问如何从中选择几头牛使得智商情商之和最大 且 情商之和.智商之和非负 \(n\le 400,-10^3\l ...

  5. 多项式总结&多项式板子

    多项式总结&多项式板子 三角/反三角是不可能放的(也不可能真香的 多项式乘法(DFT,FFT,NTT,MTT) 背板子 前置知识:泰勒展开 如果\(f(x)\)在\(x_0\)处存在\(n\) ...

  6. Codeforces & Atcoder神仙题做题记录

    鉴于Codeforces和atcoder上有很多神题,即使发呆了一整节数学课也是肝不出来,所以就记录一下. AGC033B LRUD Game 只要横坐标或者纵坐标超出范围就可以,所以我们只用看其中一 ...

  7. vue-element-admin 实现动态路由(从后台查询出菜单列表绑定)

    1. 在路由实例中保留基础路由 router/index.js中只需要保留基础路由,其他的都删了 2. 获取用户菜单,并保存到Vuex中 stroe/modules/user.js中,有个getInf ...

  8. (11)Go方法/接收者

    方法和接收者 Go语言中的方法(Method)是一种作用于特定类型变量的函数.这种特定类型变量叫做接收者(Receiver).接收者的概念就类似于其他语言中的this或者 self. 方法的定义格式如 ...

  9. python设计模式---绪论

    1.程序只是一个工具,只知道使用工具就有价值的时代正在过去:现在对工作质量.开发速度及完美程度都很重要了.当前主要的问题是对工具的充分利用,在生活的方方面面,简单任务之所以简单是由于这些任务不需要特殊 ...

  10. 东软HIS系统_打印发票提示“打印机报错!对访问XXX的设置无效”解决办法

    发票打印报错 添加打印机,端口跟物理打印机同一个. 添加 MZJSFP,ZYJSFP,YJJFP三个打印机 打印发票错位 设置自定义纸张 MZJSFP 宽30.40CM 高12.94CM ZYJSFP ...