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

参看: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();                          //立即执行前面的命令,而不是在缓冲区中等待
}  

这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值