《计算机图形学基础》OpenGL画点画直线画虚线实现不同线宽

本文介绍了一个使用OpenGL进行绘图的示例程序,演示了如何在OpenGL中绘制不同大小的点、不同宽度及样式(实线、虚线)的直线。通过调整GL_POINTS、GL_LINES属性及GL_LINE_STIPPLE来实现多样化的图形效果。

《计算机图形学基础》OpenGL画点画直线画虚线实现不同线宽

#include<stdio.h>
#include<glut.h>
#include<GL.h> 
#include<GLU.h>

void RenderScene()
{
	glClear(GL_COLOR_BUFFER_BIT);
	glColor3f(0.0f,0.0f,0.0f);

	//画点
	GLfloat sizesPoint[2];
	GLfloat stepPoint; 
	GLfloat curSizePoint;
    glGetFloatv(GL_POINT_SIZE_RANGE,sizesPoint);
    glGetFloatv(GL_POINT_SIZE_GRANULARITY,&stepPoint); 
    curSizePoint=sizesPoint[0];  
    for (int i=0;i<10;i++) {       
		glPointSize(curSizePoint);       
		glBegin(GL_POINTS);      
		glVertex3f(25.0+i*20,200.0f,0.0f);       
		glEnd();
        curSizePoint +=stepPoint*3;
    }
//直线

	GLfloat curSizeLine=5;
	glLineWidth(curSizeLine); 

    glBegin(GL_LINES);
    glVertex3f(25.0f,160.0f,0.0f);
    glVertex3f(225.0f,160.0f,0.0f); 
    glEnd();

	glEnable(GL_LINE_STIPPLE);
	glLineStipple(1,0x00FF);
	glBegin(GL_LINES);
	glVertex3f(25.0f,120.0f,0.0f);
	glVertex3f(225.0f,120.0f,0.0f);
	glEnd();

	glLineWidth(10);
	glLineStipple(1,0x070F);    //0xFF0C
	glBegin(GL_LINES);
	glVertex3f(25.0f,80.0f,0.0f);
	glVertex3f(225.0f,80.0f,0.0f);
	glEnd();

	glLineStipple(4,0x070F);
	glBegin(GL_LINES);
	glVertex3f(25.0f,40.0f,0.0f);
    glVertex3f(225.0f,40.0f,0.0f); 
    glEnd();

    glDisable(GL_LINE_STIPPLE);
    glFlush();
}

void ChangeSize(GLsizei w,GLsizei h)
{ 
	if (h==0) {
		h=1;
	}
	glViewport(0,0, w, h);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	if (w<=h) {
	glOrtho (0.0f,250.0f,0.0f,250.0f*h/w,1.0f, -1.0f);
    }else{
    glOrtho (0.0f,250.0f*w/h,0.0f,250.0f,1.0f, -1.0f);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
	}
}

int main(int argc,char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE |GLUT_RGB |GLUT_DEPTH);
    glutInitWindowSize(500,500); 
    glutInitWindowPosition(100,100);
	glutCreateWindow(argv[0]);
    glutDisplayFunc(RenderScene);
	glutReshapeFunc(ChangeSize);
    glClearColor(1.0f,1.0f, 1.0f,1.0f);
    glutMainLoop();
    return 0;
}

 

转载于:https://my.oschina.net/finchxu/blog/1573060

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值