【问题标题】:OpenGL - Moving Primitives along the X and Y using arrow keysOpenGL - 使用箭头键沿 X 和 Y 移动基元
【发布时间】:2016-11-06 21:23:19
【问题描述】:

我正在构建一个 2D 绘图画布,允许用户在屏幕上绘制形状,方法是首先选择您要绘制的形状,然后单击绘图区域以绘制您的形状。下面是 UI 的外观,以获得更好的可视化效果:

到目前为止,我有一些代码允许用户单击所需的形状,绘制该形状,然后单击另一个形状进行绘制,依此类推...

首先我检查我的 processMouse() 函数中是否有一个按钮被点击:

if (x >= 0 && x <= 95 && y >= 302 && y <= 380) { // area of SQUARE shape
    // squareShape = false by default
    squareShape = true;
}

else squareShape = false;

如果有,我们在我的 display() 函数中突出显示形状:

if (squareShape != false) {
        drawHighlight(100, 50, 350, true);  // highlighted SQUARE
}

在同一个函数中,我们可以绘制一些点:

if (areaClicked2 != false) {
    for (int i = 0; i < points.size();i++)
    {
        //areaClicked2 = true;
        glLineWidth(1);
        glBegin(GL_LINES);
        glVertex2i(points[i].x + lineOffset.x, points[i].y + lineOffset.y);
    }
}

我对其他每个按钮都应用了完全相同的方法,它们似乎都工作正常...

我的问题?

如果我点击一个按钮来绘制正方形,它会绘制几个正方形,但是当我点击另一个按钮时,我的正方形会消失,因为我没有选择正方形按钮。因此,对于我单击绘图时的每个按钮,形状仅在我单击另一个按钮之前可见。我该如何解决这个问题?

编辑:

每次我想为新形状创建一个新的点向量时,我都会像这样创建一个新向量:

std::vector <point> lines;      // old vector
point OnePoint;
std::vector <point> dots;       // new vector
point OneDot;

我不应该这样做吗?如果没有,我该怎么办?我试图保留lines 并创建新的point 变量,但是当我绘制时,它们完全相同。

【问题讨论】:

  • 您发布的代码不包括相关部分。您可能将它包装在某个地方的 if 中。
  • 你确定吗?我确定我只需要在单击其他按钮时显示每个 for 循环的代码

标签: c++ opengl visual-studio-2015 2d


【解决方案1】:

只是一个猜测,我认为您正在清除(或创建新的)点 [] 对每个形状选择的集合。您应该保留旧的点集合并附加新的形状点,以便即使在不同的形状选择上也能看到它。

【讨论】:

  • 感谢您的回答,很抱歉回复晚了。我已经更新了我的问题,只是为了让您看看,您介意告诉我如何正确保留旧点集合并附加新形状点吗?
  • 不要在每个形状选择上调用 std::vector &lt;point&gt; lines;。为了进行测试,您可以将 std::vector &lt;point&gt; lines; 变量设为全局变量(应该在函数之外),这样您的所有点都将被存储到退出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-27
  • 1970-01-01
  • 1970-01-01
  • 2017-04-28
  • 2014-03-27
  • 2016-04-14
相关资源
最近更新 更多