直线的绘制

#include <GL/glut.h>


void display();
void init();


int main(int argc, char ** argv)
{  
glutInit(&argc, argv);

glutInitWindowSize(400, 400); 
glutInitWindowPosition(400, 200); 
glutCreateWindow("几何图元类型");
glutDisplayFunc(display);
init();
glutMainLoop();
}


void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_LINE_STIPPLE);
glLineStipple(2, 0x0F0F);
glLineWidth(10.0f);
glBegin(GL_LINES);
glVertex2f(0.0f, 0.0f);
glVertex2f(0.5f, 0.5f);
glEnd();
glFlush();
}


void init()
{
  glClearColor(0.0,0.0,0.0,0.0);
}

(1)直线可以指定宽度:
void glLineWidth(GLfloat width);
其用法跟glPointSize类似。
(2)画虚线。
首先,使用glEnable(GL_LINE_STIPPLE);来启动虚线模式(使用glDisable(GL_LINE_STIPPLE)可以关闭之)。
然后,使用glLineStipple来设置虚线的样式。
void glLineStipple(GLint factor, GLushort pattern);
pattern是由1和0组成的长度为16的序列,从最低位开始看,如果为1,则直线上接下来应该画的factor个点将被画为实的;如果为0,则直线上接下来应该画的factor个点将被画为虚的。
以下是一些例子:

OpenGL入门学习笔记 (三) - Faye - Fayes blog


viod glLineStipple(GLint factor,GLshort 
pattern);    OpenGL中设置直线的当前点画模式。pattern参数是由1或0组成的16位序列,它们根据需要进行重复,对一条特定的直线进行点画处理。从这个模式的低位开始,一个像素一个像素的进行处理。如果模式中对应的位是1,就绘制这个像素,否则就不绘制。模式可以使用factor参数(表示重复因子)进行扩展,它与1和0的连续子序列相乘。因此,如果模式中出现了3个1,并且factor是2,那么它们就扩展为6个连续的1。必须以 GL_LINE_STIPPLE为参数调用glEnable()
才能启用直线点画功能。为了禁用直线点画功能,可以向glDisable()函数传递同一个参数。
   例如:   
 glLineStipple(1, Ox3F07);  
 glEnable(GL_LINE_STIPPLE);    
此时模式为Ox3F07(二进制形式为0011111100000111)
,它所画出来的直线是这样的:先连续绘制3个像素,然后连续5个像素留空,再连续绘制6
个像素,最后两个像素留空(注意,首先是从低位开始的)。如果factor是
2,那么这个模式便被扩展为:先连续绘制6个像素,然后连续
10个像素留空,再连续绘制12个像素,最后
4个像素留空。 
  如果没有启用点画线功能,OpenGL会自动把pattern当做为0xFFFF,把factor当成1。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值