首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在openGL中绘制可变宽度线(无glLineWidth)

在现代的OpenGL版本中,glLineWidth的宽度参数被限制为1.0,这意味着你不能使用它来绘制宽度大于1像素的线。然而,你可以通过其他方式来实现这个效果,例如使用三角形来模拟线。

以下是一个基本的步骤:

  1. 计算线的方向:你需要知道线的起点和终点,然后你可以通过终点减去起点来计算线的方向。
  2. 计算垂直向量:你可以通过将线的方向向量旋转90度来得到一个垂直于线的向量。这个向量的长度应该等于你想要的线的宽度的一半。
  3. 计算四个顶点:你可以通过将起点和终点分别加上和减去垂直向量来得到四个顶点。这四个顶点定义了一个矩形,这个矩形看起来就像一条宽线。
  4. 绘制矩形:你可以使用GL_TRIANGLE_STRIP或者GL_TRIANGLES来绘制这个矩形。你需要为每个顶点指定一个位置和一个颜色。

这种方法的一个缺点是,如果你需要绘制一系列连接的线段,那么在线段的连接处可能会出现不自然的效果。为了解决这个问题,你可能需要使用更复杂的算法来计算顶点的位置,例如使用三角形扇(triangle fan)来平滑地连接线段。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

OpenGL】十二、OpenGL 绘制线段 ( 绘制单条线段 | 绘制多条线段 | 依次连接的点组成的线 | 绘制圈 | 绘制彩色的线 )

) 六、绘制圈 GL_LINE_LOOP ( 奇数个点 ) 七、绘制彩色的线 八、相关资源 一、设置线宽度 ---- 线绘制宽度OpenGL 状态机的一个值 , 通过 glLineWidth...方法设置 ; 下面的代码将线宽度设置为 2 像素 ; // 设置线宽度 glLineWidth(2.0f); 二、绘制单条线段 GL_LINES ---- 绘制线时, 会将从 glBegin..., 每次都使用白色绘制 glColor4ub(255, 255, 255, 255); // 设置线宽度 glLineWidth(2.0f); // 绘制线时..., 每次都使用白色绘制 glColor4ub(255, 255, 255, 255); // 设置线宽度 glLineWidth(2.0f); // 绘制线时...绘制每个点之前 , 都设置当前的颜色值 , 即 OpenGL 状态机的当前颜色值 , 第一个点 glVertex3f(0.0f, 0.0f, -10.0f) , 绘制前设置的是 白色 , 第二个点

4.5K00

OpenGL】二十、OpenGL 矩阵变换 ( 矩阵缩放变换 | 矩阵旋转变换 | 矩阵平移变换 )

glLineWidth(5.0f); //glBegin(GL_POINTS); // 绘制点 //glBegin(GL_LINES); // 绘制线 //glBegin...(); // 将后缓冲区绘制到前台 SwapBuffers(dc); 运行效果 : 二、选中矩阵设置 ---- OpenGL】十、OpenGL 绘制点 ( 初始化 OpenGL 矩阵...矩阵的 ; 下面的代码是设置矩阵的代码 , 之后就开始了 OpenGL 模型渲染 , 也就是说模型渲染过程 , 全程都选中了模型矩阵 , 渲染时进行的矩阵操作 , 都是操作的该选中的 模型视图矩阵...glLineWidth(5.0f); //glBegin(GL_POINTS); // 绘制点 //glBegin(GL_LINES); // 绘制线 //glBegin...glLineWidth(5.0f); //glBegin(GL_POINTS); // 绘制点 //glBegin(GL_LINES); // 绘制线 //glBegin

