Я пытаюсь реализовать собственное дополнение для mitsuba, но когда я использую поле высоты, которое я определил в другом вызове функции (WaveBrdfAccel) в main.cpp, оно компилируется без проблем, но когда я пытаюсь визуализировать сцену, я получить сообщение об ошибке: неопределенный символ: _ZTVN7mitsuba11HeightfieldE
Что я делаю не так в вызове этого конструктора?
Я пытаюсь это сделать на Mitsuba версии 0.5.0 (Linux, 64 bit).
Если я удаляю параметр heightfield из объявления WaveBrdfAccel, то эта ошибка не возникает, что наводит меня на мысль, что что-то не так в том, как я это называю, но я не могу понять это.
Вот мой файл main.cpp:
GPTWorkResultTest *spec;
spec->SpectrumInit();
GPTWorkResultEXR heightfieldImage(heightfieldFilename);
Heightfield heightfield(&heightfieldImage, texelWidth, vertScale);
Query query;
query.mu_p = Vector2(mu_x, mu_y);
query.sigma_p = sigma_p;
query.lambda = lambda;
WaveBrdfAccel waveBrdfAccel(&heightfield, diffModel);
класс Heightfield и WaveBrdfAccel в waveBrdf.h:
class Heightfield {
public:
explicit Heightfield() {}
Heightfield(GPTWorkResultEXR *heightfieldImage, Float texelWidth = 1.0, Float vertScale = 1.0)
: mHeightfieldImage(heightfieldImage), mTexelWidth(texelWidth), mVertScale(vertScale) {}
GaborKernel g(int i, int j, Float F, Float lambda);
Vector2 n(Float i, Float j);
public:
GPTWorkResultEXR *mHeightfieldImage;
Float mTexelWidth; // in microns.
Float mVertScale;
MTS_DECLARE_CLASS()
};
class WaveBrdfAccel {
public:
explicit WaveBrdfAccel(Heightfield *heightfield, string method);
comp queryIntegral(const Query &query, int layer, int xIndex, int yIndex);
MTS_DECLARE_CLASS()
и, наконец, включение в waveBrdf.cpp:
WaveBrdfAccel::WaveBrdfAccel(Heightfield *heightfield, string method) {
cout << "IT IS ACTUALLY running wave" << endl;
}
MTS_IMPLEMENT_CLASS(WaveBrdfAccel, false, WorkResult)
EDIT:
Я не совсем уверен, почему это так, но мне удалось это исправить, просто разделив определения классов на отдельные заголовочные файлы. Если кто-нибудь знает, почему это сработало, хотел бы знать!