OpenGL几何图元和缓冲区(六)

前一阵子项目太忙了,Arabic的Bidi问题搞的头大。这阵子闲一点了,继续OpenGL的学习吧。

今天学习一下OpenGL中点划线的绘制。

要想用OpengL画点划线必须先开启点划线功能。函数如下:

glEnable(GL_LINE_STIPPLE)//开启点划线支持
glDisable(GL_LINE_STIPPLE)//关闭点划线功能

点划线功能打开之后就可以画点划线了,函数如下:

void glLineStipple(GLint factor,GLushort pattern)

接下来解释一下参数的意思。第二个参数pattern指的是点划线的显示模式--即哪几位像素点显示(1显示),哪几位不显示(0不显示)。第一个参数参数factor是显示或不显示像素点的倍数。

注:此处的绘制模式是从最低位开始绘制。

好了,废话不多说了,直接上代码,点划线:

#include <GL/glut.h>

void RenderScene(void)
{
	GLfloat y;
	GLint factor = 1;
	GLushort pattern = 0x5555;



	glClear(GL_COLOR_BUFFER_BIT); //清除颜色

	glEnable(GL_LINE_STIPPLE); //启用点划线模式
	for(y = -90.0f; y<90.0f; y+=20.0f) {
		glLineStipple(factor,pattern);

		glBegin(GL_LINES);     //划线
		    glVertex2f(-80.0f,y);
			glVertex2f(80.0f,y);
		glEnd();

		factor++;            //改变partten宽度
	}

	glFlush();                    //刷新
}

//当窗口大小变化时调用
void ChangeSize(GLsizei w,GLsizei h)
{
	GLfloat aspectRatio;
	if(0 == h)
		h = 1;

	//设置视口大小
	glViewport(0,0,w,h);

	//重置坐标系
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();

	//建立裁剪区
	aspectRatio = (GLfloat)w / (GLfloat)h;
	if(w <= h)
		glOrtho(-100.0,100.0,-100.0/aspectRatio,100/aspectRatio,1.0,-1.0);
	else
		glOrtho(-100.0*aspectRatio,100.0*aspectRatio,-100.0,100.0,1.0,-1.0);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();

}

//设置渲染
void SetupRC(void)        
{
	glClearColor(0.0f,0.0f,1.0f,1.0f);
}

int main(int argc,char* argv[])
{
	glutInit(&argc,argv);
	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
	glutCreateWindow("OpenGL Sample8");
	glutDisplayFunc(RenderScene);
	glutReshapeFunc(ChangeSize);
	SetupRC();
	glutMainLoop();
	return 0;
}

代码结束。

以下是程序运行截图:

 

睡觉未完待续......


 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值