0
我使用指針的載體來Primitive
S:使用指針,重寫方法沒有被調用
vector<Primitive*> primitives;
在我把指針從Primitive
派生的類,即Instance
:
Shape * s = new Sphere();
PhongMaterial* mat = new PhongMaterial(this, 0.6, 0.15, 0.2, Color(1, 0, 0), 50);
Instance* redSphere = new Instance(s, mat);
redSphere->scale(1, 10, 1);
primitives.push_back(redSphere);
這是Instance.h
:
class Instance: public Primitive {
private:
Transform* invTransform;
public:
Instance(Shape * const s, Material* const mat);
bool intersect(const Ray& ray, float& tmin, Intersection& isct);
bool shadow_hit(const Ray& ray, float& tmin);
void scale(float a, float b, float c);
~Instance() {
;
}
};
這是Primitive.h
:
class Primitive {
private:
Shape* shape;
Material* material;
public:
Primitive(Shape * const s, Material* const mat);
bool intersect(const Ray& ray, float& tmin, Intersection& isct);
bool shadow_hit(const Ray& ray, float& tmin);
~Primitive() {
;
}
};
這是我使用它的方式:
for (int i = 0; i < primitives.size(); i++) {
float t;
if (primitives[i]->intersect(ray, t, iTmp) && t < tMin) {
tMin = t;
isect = iTmp;
}
}
我的問題是,循環永遠不會調用Instance
intersect()
方法。相反,它從Primitive
調用方法。我只是不知道如何在這種情況下發生對象切片,因爲我在任何地方都使用指針。
Eclipse的告訴我,Instance
的intersect()
方法陰影從Primitive
方法。這是否與任何事情有關?我是C++的新手,來自Java。任何幫助表示讚賞。
非虛方法沒有動態調度。 – Lingxi