我使用FastNoiseLite生成了一個立方體世界,但我不知道在使用 3d 噪聲時如何區分頂級塊為草和底部的泥土。
TArray<float> CalculateNoise(const FVector& ChunkPosition)
{
Densities.Reset();
// ChunkSize is 32
for (int z = 0; z < ChunkSize; z )
{
for (int y = 0; y < ChunkSize; y )
{
for (int x = 0; x < ChunkSize; x )
{
const float Noise = GetNoise(FVector(ChunkPosition.X x, ChunkPosition.Y y, ChunkPosition.Z z));
Densities.Add(Noise - ChunkPosition.Z);
}
}
}
return Densities;
}
void AddCubeMaterial(const FVector& ChunkPosition)
{
const int32 DensityIndex = GetIndex(ChunkPosition);
const float Density = Densities[DensityIndex];
if (Density < 1)
{
// Add Grass block
}
// Add dirt block
}
void GetNoise(const FVector& Position) const
{
const float Height = 280.f;
if (bIs3dNoise)
{
FastNoiseLiteObj->GetNoise(Position.X, Position.Y, Position.Z) * Height;
}
FastNoiseLiteObj->GetNoise(Position.X, Position.Y) * Height;
}
這是使用 3D 噪聲時的結果。
3D 噪波結果
但是,如果我切換到 2D 噪點,它就可以正常作業了。
2D 噪聲結果
uj5u.com熱心網友回復:
這個答案適用于柏林之類的噪音。
您的整數塊大小在噪聲空間中是不連續的。
“位置”需要按比例縮放1/Height。將噪聲縮放為連續塊。然后按比例縮放Height。
如果您對 XY 軸(2D)感到滿意,您可以將縮放限制在 Z 軸:
FastNoiseLiteObj->GetNoise(Position.X, Position.Y, Position.Z / Height) * Height;
此調整提供了相對于 Position(X,Y) 的噪聲連續 Z 塊位置。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/517234.html
標籤:C 虚幻引擎5
上一篇:c 中字串的擦除功能
