为什么OpenGL不能正确显示请求的图纸

问题描述:

问候我是OpenGL和Glut的新手。我制作了一个功能,可以显示四个点,这四个点构成一个正方形的角,而不是将点组合在一起。问题是当我运行该项目时,该函数不显示任何内容。 我有一个类似的功能,可以与线条一起工作,并在窗口的角落显示一些完美的线条。请告诉我我做错了什么,以及如何解决它。这里有两个功能:为什么OpenGL不能正确显示请求的图纸

  1. 使用线条。完美作品

    void Display2() { 
    glColor3f(1,0.1,0.1); 
    glBegin(GL_LINES); 
        glVertex2f(1.0,1.0); 
        glVertex2f(0.9,0.9); 
        glVertex2f(0.8,0.8); 
        glVertex2f(0.7,0.7); 
        glVertex2f(0.6,0.6); 
        glVertex2f(0.5,0.5); 
        glVertex2f(-0.5,-0.5); 
        glVertex2f(-1.0,-1.0); 
    glEnd(); 
    } 
    
  2. 带点的那个。不显示任何东西。

    void Display3() { 
    glColor3f(1,0.1,0.1); 
    glBegin(GL_POINTS); 
    glVertex2f(100, 100); 
    glVertex2f(200, 100); 
    glVertex2f(100, 200); 
    glVertex2f(200, 200); 
    glEnd(); 
    
    } 
    

在OpenGL默认可见区域的范围从-1到1上的每个轴(所谓的归一化设备坐标)。

在您的行示例中,所有值都在此范围内,因此可见。在这个例子中,坐标只是在屏幕之外。您可以更改坐标以适合[-1,1]间隔,或者添加一个投影矩阵来为您处理。

+0

奇怪,因为我也有一个预定义的鼠标点击功能来指定点击的位置..当我点击屏幕的一个角落它的1 1或1 300或300 300或300 1 – user3402719

+2

这是屏幕坐标。如上所述,如果要指定屏幕坐标中的点,则可以使用投影矩阵。 – BDL

+1

进一步阐述BDL意味着什么:OpenGL不处理用户输入(鼠标,键盘等),并且没有像“OpenGL坐标系统”那样的东西。 OpenGL坐标输入可以以任何期望的方式进行变换。然而,用户输入发生在一个非常特定的坐标空间中,即鼠标指针所居住的空间(并且操作系统通常会将你转换为窗口坐标空间)。这是空间鼠标事件的报告,*你*负责做翻译到你正在做你的绘图的任何坐标空间。 – datenwolf