为什么在绘制远离原点的点时得到空白的OpenGL窗口?

ntjbwcob  于 2022-12-18  发布在  其他
关注(0)|答案(1)|浏览(86)

这个问题是我正在做的一个更大的项目的一部分,但是这里有一个简单的例子,我已经编写了一个在垂直线上显示5个点的代码。在第一个例子中,注意m,其中存储要绘制的点,被初始化为float m[2] = {0.0f,0.0f}
代码:

#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
#include <iostream>
#include <cmath>

const int WINDOW_WIDTH = 800;
const int WINDOW_HEIGHT = 600;
const int SPIRAL_SIZE = 200;

float m[2] = {0.0f, 0.0f};

void display()
{
    glPointSize(3.0);
    glClearColor(0.0, 0.0, 0.0, 1.0);
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0, 1.0, 1.0);
    
    for (int i = 1; i <= 5; ++i)
    {
        // Draw the point
        glBegin(GL_POINTS);
        glVertex2f(m[0], m[1]);
        m[1] += 0.05;
        glEnd();
    }
    
    glutSwapBuffers();
}

int main(int argc, char **argv)
{     
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);    
    glutInitWindowSize(WINDOW_WIDTH, WINDOW_HEIGHT);    
    glutCreateWindow("Example");    
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}

以下是预期的输出:

但是当我把m的初始化改为m[2] = {10.0f, 10.0f}的时候,我得到了一个空白的输出窗口:

我已经尝试过:
1.卸下glutSwapBuffers
1.试图从其他不同的点开始绘图。
1.考虑到这可能是这个特定文件的一个问题,我尝试了我的其他项目以及相同的结果。(也许我在他们犯了同样的错误,以及)。

我的项目要求我从远离原点的位置开始绘制点。我做错了什么,或者我还需要做什么来完成它?

tktrz96b

tktrz96b1#

窗口的左下角坐标是(-1,-1),左上角坐标是(1,1)。因此(10,10)不在窗口中。您可以使用glOrtho更改它。例如:

void reshape(int width, int height)
{
    float aspect = (float)width/(float)height;
 
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();   
    glOrtho(-20.0 * aspect, 20.0 * aspect, -20.0, 20.0, -1.0, 1.0);

    glMatrixMode(GL_MODELVIEW);
}

int main(int argc, char **argv)
{ 
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    glutInitWindowSize(WINDOW_WIDTH, WINDOW_HEIGHT);
    glutCreateWindow("Example");
    
    glutReshapeFunc(reshape);
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}

相关问题