3.6K00
  • OpenGL】十三、OpenGL 绘制三角形 ( 绘制单个三角形 | 三角形绘制顺序 | 绘制多个三角形 )

    , 三个点可以唯一确定一个面 , 四个点及多个点组成的多边形 , 不一定是一个面 ; 绘制三角形面时 , glBegin 方法传入 GL_TRIANGLES 参数 , 然后 glBegin 和..., 每次都使用白色绘制 glColor4ub(255, 255, 255, 255); // 设置线宽度 glLineWidth(2.0f); //glBegin...加入一个前提 , OpenGL绘制模型正面, 不绘制模型背面 ; 正面就是 摄像机对着的那一面 ; 渲染前 , 调用 glEnable(GL_CULL_FACE) 设置 , 即可设置 OpenGL..., 每次都使用白色绘制 glColor4ub(255, 255, 255, 255); // 设置线宽度 glLineWidth(2.0f); //glBegin..., 每次都使用白色绘制 glColor4ub(255, 255, 255, 255); // 设置线宽度 glLineWidth(2.0f); //glBegin

    2.6K00

    python+opengl显示三维模型小程序 原

    2.安装报错 本地址找合适的版本下载:https://www.lfd.uci.edu/~gohlke/pythonlibs/ ?...———————————————————————————————————————————— 暂未发现错误,以下未验证: 然后python import相关功能,运行后会出现错误 OpenGL.error.NullFunctionError...glutInit() #显示模式:GLUT_SINGLE缓冲直接显示|GLUT_RGBA采用RGB(A非alpha) glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA...#窗口位置及大小-生成 glutInitWindowPosition(0,0) glutInitWindowSize(400,400) glutCreateWindow(b"first") #调用函数绘制图像...glutDisplayFunc(drawFunc) glutIdleFunc(drawFunc) #主循环 glutMainLoop() image.png 就应该能够显示茶壶模型了 二、简单使用例子 1.点线抛物线

    4.2K20

    OpenGL】十七、OpenGL 绘制四边形 ( 绘制 GL_QUAD_STRIP 模式四边形 )

    文章目录 一、绘制 GL_QUAD_STRIP 四边形 二、绘制四边形点分析 三、相关资源 一、绘制 GL_QUAD_STRIP 四边形 ---- GL_QUAD_STRIP 绘制规则 : glBegin..., 每次都使用白色绘制 glColor4ub(255, 255, 255, 255); // 设置线宽度 glLineWidth(2.0f); //glBegin...(GL_POINTS); // 绘制点 //glBegin(GL_LINES); // 绘制线 //glBegin(GL_LINE_STRIP);// 绘制前后连接的点组成的线...//glBegin(GL_LINE_LOOP); // 绘制前后连接的点组成的线 , 并且收尾相连 //glBegin(GL_TRIANGLES); // 绘制多个三角形.../OpenGL ( GitHub 源码始终都会随着后续博客的进度更新覆盖 , 可能没有本博客的相关源码 , 推荐下载博客源码快照 ) ; 博客源码快照 : https://download.csdn.net

    1.3K00

    OpenGL】十四、OpenGL 绘制三角形 ( 绘制 GL_TRIANGLE_STRIP 三角形 | GL_TRIANGLE_STRIP 三角形绘制分析 )

    glBegin 方法设置 GL_TRIANGLE_STRIP 参数 , 然后 glBegin 和 glEnd 之间设置多个点进行三角形绘制 ; 设置了多个点 , 奇数点 与 偶数点 连接顺序不一样..., 每次都使用白色绘制 glColor4ub(255, 255, 255, 255); // 设置线宽度 glLineWidth(2.0f); //glBegin...(GL_POINTS); // 绘制点 //glBegin(GL_LINES); // 绘制线 //glBegin(GL_LINE_STRIP);// 绘制前后连接的点组成的线...//glBegin(GL_LINE_LOOP); // 绘制前后连接的点组成的线 , 并且收尾相连 // 绘制三角形面 glBegin(GL_TRIANGLE_STRIP);...GL_TRIANGLE_STRIP 三角形绘制分析 : 给代码的点标上索引号 ; 有 4 个点 , 绘制的三角形个数是 4-2=2 个 ; 奇数索引点 1 : 当前点索引是奇数 1 ,

    1.3K00

    OpenGL开发库的详细介绍zz

    如象素位置glRasterPos*()、线型宽度glLineWidth()、多边形绘制模式glPolygonMode(),读取象素glReadPixel()、复制象素glCopyPixel()等。...OpenGL提供了强大的但是为数不多的绘图命令,所有较复杂的绘图都必须从点。线、面开始。...跨平台的编程实例和演示,aux很大程度上已经被glut库取代。OpenGL的辅助库不能在所有的OpenGL平台上运行。 辅助库函数主要包括以下几类。...由于glut的窗口管理函数是不依赖于运行环境的,因此OpenGL的工具库可以X-Window, Windows NT, OS/2等系统下运行,特别适合于开发不需要复杂界面的OpenGL示例程序。...函数,并没有标准OpenGL实现,或者它们是用来扩展已存在的OpenGL函数的功能。

    1.9K30

    OpenGL API 简介

    光栅化、象素操作函数: 如象素位置 glRasterPos*()、线型宽度glLineWidth()、多边形绘制模式 glPolygonMode(),读取象素 glReadPixel()、复制象素 glCopyPixel...跨平台的编程实例和演示,aux 很大程度上已经被 glut 库取代。OpenGL 的辅助库不能在所有的 OpenGL 平台上运行。...由于 glut的窗口管理函数是不依赖于运行环境的,因此 OpenGL 的工具库可以 XWindow,Windows NT, OS/2 等系统下运行,特别适合于开发不需要复杂界面的 OpenGL 示例程序...这部分函数主要用于连接 OpenGL 和 Windows ,以弥补 OpenGL 文本方面的不足。Windows 专用库只能用于 Windows 环境。...8.其他扩展库 这些函数可能是新的 OpenGL 函数,并没有标准 OpenGL实现,或者它们是用来扩展已存在的 OpenGL 函数的功能。

    2.2K41

    OpenGL】二十一、OpenGL 矩阵压栈与出栈 ( 不同类型矩阵变换先后顺序 | 渲染前不设置单位阵 | 压栈出栈原理分析 | 代码示例 )

    文章目录 一、不同类型矩阵变换先后顺序 二、渲染前不设置单位阵 三、矩阵的压栈和出栈原理分析 四、矩阵的压栈和出栈代码示例 五、相关资源 一、不同类型矩阵变换先后顺序 ---- 对 OpenGL 的...固定管线的重要操作 ; 显卡栈 : 矩阵显卡中有一个栈 , 该显卡的栈可以存储 n 个矩阵 ; 栈顶矩阵 : 栈顶的矩阵是 模型视图 ( ModelView ) 矩阵 , 该矩阵的值是 单位阵..., 每次都使用白色绘制 glColor4ub(255, 255, 255, 255); // 设置当前点的大小 glPointSize(5.0f); // 设置线宽度...glLineWidth(5.0f); //glBegin(GL_POINTS); // 绘制点 //glBegin(GL_LINES); // 绘制线 //glBegin...(GL_LINE_STRIP);// 绘制前后连接的点组成的线 //glBegin(GL_LINE_LOOP); // 绘制前后连接的点组成的线 , 并且收尾相连 //glBegin

    1.9K00

    OPengl、DirectX、OPenCV、OpenCL

    本文链接:https://blog.csdn.net/daoer_sofu/article/details/48548659 ###1.Opengl   GLSL:Opengl着色器语言,GPU上执行的可编程渲染管线...OpenGL 1.0 版本,支持固定管线,而 OpenGL 2.0 版本不再支持固定管线,只支持可编程管线。OpenGL ES是Opengl子集,支持嵌入式设备。...版本(否则有一些异常问题出现)   OpenGL的gl库是核心库,glu是实用库,glut是实用工具库,gl是核心,glu是对gl的部分封装,glut是OpenGL的跨平台工具库   OPenGL...分为:核心模式(不支持以前版本)和兼容模式(支持以前版本的函数) 状态变量:   1.Opengl State Value,保存Opengl的相关参数设置,如glClearColor设置清除颜色保存在...glLineWidth)   GL_POLYGON_SMOOTH_HINT(多边形采样) glLineStipple线的点化处理(虚线等) 线的模糊处理,消除锯齿glEnable(GL_BLEND

    2.2K50

    Python 之 OpenGL程序环境

    同样可以使用glut来创建窗口,语法遵从Python,但是大体上的结构还是和c语言的glut库差不多。...OpenGL织梦之旅【第二章】第2节.实现动画这篇博文中,我用c语言,用OpenGL实现了一个显示时钟的程序。...Update函数给他们更新值的时候需要用global关键字来声明一下。 2.三角函数。记得import math,调用的时候也要用math.cos和math.sin。 3.变量的数据类型。...因为Python不需要事先声明变量类型,所以有些值赋值时需要注意,如果是浮点实数,但值需要暂时赋为一个整数时,需要在后面加上.0。如count=60.0 4.缩进的问题。...Python中代码段是用缩进来标示的。c语言的OpenGL,我习惯性地把glBegin(XXX)后定点的语句缩进一下,但是这个Python是会出现问题的。

    71620

    OpenGL】二十二、OpenGL 光照效果 ( 模型准备 | 光照设置 | 启用光照 | 启用光源 | 设置光源位置 | 设置光照参数 | 设置环境光 | 设置反射材质 | 设置法线 )

    , 每次都使用白色绘制 glColor4ub(255, 255, 255, 255); // 设置当前点的大小 glPointSize(5.0f); // 设置线宽度...glLineWidth(5.0f); //glBegin(GL_POINTS); // 绘制点 //glBegin(GL_LINES); // 绘制线 //glBegin...(GL_LINE_STRIP);// 绘制前后连接的点组成的线 //glBegin(GL_LINE_LOOP); // 绘制前后连接的点组成的线 , 并且收尾相连 //glBegin..., 每次都使用白色绘制 glColor4ub(255, 255, 255, 255); // 设置当前点的大小 glPointSize(5.0f); // 设置线宽度...glLineWidth(5.0f); //glBegin(GL_POINTS); // 绘制点 //glBegin(GL_LINES); // 绘制线 //glBegin

    55100

    万字长文详解如何用Python玩转OpenGL | CSDN 博文精选

    通常,为了适应不同宽高比的屏幕,设置视口时,会根据屏幕宽高比调整视景体(增加宽度或高度)。 五、视点 现实生活,人们看到的三维空间物体的样子取决于观察者站在什么角度去看。...库前缀表示该函数属于 OpenGL 哪一个开发库。从函数名后面还可以看出需要多少个参数以及参数的类型。I 代表 int 型,f 代表 float 型,d 代表 double 型,u 代表符号整型。...由于glut的窗口管理函数是不依赖于运行环境的,因此OpenGL的工具库可以X-Window、Windows NT、OS/2等系统下运行,特别适合于开发不需要复杂界面的OpenGL示例程序。...这部分函数主要用于连接OpenGL和Windows ,以弥补OpenGL文本方面的不足。Windows专用库只能用于Windows环境。...我们通常不会在绘制函数里面传送这些数据,而是绘制之前,将这些数据提前传送到GPU。绘制函数每次绘制时,只需要从GPU的缓存取出数据即可,极大地提高了效率。

    9K21

    绘图-Core Graphics

    简述 绘图的步骤:(drawRect函数) 1.获取绘图上下文 2.创建并设置路径 3.将路径添加到上下文 4.设置上下文状态 5.绘制路径 6.释放路径 使用Core Graphics...#2.kCGLineCapRound该属性值指定绘制圆形端点, 线条结尾处绘制一个直径为线条宽度的半圆 #3.kCGLineCapSquare该属性值指定绘制方形端点。...线条结尾处绘制半个边长为线条宽度的正方形。...CGContextFillRect 补充当前填充颜色的rect CGContextSetAlaha 透明度 CGContextTranslateCTM 改变画布位置 CGContextSetLineWidth 设置线宽度...CGPathApply 每个元素的图形路径,调用一个自定义应用功能。 CGPathMoveToPoint 开始一个可变的图形路径指定一个位置,一个新的子路径。

    1.6K30
    领券