You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 08:01:07