4.点与线

点与线

常用方法

glBegin与glEnd

OpenGL的图元绘制放在函数glBegin和glEnd之间,由函数glBegin的参数指定绘制图元的类型。
结构类似于:

	glBegin(XXXXXX);
		xxxxxxx
		xxxxxxx
	glEnd();

其中,glBegin后可填参数,来确定要绘制的图元类型

模式图元类型
GL_POINTS将指定的各个顶点用于创建单个的点
GL_LINES将指定的项点用于创建线段。每两个顶点指定一条单独的线段。如果项点个数是奇数,则忽略后一个
GL_LINE_STRIP将指定的顶点用于创建线条。第一个顶点之后的每个顶点指定的是线条延伸到的下一个点
GL_LINE_LOOP特性和GL_LINE_STRIP相似,只不过最后一条线段是在指定的后一个和第一个顶点之间绘制。典型情况下,这用于绘制那些可能违反了GL_POLYGON用法规则的封闭区域
GL_TRIANGLES将指定的顶点用于构造三角形。每三个顶点指定一个新三角形。如果顶点个数不是三的倍数,多余的顶点将被忽略
GL_TRIANGLE_将指定的顶点用于创建三角条。指定前三个顶点之后,后继的每
STRIP个顶点与它前面两个顶点一起用来构造下一个三角形。每个顶点三元组(在初的组之后)会自动重新排列以确保三角形绕法的一致性。
GL_TRIANGLE_将指定的顶点用于构造三角扇形。第一个顶点充当原点,第三个
FAN顶点之后的每个顶点与它的前一个顶点还有原点一起组合。
GL_QUADS每四个顶点一组用于构造一个四边形。如果顶点个数不是四的倍数,多余的顶点将被忽略
GL_QUADS_sT将指定的顶点用于构造四条形边。在第一对顶点之后,每对顶点
RIP定义一个四边形。和GL_QUADS的顶点顺序不一样,每对顶点以指定顺序的逆序使用,以便保证绕法的一致
GL_POLYGON将指定的顶点用于构造一个凸多边形。多边形的边缘决不能相交。最后一个顶点会白动连接到第一个顶点以确保多边形是封闭的

点的绘制

glvertex函数用于指定顶点,可以有2,3,4个参数。
例如

glVertex2f(x,y)
glVertex3f(x,y,z)
glVertex4f(x,y,z,w)

两个参数即为平面,三个参数带一个空间向量,四个参数中的w为缩放因子

实际应用

glBegin(GL_POINTS);
	glVertex3f(0.0f, 0.0f, 0.0f);
	glVertex3f(0.7f,0.0f,0.0f);
glEnd():

坐标是相对于屏幕中心的,以视窗的宽高分别为正负1,则正中心为0.0点

#define GLUT_DISABLE_ATEXIT_HACK   
#include <Windows.h>
#include <gl/glut.h>

void yh()
{
	glClearColor(0.4, 0.2, 0.9, 0.0); 
	glClear(GL_COLOR_BUFFER_BIT);
	glBegin(GL_POINTS);
	glVertex3f(0.0f,0.0f,0.0f);
	glVertex3f(0.7f,0.1f,0.0f);
	glEnd();
	glFlush();
}

void redraw(int x, int y)
{
	int dis = x > y ? y : x;
	glViewport(0, 0, dis, dis);
}

int main(int argc, char* argv[])
{
	glutInit(&argc, argv); 
	glutInitDisplayMode(GLUT_STENCIL|GLUT_RGB); 
	glutInitWindowPosition(0, 0);
	glutInitWindowSize(500, 500);
	glutCreateWindow("有视口的窗口");
	glutDisplayFunc(yh); 
	glutReshapeFunc(redraw);
	glutMainLoop();
	return 0;
}

运行结果

在这里插入图片描述
在OpenGL中绘制一个点时,点大小的默认值是一个象素。可以用函数glPointSize修改这个值:
void glPointSize(GLfloat size);
这个函数采用一个参数来指定画点时以象素为单位的近似直径。

glPointSize(10);
glBegin(GL_POINTS);
glVertex3f(0.0f,0.0f,0.0f);	
glVertex3f(0.7f,0.1f,0.0f);
glEnd();

运行结果

在这里插入图片描述

直线的绘制

画线与画点一样,在glBegin后填划线参数,主要的直线绘制模式有三种:

参数作用
GL LINES将顶点1与顶点2相连,3与4相连,不够凑成一对的,则不连
GL_LINE_STRIP将顶点1与2相连,2与3相连,以此类推
GL_LINE_LOOP将顶点1与2相连,2与3相连,以此类推,最后将最后一个点与1相连

示例

GL_LINES

	glBegin(GL_LINES);
	glVertex3f(0.0f,0.0f,0.0f);
	glVertex3f(0.7f,0.1f,0.0f);
	glEnd();

在这里插入图片描述
GL_LINE_STRIP

	glBegin(GL_LINES);
	glVertex3f(0.0f,0.0f,0.0f);
	glVertex3f(0.7f,0.1f,0.0f);
	glVertex3f(0.2f,0.3f,0.0f);
	glVertex3f(0.9f,-0.4f,0.0f);
	glVertex3f(0.3f,0.8f,0.0f);
	glEnd();

在这里插入图片描述
GL_LINE_LOOP

	glBegin(GL_LINE_LOOP);
	glVertex3f(0.0f,0.0f,0.0f);
	glVertex3f(0.7f,0.1f,0.0f);
	glVertex3f(0.2f,0.3f,0.0f);
	glVertex3f(0.9f,-0.4f,0.0f);
	glVertex3f(0.3f,0.8f,0.0f);
	glEnd();

在这里插入图片描述

直线的类型

直线具有两个类型:线宽与线型

线宽

可用glLineWidth指定线宽:
void glLineWidth(GLfloat width)与点的大小类似,glLineWidth函数采用一个参数来指定要画的线以象素计的近似宽度。

线型

可以用虚线或短划线模式创建直线,需要先调用:glEnable(GL_LINE_STIPPLE);
然后,建立用于画线的模式:
glLineStipple(GLint factor,GLushort pattern);
参数pattern是一个16位值,指定画线时所用的模式,逆向使用。每一位代表线段的一部分是开还是关。默认情况下,每一位对应一个象素。
参数factor充当倍数可以增加模式的宽度。

示例

添加glLineWidth(5)后
在这里插入图片描述
添加 glEnable(GL_LINE_STIPPLE); glLineStipple(0,12);
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值