4.点与线

article/2025/3/1 7:00:00

点与线

常用方法

glBegin与glEnd

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

	glBegin(XXXXXX);xxxxxxxxxxxxxxglEnd();

其中,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);
在这里插入图片描述


http://chatgpt.dhexx.cn/article/2GSdMSyw.shtml

相关文章

图解24种经典k线图

相信不少国内的老股民心中都藏着一份经典的K线图图解&#xff0c;当中也许有6种、12种或24种能揭示行情方向转变的“K线脸谱”&#xff0c;借由它们的对行情的预知作用&#xff0c;股民度过一次又一次的熊牛更替。其实只要善于变通&#xff0c;它们同样适用于贵金属投资&#x…

直线绘制算法-中点画线法

之前讲过用数值积分法(DDA)进行直线逼近&#xff0c;通过向下取整获取目标像素点。计算过程中每一次都需要加0.5这一浮点数&#xff0c;浮点数运算效率相比整数运算效率低的多&#xff0c;因此需要对此进行改进。 一.中点画线法 直线方程式通过一般式表示&#xff1a;&#x…

3分钟看懂五日均线图!最实用的五日均线图解教程!

3分钟看懂五日均线图&#xff01;最实用的五日均线图解教程&#xff01; 均线并不是技术环境分析的全部内容&#xff0c;但无疑是技术环境中不可或缺的重要组成部分。均线代表的是市场平均成本运行趋势&#xff0c;其重要性在于反映现行价格得到支撑或受到压制的情况&#xff…

连连看(四)

Python3 实现QQ游戏连连看游戏辅助 连连看&#xff08;零&#xff09;—— 前记连连看&#xff08;一&#xff09;—— 你看&#xff0c;这是截图啊连连看&#xff08;二&#xff09;—— 哦吼&#xff0c;PIL CV2 Numpy 假图像识别构建矩阵连连看&#xff08;三&#xff09…

java基础2

1、mysql语句执行顺序 from on join where group by having select distinct union order by 我们看到on是在join和where前面的 如果两张表的数据量都比较大的话&#xff0c;那样就会占用很大的内存空间这显然是不合理的。所以&#xff0c;我们在进行表连接查询的时候一般都会…

机器学习基础知识点

机器学习基础知识点 文章目录 机器学习基础知识点监督学习回归线性回归岭回归lasso回归 分类k最近邻分类朴素贝叶斯分类logistic回归支持向量机 其他随机梯度下降线性判别分析决策树 无监督学习聚类k均值分层次聚类谱聚类高斯混合模型 降维PCA降维LLE降维MDS和t-SNE独立成分分析…

文本三剑客——awk 截取+过滤+统计

目录 一、awk是什么&#xff1f; 1、GNU是什么&#xff1f; 2、相关命令选项 3、awk有什么用 4、awk用在哪里 二、awk 命令的简要处理流程 1、分隔符 三、awk命令的内置变量 四、awk命令的完整语法 1、格式 2、 awk 中 gsub和tr命令的使用 1、gsub&#xff1a;替换 …

安卓APP——基础控件

目录 一、4种基础控件二、padding和margin三、制作一个登录界面 一、4种基础控件 Button 按键TextView 文本框EditText 输入框ImageView 图片&#xff0c;带边框的 <ImageButton android:layout_width"wrap_content"android:layout_height"wrap_content&qu…

现场编程

目录 组员职责分工github 的提交日志截图程序运行截图程序运行环境GUI界面基础功能实现运行视频 LCG算法过滤&#xff08;降权&#xff09;算法 算法思路红黑树附加功能一 背景实现附加功能二&#xff08;迭代中&#xff09;附加功能三 背景引言解决方法实现效果效果截图遇到的…

iOS之富文本总结

文章内容大纲 1、NSMutableAttributedString的基本使用2、NSMutableAttributedString的简易封装3、使用开源代码GOBMarkupPaser处理富文本4、UITextKit简介5、编程思想的相关思考 前言 富文本使用案例&#xff1a; 这里我自己也用了富文本实现了简单的却也是常用的例子&#xf…

