Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 发布覆盖c++;绘制曲线的类_C++_Opengl_Subclass_Glut_Curves_C++11 - Fatal编程技术网

C++ 发布覆盖c++;绘制曲线的类

C++ 发布覆盖c++;绘制曲线的类,c++,opengl,subclass,glut,curves,c++11,C++,Opengl,Subclass,Glut,Curves,C++11,我正在尝试实现一个程序,当用户点击屏幕时,将从一点到另一点绘制线条。我有一个折线类,它是自由形式类的一个子类,它是曲线类的一个子类。Curve超类的draw方法通常调用getPoint,它将在该特定点处为曲线获取一个加权点。但是,对于Polyline的draw方法,我试图覆盖curve类,以仅获取用户单击的点(如您所见,Polyline类的draw方法从不调用getPoint)。然而,当我调试代码时,我看到当我试图绘制一条多段线时,getPoint仍然被调用。有什么建议吗 class Curve

我正在尝试实现一个程序,当用户点击屏幕时,将从一点到另一点绘制线条。我有一个折线类,它是自由形式类的一个子类,它是曲线类的一个子类。Curve超类的draw方法通常调用getPoint,它将在该特定点处为曲线获取一个加权点。但是,对于Polyline的draw方法,我试图覆盖curve类,以仅获取用户单击的点(如您所见,Polyline类的draw方法从不调用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();
    };
};
类曲线{
公众:
虚拟浮点2获取点(浮点t)=0;
作废提款(){
glBegin(GL_线_带);
对于(浮点i=0;i<1;i+=0.01){
float2点=获取点(i);
浮动x=点x;
浮动y=点y;
glVertex2d(x,y);
}
格伦德();
}; 
};
类自由形式:公共曲线
{
受保护的:
std::矢量控制点;
公众:
虚拟浮点2获取点(浮点t)=0;
虚拟void addControlPoint(float2p)
{
控制点。推回(p);
}
void drawControlPoints(){
glBegin(总分);
对于(浮点i=0;i
上面的评论几乎说明了一切;您正在“尝试”重写
void Curve::draw()
,但由于成员函数之前未声明为
virtual
,因此无法重写


解决方案
  • 声明
    void Curve::draw()
    virtual
  • 如果是或更晚,查看(并使用)关键字
上面的评论几乎说明了一切;您正在“尝试”重写
void Curve::draw()
,但由于成员函数之前未声明为
virtual
,因此无法重写


解决方案
  • 声明
    void Curve::draw()
    virtual
  • 如果是或更晚,查看(并使用)关键字
//trying to override Curve draw method