gpt4 book ai didi

c++ - 在 C++ 中定义一个静态 float 组

转载 作者:搜寻专家 更新时间:2023-10-31 01:21:10 24 4
gpt4 key购买 nike

我正在使用 C++ 开发行星生成工具,目前正在尝试生成纹理和高度图。

我为此使用了 3d perlian 噪声函数,因此每次生成纹理或高度图时,我都会为球体表面的每个顶点计算噪声函数的值。

这些坐标不会改变。最初我是通过使用 this method 将立方体映射到球体来计算这些的.

然后我想,如果我知道这些值每次都是相同的,为什么不计算一次并将它们输出到一个头文件,在那里它们可以被定义为静态数组。

我想创建 512x512 的纹理,这意味着 每个面生成 260,000 多个坐标 :(

生成的坐标存储在一个数组中:

float textureMapSaved[6][512][512][3] = {etc};

因为立方体有6 个面,每个面512x512 像素3 个坐标(x、y 和z)

这有望让我循环遍历数组,获取我感兴趣的 perlian 噪声函数中值的坐标。

到目前为止,我只是设法将我的计算机变成了一个乱七八糟的东西。

我的问题是:

有可行的方法吗?

在不创建输出文件的情况下,程序需要大约 15 分钟 来计算球体。我实际上无法使用 header 进行编译,它使我的计算机崩溃。

然后我尝试了 256x256,效果稍好一些,但我的电脑仍在运转;我猜这是因为它无法有效地为 4D 数组分配内存。


感谢您的快速回复!

目前我正在做以下事情:

std::vector<std::vector<std::vector<std::vector<float>>>> textureFaces = GenerateSphereCoordinates(TEXTURE_MAP);

std::ofstream myfile;
myfile.open ("spheremapping.h");
myfile << "#ifndef _SPHEREMAP \n#define _SPHEREMAP \n\nfloat textureMapSaved[6][" << textureRes << "][" << textureRes << "][3] = {";
for(int i = 0; i < 6; i++)
{
myfile << "{";
for(int j = 0; j < textureRes; j++)
{
myfile << "{";
for(int k = 0; k < textureRes; k++)
{
if(k != textureRes - 1)
{
myfile << "{ " << textureFaces[i][j][k][0] << ", " << textureFaces[i][j][k][1] << ", " << textureFaces[i][j][k][2] << "}, " ;
}
else
{
myfile << "{ " << textureFaces[i][j][k][0] << ", " << textureFaces[i][j][k][1] << ", " << textureFaces[i][j][k][2] << "}" ;
}
}
if(j != textureRes - 1)
{
myfile << "}, \n";
}
else
{
myfile << "} \n";
}
}
if(i != 5)
{
myfile << "}, \n\n";
}
else
{
myfile << "} \n\n";
}
}
myfile << "};\n\n#endif";
myfile.close();

如何将其保存为二进制文件并直接读入内存?

最佳答案

您描述的方法是效率和简单性的最佳结合。如果您的编译器不能一次处理整个数组定义,请将问题分解成多个部分。例如:

typedef float CubeFace[512][512][3];
CubeFace face1 = {etc};
...
CubeFace * textureMapSaved[6] = {&face1, &face2, &face3, &face4, &face5, &face6};

作为替代方案,停止尝试使您的定义成为可编译的文本文件,而将其成为二进制文件。您可以通过一次操作将其读入内存,或将其设为内存映射文件并让操作系统根据需要交换它。

关于c++ - 在 C++ 中定义一个静态 float 组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4107531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com