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;
}

代碼結束。

以下是程序運行截圖:

 

睡覺未完待續......


 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章