我使用了一本名为使用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();
}
我添加到此代码中的所有内容都是注释,我对变量稍作修改;仅此而已。
当我们遇到问题时,这段代码工作正常,但是它没有在显示方法中创建三个点?
答案 0 :(得分:4)
问题只是一封丢失的信。而不是:
glBegin(GL_POINT);
正确的值是:
glBegin(GL_POINTS);
在没有渲染或者没有预期渲染的情况下,我会做的第一件事是调用glGetError()
,看它是否返回错误。我承认我最初没有看到这个问题,但是调用glGetError()
会很快指出来。
BTW:如果其他人对OpenGL中有GL_POINT
和GL_POINTS
枚举感到惊讶。 GL_POINT
是glPolygonMode()
的可能参数之一,而不是GL_POINTS
,它表示绘制调用的可能原始类型之一。
答案 1 :(得分:1)
它不起作用,因为源代码中存在错误(不太可能)或您错误地复制了glBegin(GL_POINT);
的参数(可能)。
使用
glBegin(GL_POINTS);
我得到了这张图片: