加载中…
个人资料
吴超
吴超
  • 博客等级:
  • 博客积分:0
  • 博客访问:26,780
  • 关注人气:211
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

OpenGL点、线、面的绘制【转】

(2023-11-15 10:09:32)
标签:

opengl

线

矩形

分类: 代码天地

1、点:

void TestPoint()
{
    //点的大小默认为一个像素,通过下面的函数可以设置一点的大小
    glPointSize(50.0f);

    glBegin(GL_POINTS);
    glVertex2f(0, 0);
    glVertex2f(0.5f, 0.5f);

    glEnd();
}

https://images2018.cnblogs.com/blog/696241/201805/696241-20180506005111736-1570468398.png

 OpenGL点、线、面的绘制【转】

2、线:

void TestLine()
{
    //设置线的宽度
    glLineWidth(500.0f);

    glBegin(GL_LINES);

    glVertex2f(0, 0);
    glVertex2f(0.5f, 0.5f);

    glEnd();
}

https://images2018.cnblogs.com/blog/696241/201805/696241-20180506103306199-1522512575.png

OpenGL点、线、面的绘制【转】

3、虚线:

//画虚线
void TestLineSttiple()
{
    //开启虚线模式 , 使用 glDisable(GL_LINE_STIPPLE) 关闭虚线模式
    glEnable(GL_LINE_STIPPLE);

    //设置线的宽度
    glLineWidth(500.0f);

    //设置虚线的样式
    //参数一: 要画的点的个数
    //参数二: 是由1和0组成的长度为16的序列,从最低位开始看,如果为1,则直线上接下来应该画的factor个点将被画为实的;如果为0,则直线上接下来应该画的factor个点将被画为虚的。
    glLineStipple(2, 0x0F0F);

    glBegin(GL_LINES);

    glVertex2f(0, 0);
    glVertex2f(0.5f, 0.5f);

    glEnd();

https://images2018.cnblogs.com/blog/696241/201805/696241-20180506104200761-1950679781.png



OpenGL点、线、面的绘制【转】



4、多边形:

  1>多边形的两面及绘制方式:

    多边形的有两个面,每一个面均可以设置不同的绘制模式:填充(默认的绘制模式)、只绘制边缘轮廓、只绘制顶点。

    glPolygonMode(GL_FRONT, GL_FILL); // 设置正面为填充方式

    glPolygonMode(GL_BACK, GL_LINE); // 设置反面为边缘绘制方式

    glPolygonMode(GL_FRONT_AND_BACK, GL_POINT); // 设置两面均为顶点绘制方式

  2>一般约定,逆时针为正面,顺时针为反面,

    可以通过glFrontFace函数来交换“正面”和“反面”的概念。

    glFrontFace(GL_CCW);   // 设置CCW方向为“正面”,CCW即CounterClockWise,逆时针

    glFrontFace(GL_CW);    // 设置CW方向为“正面”,CW即ClockWise,顺时针

https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif
void TestPolygon()
{
    //glPolygonMode(GL_FRONT, GL_FILL);            // 设置正面为填充方式

    //glPolygonMode(GL_BACK, GL_LINE);             // 设置反面为边缘绘制方式

    //glPolygonMode(GL_FRONT_AND_BACK, GL_POINT); // 设置两面均为顶点绘制方式

    glPolygonMode(GL_FRONT, GL_FILL); // 设置正面为填充模式

    glPolygonMode(GL_BACK, GL_LINE);   // 设置反面为线形模式

    glFrontFace(GL_CCW);               // 设置逆时针方向为正面

    glBegin(GL_POLYGON);               // 按逆时针绘制一个正方形,在左下方

    glVertex2f(-0.5f, -0.5f);

    glVertex2f(0.0f, -0.5f);

    glVertex2f(0.0f, 0.0f);

    glVertex2f(-0.5f, 0.0f);

    glEnd();

    glBegin(GL_POLYGON);               // 按顺时针绘制一个正方形,在右上方

    glVertex2f(0.0f, 0.0f);

    glVertex2f(0.0f, 0.5f);

    glVertex2f(0.5f, 0.5f);

    glVertex2f(0.5f, 0.0f);

    glEnd();

    glFlush();
}

https://images2018.cnblogs.com/blog/696241/201805/696241-20180506112004194-1459585416.png

OpenGL点、线、面的绘制【转】

  3>剔除多边形:

    glEnable(GL_CULL_FACE)    启动剔除功能

      glDisable(GL_CULL_FACE)   关闭剔除功能

    glCullFace的参数可以是GL_FRONT、GL_BACK、GL_FRONT_AND_BACK,分别表示剔除正面、剔除反面、剔除正反两面的多边形。

    注意:剔除功能只影响多边形,而对点和直线无影响。例如,使用glCullFace(GL_FRONT_AND_BACK)后,所有的多边形都将被剔除,所以看见的就只有点和直线。


  4>多边形镂空:

    glEnable(GL_POLYGON_STIPPLE)    启动镂空模式

    glDisable(GL_POLYGON_STIPPLE)   关闭镂空模式

    使用 glPolygonStipple(const GLubyte *mask) 来设置镂空的样式,参数mask指向一个长度为128字节的空间,它表示了一个32*32的矩形应该如何镂空。其中:第一个字节表示了最左下方的从左到右(也可以是从右到左,这个可以修改)8个像素是否镂空(1表示不镂空,显示该像素;0表示镂空,显示其后面的颜色),最后一个字节表示了最右上方的8个像素是否镂空。

https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif
OpenGL点、线、面的绘制【转】


void TestPolygonStipple()
{
    //启动镂空模式
    glEnable(GL_POLYGON_STIPPLE);
    //设置镂空模式
    glPolygonStipple(Mask);
    //在右上角画一个带有镂空效果的矩形
    glRectf(0.0f, 0.0f, 0.5f, 0.5f);

    //关闭镂空效果
    glDisable(GL_POLYGON_STIPPLE);
    //在左下角绘制一个没有镂空效果的矩形
    glRectf(-0.5f, -0.5f, 0.0f, 0.0f);
}

https://images2018.cnblogs.com/blog/696241/201805/696241-20180506114638835-846973064.png

   OpenGL点、线、面的绘制【转】

 具体镂空出的是什么样的图形,可以试着用具体绘图工具生成相关 的镂空参数。

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有