首先尝试 - 图形程序

时间:2014-05-11 20:19:50

标签: c++ opengl

我使用了一本名为使用OpenGL的计算机图形的书。

在第51页,我找到了这段代码

#include <windows.h>
#include "glut.h" 

//<<<<<<<<<<<<<<<<< method(s) >>>>>>>>>>>>>>>>>>>
void My_Display(void); 
void My_Inti(void); 

//<<<<<<<<<<<<<<<<< main method >>>>>>>>>>>>>>>>>>
int main(int argc, char ** argv)
{
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); 
    glutInitWindowSize(640, 480); 
    glutInitWindowPosition(100, 150); 
    glutCreateWindow("my second try "); 
    glutDisplayFunc(My_Display);

    My_Inti(); 
    glutMainLoop(); 



    return 0;
}

//<<<<<<<<<<<<<<<<<<<<<<<< IMPLEMENTING METHOD(S) >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.

//<<<<<<<<<<<<<<<< My_Inti >>>>>>>>>>>>>>>>>>>>>>>>>
void My_Inti(void)
{
    glClearColor(1, 1, 1, 0); // white color 
    glColor3f(0, 0, 0); // Black color 
    glPointSize(10); // point size is 10 pixel this is big .
    glMatrixMode(GL_PROJECTION);  
    glLoadIdentity(); 
    gluOrtho2D(0, 640, 0, 480); 
}


//<<<<<<<<<<<<<<<< My_Display >>>>>>>>>>>>>>>>>>>>>>
void My_Display(void)
{
    glClear(GL_COLOR_BUFFER_BIT); 
    glBegin(GL_POINT);
    glVertex2i(100, 50);
    glVertex2i(100, 130);
    glVertex2i(150, 130); 
    glEnd();
    glFlush();
}

我添加到此代码中的所有内容都是注释,我对变量稍作修改;仅此而已。

当我们遇到问题时,这段代码工作正常,但是它没有在显示方法中创建三个点?

2 个答案:

答案 0 :(得分:4)

问题只是一封丢失的信。而不是:

glBegin(GL_POINT);

正确的值是:

glBegin(GL_POINTS);

在没有渲染或者没有预期渲染的情况下,我会做的第一件事是调用glGetError(),看它是否返回错误。我承认我最初没有看到这个问题,但是调用glGetError()会很快指出来。

BTW:如果其他人对OpenGL中有GL_POINTGL_POINTS枚举感到惊讶。 GL_POINTglPolygonMode()的可能参数之一,而不是GL_POINTS,它表示绘制调用的可能原始类型之一。

答案 1 :(得分:1)

它不起作用,因为源代码中存在错误(不太可能)或您错误地复制了glBegin(GL_POINT);的参数(可能)。

使用

glBegin(GL_POINTS);

我得到了这张图片:

enter image description here