点画直线的代码及解释。

#define drawOneLine(x1,y1,x2,y2) glBegin(GL_LINES); \

glVertex2f((x1),(y1)); \

glVertex2f((x2),(y2)); \

glEnd();


void init(void)

{

//指定屏幕清除颜色。

glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

//指定图像的着色方式。

glShadeModel(GL_FLAT);

}


void display(void)

{

//使用当前设置的颜色清屏,如果不这么做,你得到的是一个很花,并且没有规律的背景

glClear(GL_COLOR_BUFFER_BIT);

//设置划线的颜色为红色

glColor3f(1.0f, 0.0f, 0.0f);

//启用点画模式

glEnable(GL_LINE_STIPPLE);

//每位代表1个像素,8位有,8位空白

glLineStipple(1, 0x0F0F);

//线

drawOneLine(50.0f, 125.0f, 150.0f, 125.0f);

//每位代表2个像素,16位有,16位空白

glLineStipple(2, 0x0F0F);

//线

drawOneLine(50.0f, 100.0f, 150.0f, 100.0f);

//闭点画模式

glDisable(GL_LINE_STIPPLE);

//刷新界面。

glFlush();

}


void reshape(int w, int h)

{

//viewport并非必须调用,缺省是屏幕大小,指定需要作业的屏幕大小,不能大于窗口大小。

glViewport(0.0f, 0.0f, (GLsizei)w, (GLsizei)h);

//指定下面矩阵操作函数操作的矩阵。

glMatrixMode(GL_PROJECTION);

//恢复单位矩阵

glLoadIdentity();

//创建一个正交平行的视景体,这个其实gl中坐标的的大小,分别代表x,y,z,组两个,比如前两个代表x的最大负值和最大正值。

//这里使得需要实景图和整个窗口一样大小,并且坐标大小和窗口像素一样。

gluOrtho2D(0.0f, (GLfloat)w, 0.0f, (GLfloat)h);

}


int main (int argc, char * argv[])

{

//glut严格的说不是opengl的一部分,是为了支持使用opengl的程序方便的创建和管理窗口而做的,

//下面是它的初始化工作,一般情况下,我们需要把main函数的argv前面的const饰词去掉,以减少一个警告

glutInit(&argc, argv);

//初始化窗口的显示模式,使用双缓冲系统,颜色使用rgb

glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);

//初始化窗口大小400*150

glutInitWindowSize(400, 150);

//初始化窗口的为止为x = 100,y = 100

glutInitWindowPosition(100, 100);

//创建标题为工程名称 的窗口

glutCreateWindow(argv[0]);

//初始化opengl

init();

//设置显示回调函数

glutDisplayFunc(display);

//设置窗口大小变化的时候的回调函数。

glutReshapeFunc(reshape);

//程序开始运行。

glutMainLoop();

//严格的说,下面这句话不会执行到,只是为了符合iso标准C的格式。

return 0;

}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值