OpenGL - 在鼠标点击时绘制多边形,多边形总是在右边

Posted

技术标签:

【中文标题】OpenGL - 在鼠标点击时绘制多边形,多边形总是在右边【英文标题】:OpenGL - drawing polygon on mouse click, polygon is always on to the right 【发布时间】:2012-01-19 02:30:26 【问题描述】:

对于我的一个课程,我正在使用 OpenGL 创建一个简单的绘图程序,第一步是通过鼠标左键单击在窗口上创建一个多边形。我得到它来绘制它,但多边形总是在我单击的位置右侧的窗口中结束大约三分之一

我的鼠标点击代码是...

//function called when mouse is clicked
void mouseClick(int button, int state, int x, int y)

    float ptr1[3] =  x-size, y-size, 0 ;
    float ptr2[3] =  x-size, y+size, 0 ;
    float ptr3[3] =  x+size, y+size, 0 ;
    float ptr4[3] =  x+size, y-size, 0 ;

  if( button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)//if the left mouse button     is     clicked   
    glColor3f ( 1.0, 1.0, 1.0); //set color to white ( remove later)
    glOrtho (0.0, 1.0, 0.0, 1.0, -1.0, 1.0); //sets the window coordinates?
    glBegin (GL_POLYGON); //start drawing a polygon
             glVertex3fv (ptr1);
     glVertex3fv (ptr2);
     glVertex3fv (ptr3);
     glVertex3fv (ptr4);
glEnd();
    glFlush(); //flushes all commands to ensure polygon is drawn
  
  //glutPostRedisplay( );

任何人都可以看到任何明显的错误吗? Size 是 float = to 32 但我觉得这与这个问题无关。

【问题讨论】:

你的 x 和 y 坐标是多少?您的 glOrtho() 调用将绘图区域设置为在两个方向上从 0 到 1 定义。您的 x 和 y 坐标是否在 -0.5 和 0.5 之间或类似的范围内? 哦,好的。我只是点击。但是我的窗口是 800 x 600,所以我要更改 ortho 以匹配它。 Opengl 对我来说是全新的。所以我什至不知道 Ortho 到底做了什么 好吧,如果您看到正在绘制的东西,那么您的 x 和 y 显然接近正确。如果没有关于您传入的坐标的更多信息,我不会只是更改 glOrtho()。您可以从打印 x 和 y 值开始,并在进行任何更改之前查看它们是什么。看看你能不能理解为什么它们是第一。 【参考方案1】:

您需要将鼠标的 X 和 Y 坐标归一化为您的正射坐标...为此您可以这样做 x1 = x/屏幕重量 y1 = y/屏幕高度 x1 和 y1 新变量和 x , y 是鼠标参数...

【讨论】:

以上是关于OpenGL - 在鼠标点击时绘制多边形,多边形总是在右边的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL / C++ - 如何在鼠标点击时填充一个点周围的区域?

绘制多边形网格时的 Opengl 性能问题

OpenGL:绘制多边形时,如果第一个顶点在屏幕空间之外怎么办(三角扇)

OpenGL学习笔记多边形绘制

OpenGL在多个地方多次绘制同一个多边形

在 OpenGL 3+ 中有效地绘制多边形(每个多边形一种颜色)