opengl — проблема переопределения класса C ++ для рисования кривой

Я пытаюсь реализовать программу, в которой линии будут рисоваться от точки к точке, когда пользователь нажимает на экран. У меня есть класс Polyline, который является подклассом класса Freeform, который является подклассом класса Curve. Метод рисования суперкласса Curve обычно вызывает getPoint, который получит взвешенную точку для кривой в этой конкретной точке. Однако в случае с методом рисования для Polyline я пытаюсь переопределить класс кривой, чтобы просто получить точку, на которую нажимает пользователь (как вы можете видеть, метод draw класса Polyline никогда не вызывает getPoint). Однако, когда я отлаживаю код, я вижу, что getPoint все еще вызывается, когда я пытаюсь нарисовать ломаную линию. Какие-либо предложения?

class Curve {

public:
virtual float2 getPoint(float t)=0;

void draw(){

glBegin(GL_LINE_STRIP);
for (float i = 0; i < 1; i+=.01) {
float2 point = getPoint(i);
float x = point.x;
float y = point.y;
glVertex2d(x, y);

}
glEnd();
};
};

class Freeform : public Curve
{
protected:
std::vector<float2> controlPoints;

public:
virtual float2 getPoint(float t)=0;
virtual void addControlPoint(float2 p)
{
controlPoints.push_back(p);
}
void drawControlPoints(){
glBegin(GL_POINTS);
for (float i = 0; i < controlPoints.size(); i++) {
float2 point = controlPoints.at(i);
float x = point.x;
float y = point.y;
glVertex2d(x, y);

}
glEnd();// draw points at control points
}
};

class Polyline : public Freeform {
public:
float2 getPoint(float t) {
return float2(0.0, 0.0);
}
//we add a control point (in this case, control point is where mouse is clicked)
void addControlPoint(float2 p)
{
controlPoints.push_back(p);
}
//trying to override Curve draw method
void draw(){
glBegin(GL_LINE_STRIP);
for (float i = 0; i < controlPoints.size(); i++) {
float2 point = controlPoints.at(i);
float x = point.x;
float y = point.y;
glVertex2d(x, y);
}
glEnd();
};
};

1

Решение

//trying to override Curve draw method

Комментарий выше в значительной степени говорит обо всем; ты «Пытается» переопределить void Curve::draw (), но не сделать этого, так как член-функция не заявлено ранее virtual,


Решение

  • декларировать void Curve::draw () как virtual,
  • Если или позже, посмотрите в (и использовать) ключевое слово override.
4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector