当我用x,y和z作为整数调用libnoise的getvalue函数时,结果总是得到0.这是正常的吗?当我在教程http://libnoise.sourceforge.net/tutorials/tutorial2.html中尝试1.25,0.75,0.5时,我得到了0.686347的预期结果.具体来说,我已经尝试过20岁以下的整数.我只是不明白这是如何工作的?
任何帮助是极大的赞赏.
我使用菱形平方算法生成随机地形.它工作得很好,除了我将这些大锥形状伸出或伸入地形.问题似乎是每时不时地设置一个点太高或太低.
这是问题的图片

当我将平滑度设置得非常高时,可以更好地看到它

这是我的代码 -
private void CreateHeights()
{
if (cbUseLand.Checked == false)
return;
int
Size = Convert.ToInt32(System.Math.Pow(2, int.Parse(tbDetail.Text)) + 1),
SideLength = Size - 1,
d = 1025 / (Size - 1),
HalfSide;
Heights = new Point3D[Size, Size];
float
r = float.Parse(tbHeight.Text),
Roughness = float.Parse(RoughnessBox.Text);
//seeding all the points
for (int x = 0; x < Size; x++)
for (int y = 0; y < Size; y++)
Heights[x, y] = Make3DPoint(x * d, 740, y * d);
while (SideLength …Run Code Online (Sandbox Code Playgroud) algorithm height procedural-programming map procedural-generation
我希望从C#XNA程序中播放类似MIDI的音符.我实际上并不需要构建一个MIDI文件,只能启动和停止音符或在给定时间播放它们.
play("flute", "D4", "start");
play("flute", "D4", "stop");
play("flute", "E4", "5 secs");
Run Code Online (Sandbox Code Playgroud) 好的,在网上找到了Perlin和Simplex噪音之间的很多比较.但我真的找不到三个维度之间的简单处理时间比较,这是我最感兴趣的.我已经阅读了那个流行的PDF(甚至大部分都理解了 - 是的!)但是我无法回答这个简单的问题:假设最佳实现,哪一个更快3D?
这个stackoverflow问题答案表明,Simplex对我来说是一个非常明显的赢家.当然,还有其他资源声称完全相反.
然而,一般声明似乎是Perlin噪声具有O(2 ^ N)的复杂度,而Simplex具有O(N ^ 2).其中3D表示Perlin为8,Simplex为9.但是,在某些网站上,我发现Simplex实际上是O(N)的说法.那么这里的真实情况是什么,这对3D的速度意味着什么呢?
我在这里不知所措,我真的主要对3D应用程序(包括洞穴的随机地形生成)的使用感兴趣,如果我希望它能像我一样快,我找不到一个问题的答案.可能.
所以也许有人可以帮助我:)
algorithm 3d procedural-generation perlin-noise simplex-noise
这是我在 stackover 流中的第一篇文章。最近我开始阅读名为“植物的算法之美”的书,其中在第 1 章中,他解释了 L 系统。(您可以在此处阅读该章节)。
所以据我所知,有两种类型的 L 系统。边缘重写和节点重写。
边缘重写相对非常简单。有一个初始的起始多边形和一个生成器。初始多边形的每条边(边)都将被生成器替换。
但是这个节点重写非常混乱。从我收集到的信息来看,有两个或更多规则,并且每次迭代都将规则中的变量替换为其常量对应项。
对于海龟解释,这些是标准规则
F : Move turtle forward in current direction (initial direction is up)
+ : rotate turtle clock wise
- : rotate turtle anti clock wise
[ : Push the current state of the turtle onto a pushdown operations stack.
The information saved on the stack contains the turtle’s position and orientation,
and possibly other attributes such as the color and width of lines being drawn. …Run Code Online (Sandbox Code Playgroud) algorithm procedural-programming l-systems procedural-generation fractals
我正在尝试在 OpenGL 中程序生成一个充满星星的背景。
我采用的方法是创建一个带有立方体贴图纹理的天空盒。立方体贴图纹理的每一面基本上由一个 2048x2048 的黑色图像组成,其中随机选择的纹素设置为白色。结果如下:
我不确定从图像上看它有多明显,但是当在一个非常明显的盒子形状周围移动时,可以看出靠近盒子边缘的星星看起来更小而且更靠近。我怎样才能防止这种情况?我是否需要放弃天空盒方法并使用类似天空球的东西?
编辑:这是我将立方体贴图映射到天空的方式。
// Create and bind texture.
glGenTextures(1, &texture_);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_CUBE_MAP, texture_);
for (unsigned int i = 0; i < 6; ++i) {
std::vector<std::uint8_t> image = generateTexture(TEXTURE_WIDTH, TEXTURE_HEIGHT);
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB, TEXTURE_WIDTH, TEXTURE_HEIGHT,
0, GL_RGB, GL_UNSIGNED_BYTE, image.data());
}
// Set texture parameters.
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
Run Code Online (Sandbox Code Playgroud)
下面是generateTexture函数的定义:
std::vector<std::uint8_t> Stars::generateTexture(GLsizei width, GLsizei height) {
std::vector<std::uint8_t> image(static_cast<std::size_t>(3 * width * height)); …Run Code Online (Sandbox Code Playgroud) 我试图在程序上生成点星,为我的游戏创建一个星空背景.我想根据平均星的真实颜色来加权颜色.有人能指出我这种数据的方向吗?
我正在使用粒子沉积来尝试在程序上创造一些类似火山的山脉,但我所能摆脱的只是金字塔状的结构.是否有人熟悉该算法可能能够揭示我可能做错的事情.我现在正在将每个粒子放在同一个地方.如果我不这样做,它们会分散在非常薄的一层,而不是任何一种山.
void TerrainClass::ParticalDeposition(int loops){
float height = 0.0;
//for(int k= 0; k <10; k++){
int dropX = mCurrentX = rand()%(m_terrainWidth-80) + 40;
int dropY = mCurrentZ = rand()%(m_terrainHeight-80) + 40;
int radius = 15;
float angle = 0;
int tempthing = 0;
loops = 360;
for(int i = 0; i < loops; i++){
mCurrentX = dropX + radius * cos(angle);
mCurrentZ = dropY + radius * sin(angle);
/*f(i%loops/5 == 0){
dropX -= radius * cos(angle);
dropY += radius * sin(angle); …Run Code Online (Sandbox Code Playgroud) 我主要是一个程序员,不太擅长绘图,所以我决定在运行时以程序方式制作纹理,我的意思是每次都生成一些新的和新鲜的东西,它应该看起来可信。如何获得从这个开始?在 Unity 中编程,如果这会有所帮助的话。
我记得几年前上过一个班级,在那里我得到了一个有趣状态机的有趣例子,其中每个州都包含一个字母,并且有多条路径导致其他字母通常跟着它们一个字.一些字母也有导致终止的路径,并且通过从有限状态机中的任何点开始并遵循到终止的有效路径,您可以将字母链接在一起并且(几乎)总是以有效的方式结束字.当然,这只是该语言中的一部分单词(遗憾的是我忘记了FSM的用语).我的问题涉及多个相关问题: