OpenGL---绘制几何图形的一些细节

论坛 期权论坛 脚本     
匿名网站用户   2020-12-20 02:46   11   0

参看:http://www.cppblog.com/doing5552/archive/2009/01/08/71532.html

设置点大小

void myDisplay(void)
{  
    GLfloat x;  
    glClear(GL_COLOR_BUFFER_BIT);  //清除颜色
    glPointSize(5.0f);  //点的大小为5像素,默认为1像素
    glBegin(GL_POINTS);  
        glVertex2f(0.0f, 0.0f);
    glEnd();

    glPointSize(2.0f);  //点的大小为2像素,默认为1像素
    glBegin(GL_POINTS);  
        glVertex2f(0.5f, 0.5f);
    glEnd();
    glFlush();  //立即执行前面的命令,而不是在缓冲区中等待
}  

这里写图片描述
关于直线

void myDisplay(void)
{  
    GLfloat x;  
    glClear(GL_COLOR_BUFFER_BIT);  //清除颜色
    glEnable(GL_LINE_STIPPLE);     //启动虚线模式
    glLineStipple(2, 0x0F0F);      //设置虚线样式,0F0F转为二进制,从低位起,0的地方2个点为虚,1的地方2个点为实  
    glLineWidth(10.0f);            //设置线宽
    glBegin(GL_LINES);             //设置画线模式
        glVertex2f(-0.5f, 0.0f);
        glVertex2f(0.5f, 0.0f);
    glEnd();
    glFlush();                     //立即执行前面的命令,而不是在缓冲区中等待
}  

这里写图片描述

关于多边形

多边形的两面及绘制方式,反转

void myDisplay(void)
{    
    glClear(GL_COLOR_BUFFER_BIT);  //清除颜色
    glPolygonMode(GL_FRONT, GL_FILL);  //设置正面为填充模式
    glPolygonMode(GL_BACK, GL_LINE);  //设置反面为线形模式
    glFrontFace(GL_CCW);  //设置逆时针方向为正面,CCW即CounterClockWise
    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();  //立即执行前面的命令,而不是在缓冲区中等待
}  

这里写图片描述

镂空多边形

void myDisplay(void)
{    
    /*用Windows自带的画笔程序新建一副图片,取名为mask.bmp,注意保存时,应该选择“单色位图”。在“图象”->“属性”对话框中,
    设置图片的高度和宽度均为32。
    用放大镜观察图片,并编辑之。黑色对应二进制零(镂空),白色对应二进制一(不镂空),编辑完毕后保存。*/
    static GLubyte Mask[128];
    FILE *fp;
    fp = fopen("mask.bmp", "rb");
    if(!fp)
        return;
    // 移动文件指针到这个位置,使得再读sizeof(Mask)个字节就会遇到文件结束
    if(fseek(fp, -(int)sizeof(Mask), SEEK_END))
        return;
    if(!fread(Mask, sizeof(Mask), 1, fp))  // 读取sizeof(Mask)个字节到Mask
        return;
    fclose(fp);

    glClear(GL_COLOR_BUFFER_BIT);       //清除颜色
    glEnable(GL_POLYGON_STIPPLE);       //启动多边形镂空模式
    glPolygonStipple(Mask);             //设置镂空样式
    glRectf(-0.5f, -0.5f, 0.0f, 0.0f);  //左下为镂空正方形
    glDisable(GL_POLYGON_STIPPLE);      //关闭多边形镂空模式
    glRectf(0.0f, 0.0f, 0.5f, 0.5f);    //右上为非镂空正方形
    glFlush();                          //立即执行前面的命令,而不是在缓冲区中等待
}  

这里写图片描述

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1136255
帖子:227251
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP