c++ - 指向类的指针的 C++ 函数不起作用?
问题描述
我正在尝试使用 perlin 噪声生成地形,以提高地形质量,我想一次使用多个噪声。所以我写了一个适合我的课程。以下是 hpp 和 cpp 文件:
#include "perlinNoise.hpp"
class MultiPerlinNoise: public PerlinNoise {
public:
MultiPerlinNoise();
std::vector<PerlinNoise*> perlinNoises;
float octaveNoise(float x, float y);
};
cp:
#include "multiPerlinNoise.hpp"
MultiPerlinNoise::MultiPerlinNoise():
PerlinNoise(0) {
}
float MultiPerlinNoise::octaveNoise(float x, float y) {
float sum = 0.0f;
for(int i = 0; i < perlinNoises.size(); i++)
sum += perlinNoises[i]->octaveNoise(x, y);
return sum;
}
该类PerlinNoise
是我在互联网上发现的八度音阶危险噪声代码的包装器。它看起来像这样:
#include "sivPerlinNoise.hpp"
class PerlinNoise {
public:
PerlinNoise(unsigned int seed);
float octaveNoise(float x, float y);
float frequency;
float multiplier;
int octaves;
unsigned int seed;
float offset;
private:
siv::PerlinNoise perlinNoise;
};
cp:
#include "perlinNoise.hpp"
PerlinNoise::PerlinNoise(unsigned int seed):
perlinNoise(seed), frequency(2.0f), multiplier(1.0f), octaves(1), seed(seed), offset(0.0f) {
}
float PerlinNoise::octaveNoise(float x, float y) {
return perlinNoise.octaveNoise(x / frequency, y / frequency, octaves) * multiplier + offset;
}
现在的问题是,当我将指向噪声的指针传递给我的map
类时,函数总是返回0.0f
。这就是我的地图类的构造函数的样子:
Map::Map(PerlinNoise *noise, Shader *shader, const RenderData *data):
noise(noise), shader(shader), data(data), texture("resources/textures/stones.png") {
printf("%f\n", noise->octaveNoise(-(CHUNK_SIZE / 2.0f) + 0.0f, -(CHUNK_SIZE / 2.0f) + 0.0f));
update(glm::vec3(0.0f));
}
当我不使用指向噪音的指针时,一切都在正常工作。如何解决这个问题?
解决方案
您需要声明octaveNoise
为虚拟,因此可以通过继承类来覆盖该方法:
class MultiPerlinNoise: public PerlinNoise {
public:
MultiPerlinNoise();
std::vector<PerlinNoise*> perlinNoises;
virtual float octaveNoise(float x, float y);
};
推荐阅读
- angular - 如何将一个数组连接到另一个数组,该数组的类型是从另一个继承的
- ssl - curl:未知错误(0x80092012)-吊销功能无法检查证书的吊销
- javascript - 启用 Richtextbox 时未加载 Javascript 文件
- php - Fullcalendar 跨时区添加事件
- typescript - 深度克隆对象时出现 Typescript 错误 2345
- c - ARMv7 汇编语言:如何添加两个 uint32_t 并返回一个 uint64_t 结果
- c++ - 填空
- node.js - 获取请求响应包含objectid和versionkey而不是原始数据
- java - 映射嵌套的 json 字段
- python - Python:列表如何在递归中工作