【读书笔记《Android游戏编程之从零开始》】20.游戏开发基础(游戏数据存储)...

对于数据的存储&#xff0c;Android 提供了4种保存方式。 (1)SharedPreference 此方法适用于简单数据的保持&#xff0c;文如其名&#xff0c;属于配置性质的保存&#xff0c;不适合比较大的情况&#xff0c;默认存放在手机内存里 (2)FileInputStream/FileOutputStream 此方式比…

Demo06-GUI编程

GUI编程 1. 简介 GUI的核心技术&#xff1a;Swing AWT 2. AWT 2.1 Awt 介绍 awt 指抽象的窗口工具&#xff0c;包含了很多类和接口&#xff0c;用于GUI编程&#xff1a;图形用户界面编程元素&#xff1a;窗口&#xff0c;按钮&#xff0c;文本框java.awt [外链图片转存失…

【Java基础】语法基础

本文适合有编程基础或是需要Java语言复习的家人们食用~ 一、Java语言介绍 本篇文章使用的JDK版本是1.8&#xff08;即JDK 8&#xff09;Java语言是运行在JVM上的&#xff0c;有了JVM&#xff0c;Java语言得以在不同操作系统上运行垃圾回收机制&#xff1a;Java语言提供了一种…

编程算法集锦

编程算法集锦 一、分治法1.分治法介绍2.归并排序3.快速排序4.中值问题 二、贪心法1.贪心法2.最小生成树Kruskal算法3.Huffman编码4.单源点最短路径 三、回溯法1.回溯法-n皇后问题2.子集和数 四、动态规划1.数塔问题2.最长公共子序列3.求序列-2 11 -4 13 -5 -2的最大字段和4.求最…

富文本的使用 NSMutableAttributedString

文章内容大纲 1、NSMutableAttributedString的基本使用2、NSMutableAttributedString的简易封装3、使用开源代码GOBMarkupPaser处理富文本4、UITextKit简介5、编程思想的相关思考 前言 富文本使用案例&#xff1a; 这里我自己也用了富文本实现了简单的却也是常用的例子&#x…

iOS 开发 富文本

http://www.itnose.net/detail/6177538.html 文章内容大纲 1、NSMutableAttributedString的基本使用2、NSMutableAttributedString的简易封装3、使用开源代码GOBMarkupPaser处理富文本4、UITextKit简介5、编程思想的相关思考 前言 富文本使用案例&#xff1a; 这里我自己也用…

软工第三次作业-结对编程

结对项目-最长英语单词链 哈哈&#xff0c;这次记住了&#xff0c;来&#xff0c;初始化&#xff01; 项目内容这个作业属于哪个课程2023年北航敏捷软件工程社区这个作业的要求在哪里结对项目-最长英语单词链我在这个课程的目标是学习软件开发的原则、方法&#xff0c;并对敏捷…

Python基础编程习题

警察局抓了a&#xff0c;b&#xff0c;c&#xff0c;d四名偷窃嫌疑犯&#xff0c;其中只有一人是小偷。审问中 a说&#xff1a;“我不是小偷。” b说&#xff1a;“c是小偷。” c说&#xff1a;“小偷肯定是d。” d说&#xff1a;“c在冤枉人。” 现在已经知道四个人中三人说的…

四面体的表面积_如何求正四面体的体积和表面积?

当正四面体的棱长为a时&#xff0c;体积&#xff1a;√2a/12&#xff0c;表面积√3a^2。 解答过程如下&#xff1a; 正四面体是由四个全等的正三角形所组成的几何体。它有四个面、四个顶点、六条棱。每个二面角均为7032’&#xff0c;有四个三面角&#xff0c;每个三面角的面角…

空间四面体的面积、体积运算

基于C#窗体应用程序。通过添加控件&#xff08;Button、Label、TextBox&#xff09;来实现相应的功能。 目录 一、界面设计 二、编写代码 1、计算体积 2、计算面积 三、编译调试 四、实现效果 一、界面设计 二、编写代码 1、计算体积 double A1, A2, A3, A4, value; A…