【毕业设计】基于程序化生成和音频检测的生态仿真与3D内容生成系统----程序化生成地形算法设计

news/2024/11/25 1:01:22/

2 程序化生成地形算法设计

2.1 地形曲线的生成

2.1.1 初始化高度场

struct Make2DGridPrimitive : INode {virtual void apply() override {size_t nx = get_input<NumericObject>("nx")->get<int>();nx = std::max(nx, (size_t)1);size_t ny = has_input("ny") ?makepositive(get_input<NumericObject>("ny")->get<int>()) : 0;if (!ny) ny = nx;float dx = 1.f / std::max(nx - 1, (size_t)1);float dy = 1.f / std::max(ny - 1, (size_t)1);vec3f ax = has_input("sizeX") ?get_input<NumericObject>("sizeX")->get<vec3f>(): vec3f(1, 0, 0);vec3f ay = has_input("sizeY") ?get_input<NumericObject>("sizeY")->get<vec3f>(): vec3f(0, 1, 0);vec3f o = has_input("origin") ?get_input<NumericObject>("origin")->get<vec3f>() : vec3f(0);if (has_input("scale")) {auto obj = get_input<NumericObject>("scale");auto scale = obj->is<int>() ? obj->get<int>() : obj->get<float>();ax *= scale;ay *= scale;}auto dir = get_param<std::string>("Direction");if(dir == "YZ"){ax = zeno::vec3f(0,ax[0],0);ay = zeno::vec3f(0, 0, ay[1]);}if(dir == "XZ"){ay = zeno::vec3f(0,0,ay[1]);}if (get_param<bool>("isCentered"))o -= (ax + ay) / 2;ax *= dx; ay *= dy;auto prim = std::make_shared<PrimitiveObject>();prim->resize(nx * ny);auto &pos = prim->add_attr<vec3f>("pos");
#pragma omp parallel for collapse(2)for (intptr_t y = 0; y < ny; y++) for (intptr_t x = 0; x < nx; x++) {intptr_t index = y * nx + x;vec3f p = o + x * ax + y * ay;size_t i = x + y * nx;pos[i] = p;}if (get_param<bool>("hasFaces")) {prim->tris.resize((nx - 1) * (ny - 1) * 2);
#pragma omp parallel for collapse(2)for (intptr_t y = 0; y < ny-1; y++) for (intptr_t x = 0; x < nx-1; x++) {intptr_t index = y * (nx - 1) + x;prim->tris[index * 2][2] = y * nx + x;prim->tris[index * 2][1] = y * nx + x + 1;prim->tris[index * 2][0] = (y + 1) * nx + x + 1;prim->tris[index * 2 + 1][2] = (y + 1) * nx + x + 1;prim->tris[index * 2 + 1][1] = (y + 1) * nx + x;prim->tris[index * 2 + 1][0] = y * nx + x;}}prim->userData().set("nx", std::make_shared<NumericObject>((int)nx));//zhxxprim->userData().set("ny", std::make_shared<NumericObject>((int)ny));//zhxxset_output("prim", std::move(prim));}
};ZENDEFNODE(Make2DGridPrimitive,{ /* inputs: */ {{"int", "nx", "2"},{"int", "ny", "0"},{"vec3f", "sizeX", "1,0,0"},{"vec3f", "sizeY", "0,1,0"},{"float", "scale", "1"},{"vec3f", "origin", "0,0,0"},}, /* outputs: */ {{"PrimitiveObject", "prim"},}, /* params: */ {{"enum XZ XY YZ", "Direction", "XZ"}, // zhxxhappy{"bool", "isCentered", "0"},{"bool", "hasFaces", "1"},}, /* category: */ {"primitive",}});

2.1.2 原始几何体投影到高度场

2.1.3 创建低精度版的高度场

2.1.4 把造型采样到低精度高度场,并做平滑处理

2.1.5 平滑后的数据采样回高精度的高度场

2.2 地形变形处理

2.2.1 Curl Noise 变形处理

2.2.2 整体 Hybrid Noise 变形

2.2.3 初始化地形数据,并标记边界,为侵蚀处理做谁备

2.3 地形侵蚀

2.3.1 地表稳固

2.3.2 热侵蚀

2.3.3 崩塌

2.3.4 降水

2.3.5 崩塌 + 水侵蚀

2.3.6 蒸发


http://www.ppmy.cn/news/43239.html

相关文章

计算机组成原理——第四章指令系统(上)

提示&#xff1a;待到秋来九月八&#xff0c;我花开后百花杀 文章目录前言4.1.1 指令格式4.1.2 扩展操作码指令格式4.2.1 指令寻址4.2.2 数据寻址4.2.3 偏移寻址4.2.4 堆栈寻址汇总前言 通过第二章我们学习了运算器是如何进行加减乘除&#xff0c;移位运算操作的&#xff0c;通…

Java14新特性

一、Java14新特性 Records&#xff08;记录&#xff09;&#xff1a;Records是一种新的类类型&#xff0c;它允许您声明一个不可变的数据类&#xff0c;该类包含默认方法和构造函数。你可以使用record关键字来定义一个记录。 Switch表达式&#xff08;Switch Expressions&…

Linux内核源码下载方式

官网 Linux内核源码下载页面 https://www.kernel.org/pub/linux/kernel/页面介绍&#xff1a; HTTP https://www.kernel.org/pub/ GIT https://git.kernel.org/ RSYNC rsync://rsync.kernel.org/pub/HTTP地址&#xff08;https://www.kernel.org/pub/&#xff09;提供了HTTP…

pytorch lightning之快速调试

调试代码 此阶段主要测试各阶段代码是否有问题。 快速测试 fast_dev_run项可以配置train/val/test阶段的循环次数&#xff0c;跑完就停止代码&#xff0c;快速查看各流程代码正确性&#xff0c;避免train调试后训练又在val/test阶段出错&#xff0c;白白浪费时间和计算成本。…

Hadoop 开启 histotryserver

Hadoop 开启 histotryserver Hadoop自带了一个历史服务&#xff0c;可以通过历史服务在web端查看已经运行完的Mapreduce作业记录&#xff0c; 默认情况下&#xff0c;Hadoop历史服务是没有启动的&#xff0c;需要自行启动。 启动后&#xff0c;在下图中点击history可跳转至历史…

C#基础学习--转换

目录 什么是转换 隐式转换 显式转换和强制转换 ​编辑 转换的类型 数字的转换 ​编辑 隐式数字转换 溢出检测上下文 显式数字转换 引用转换 隐式引用转换 显式引用转换 有效显式引用转换 装箱转换 装箱是创建副本 装箱转换 拆箱转换 用户自定义转换 用户自定义…

【C++进阶】function和bind及可变模板参数

文章目录1. function和bind1.1 function使用方法1.2 bind2. 可变模板参数2.1 可变模板参数函数2.2 可变模板参数的展开1. function和bind C中的function和bind是为了更方便地进行函数对象的封装和调用而设计的。 function是一个通用的函数对象容器&#xff0c;可以存储任意可…

Wombat:93%ChatGPT性能!无需RLHF就能对齐人类的语言模型

文 | zzy文章地址: https://arxiv.org/abs/2304.05302v1训练代码&#xff1a;https://github.com/GanjinZero/RRHF模型权重&#xff1a;https://huggingface.co/GanjinZero/wombat-7b-delta文章提出RRHF一种无须强化学习的对齐方法训练语言模型。该文章利用chatGPT或者GPT-4作为…