使用glLineStipple()函数时为何无法显示虚线?
问题原因及解决办法
你的代码存在几个关键问题,导致虚线无法显示:
- 绘制颜色与背景色一致:你将背景设为白色(
glClearColor(1.0f, 1.0f, 1.0f, 1.0f)),但未设置线条的绘制颜色,OpenGL默认绘制颜色也是白色,线条和背景融为一体,自然看不到。 - 重复包含GLUT头文件:同时引入
<GL\glut.h>和<GL\freeglut.h>会造成重复定义,可能引发编译或运行异常。 - 缺少GLEW初始化:虽固定管线功能可能无需GLEW,但显式初始化能避免版本兼容问题。
修改后的代码
#include <Windows.h> #include <GL\glew.h> #include <GL\freeglut.h> void myInit() { glClearColor(1.0f, 1.0f, 1.0f, 1.0f); // 设置绘制颜色为黑色,与白色背景形成对比 glColor3f(0.0f, 0.0f, 0.0f); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); } void Display() { glClear(GL_COLOR_BUFFER_BIT); glEnable(GL_LINE_STIPPLE); glLineStipple(1, 0x00FF); // 模式:0x00FF,重复因子:1 glBegin(GL_LINES); glVertex2f(-0.5f, 0.0f); glVertex2f(0.5f, 0.0f); glEnd(); glDisable(GL_LINE_STIPPLE); glFlush(); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE); glutInitWindowSize(700, 500); glutInitWindowPosition(0, 0); glutCreateWindow("LineStipple"); // 初始化GLEW GLenum err = glewInit(); if (GLEW_OK != err) { fprintf(stderr, "GLEW初始化失败: %s\n", glewGetErrorString(err)); return 1; } myInit(); glutDisplayFunc(Display); glutMainLoop(); return 0; }
关键修改说明
- 添加
glColor3f(0.0f, 0.0f, 0.0f)设置黑色线条,和白色背景形成明显反差。 - 删除重复的
<GL\glut.h>头文件,仅保留<GL\freeglut.h>。 - 加入GLEW初始化代码,确保OpenGL扩展功能正常加载。
内容的提问来源于stack exchange,提问作者Komal Ejaz
相关产品推荐
相关产品推荐

