Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.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++_Qt_Opengl_Qglwidget - Fatal编程技术网

C++ 行被复制而不是移动

C++ 行被复制而不是移动,c++,qt,opengl,qglwidget,C++,Qt,Opengl,Qglwidget,我使用的qWidget继承了QGLWidget,在这个小部件下面我有两个按钮。 按钮1:+ 按钮2:- 这是我的代码: void GLWidget::paintGL() { glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0,_w,0,_h,-1,1); glViewport(_camera_pos_x,0,_w,_h); glBegin(GL_LINES); glVerte

我使用的qWidget继承了QGLWidget,在这个小部件下面我有两个按钮。 按钮1:+ 按钮2:-

这是我的代码:

void GLWidget::paintGL() {

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0,_w,0,_h,-1,1);
    glViewport(_camera_pos_x,0,_w,_h);

    glBegin(GL_LINES);
        glVertex2i(50,50);
        glVertex2i(200,200);
    glEnd();

   update();
}
我希望每次按下+按钮时,屏幕将向右移动10个像素,这意味着该行将向左移动10个像素

这是我按下按钮时的代码:

void right() {_camera_pos_x += 10;}
\u camera\u pos\u X
只是一个初始化为0的成员int

当我按下按钮时,另一条线被渲染到右边10个像素,我看到两条线

我的代码怎么了


顺便说一句,我想我正在使用OpenGL的旧代码,有没有更好的方法来渲染线条?

首先要注意的是,使用
glBegin
/
glEnd
序列的绘图在十多年前就被弃用了。 阅读并了解最先进的渲染方法


指定从标准化设备坐标到窗口坐标的转换。如果要更改线的位置,则必须在其他位置绘制线,但这不会更改视口的大小。使视口与窗口一样大:

glViewport(0, 0, _w, _h);
默认帧缓冲区从不清除,因此渲染始终在前一帧的渲染上绘制。因此,您可以“看到两条线”。用于在渲染开始时清除帧缓冲区:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
更改模型视图矩阵以设置线的位置:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0,_w,0,_h,-1,1);
glViewport(0, 0, _w, _h);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(_camera_pos_x, 0.0f, 0.0f);

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glBegin(GL_LINES);
    glVertex2i(50,50);
    glVertex2i(200,200);
glEnd();

在绘制新图像之前,必须清除帧缓冲区的旧内容。将
glClear(GL\u COLOR\u BUFFER\u BIT)
放在
paintGL()的开头

请在下次提交问题前花几分钟至少纠正最明显的打字错误。