OpenGL点精灵(Point Sprite)

2023-11-03

From:http://iiunknown.blogbus.com/logs/48250551.html

在很多粒子的demo中,看到把粒子显示成一个个小球,如果你以为那是用glutSolidShpere画出来的话,你就错了。上万个粒子,每个球体的几何,对于绘制系统的压力已经过大了。实际上这里是利用了一种类似billboard的方法,称为点精灵,就是POINT_SPRITE。

 

就像billboard一样,只要保证一个面片始终面向观察者,具体的形状已经不重要了。而点精灵实际上是一个点,绘制的时候也是使用的GL_POINTS。

 

使用方法大致如下:

 

glEnable(GL_POINT_SPRITE_ARB);

glTexEnvi(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, GL_TRUE);

glEnable(GL_VERTEX_PROGRAM_POINT_SIZE_NV);

glDepthMask(GL_TRUE);

glEnable(GL_DEPTH_TEST);

 

glColor3f(1, 1, 1);

_drawPoints(); // 绘制在这里

 

glUseProgram(0);

glDisable(GL_POINT_SPRITE_ARB);

 

另外由于实际上绘制的是POINTS,它并不会根据距离的远近而变化大小,实际造成的结果就是越远看显得越大,就像下图一样。


(此图来自于:http://www.cnblogs.com/atlantis13579/archive/2010/12/09/1901658.html


为了解决这个问题,还要调用

float quadratic[] = { 1.0f, 0.0f, 0.01f };

glPointParameterfvARB( GL_POINT_DISTANCE_ATTENUATION_ARB, quadratic );

glPointParameterfARB( GL_POINT_FADE_THRESHOLD_SIZE_ARB, 60.0f );

glPointParameterfARB( GL_POINT_SIZE_MIN_ARB, 13.0f );

glPointParameterfARB( GL_POINT_SIZE_MAX_ARB, 15.f );

 

让尺寸随着距离进行衰减,具体的使用方法可以按关键字搜索,我也仍旧在摸索中

最后提示一句:做大量粒子绘制的时候一定要使用vbo,可以大大提高绘制效率。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenGL点精灵(Point Sprite) 的相关文章

  • 可以用相机测量到物体的距离吗?

    可以用手机摄像头测量到物体的距离吗 我的意思是 在我的应用程序中 我启动相机 将相机面对物体 比如说房子 然后按下按钮 它会计算距离并在屏幕上显示我 如果可能的话我可以在哪里找到一些教程或相关信息 我承认这个问题已经得到了充分的回答 明显需
  • 找到多边形的视觉中心

    从这个问题跟进 gCentroid 将质心向点集中移动 https stackoverflow com questions 49736565 gcentroid shifting centroid towards concentration
  • JavaFX 两个圆之间的距离并不断更新属性

    为了进行作业 我创建了 2 个可拖动的圆圈 并使用 javaFX 将它们连接起来 我需要添加计算两个圆之间的距离 或线的长度 的文本 并且当我拖动圆时该文本需要不断更新 但这就是我陷入困境的地方 Circle circle1 new Cir
  • Android:如何在连续移动时使用 GPS 查找总距离?

    这是我的代码 请告诉我 y 它无法计算距离 在此代码中res是一个长变量 应该存储所经过的总距离 该代码应该在纬度和经度发生变化时立即根据 GPS 计算距离 String serviceString Context LOCATION SER
  • scipy 成对距离和 X.X+Y.Y - X.Y^t 之间的差异

    假设我们的数据为 d1 np random uniform low 0 high 2 size 3 2 d2 np random uniform low 3 high 5 size 3 2 X np vstack d1 d2 X array
  • 如何加快 Pandas 中最近的搜索速度(也许通过矢量化代码)

    我有两个数据框 每个都包含位置 X Y 和该点的值 对于第一个数据框中的每个点 我想找到第二个数据框中最接近的点 然后找到差异 我的代码可以工作 但它使用 for 循环 速度很慢 关于如何加快速度有什么建议吗 我知道为了性能而摆脱 pand
  • 如何在Android智能手机中使用加速度传感器找到位移距离?

    我有一部 Android 智能手机 其中包含加速器传感器 指南针传感器和陀螺仪传感器 我想使用这个传感器计算位移距离 我已经尝试过基本方法 即 final velocity initial velocity acceleration tim
  • 计算两个 3D 点 numpy 数组之间最小距离的快速方法

    我想知道是否有一种快速方法来计算 3D numpy 数组的所有点之间的欧几里得距离 A N 3 到第二个 3D numpy 数组的所有点 B M 3 然后我应该得到一个数组C这将是 N M 与数组点的所有距离A到数组的点B然后使用np mi
  • Shapely 中两个几何体最近点的坐标

    有一条折线 其顶点坐标列表 x1 y1 x2 y2 x3 y3 和一个点 x y 在身材匀称中 geometry1 distance geometry2 返回两个几何图形之间的最短距离 gt gt gt from shapely geome
  • 计算两个点阵列之间的成对角度矩阵

    我有两个点向量 x and y 成形 n p and m p 分别 举个例子 x np array 0 0 16341 0 98656 0 05937 0 25205 0 96589 0 05937 0 25205 0 96589 0 11
  • Spearman 与底座 R 的尺距距离

    给定两个排列 v1 1 4 3 1 5 2 v2 1 2 3 4 5 1 如何计算以 R 为基数的 Spearman 尺尺距离 所有元素的总位移 可灵活用于任意两种尺寸排列n 例如 对于这两个向量 如下 1被感动了2地点来自v1 to v2
  • R中的快速并行二分距离计算

    使用并行 Rcpp 后端计算 R 中二分距离最快的方法是什么 parallelDist是一个很棒的包 带有 cpp 后端并支持多线程 但不支持二分距离计算 据我所知 Using parallelDist 用于二分距离矩阵计算 除了 m1 m
  • 计算小距离用什么公式

    Hy 我需要计算 2 个 GPS 点之间的距离 我读了这个问题计算地理邻近度的公式 https stackoverflow com questions 2096385 formulas to calculate geo proximity但
  • 球体/地球仪上的点与多边形之间的最短大圆距离

    我有一组由地理 WGS84 坐标指定的多边形 它们位于球体上 我有一个由纬度 经度对指定的点 我想 有效地 找到点和多边形之间的最小大圆距离 我当前的堆栈包括 fiona shapely gdal 和 proj StackOverflow
  • 如何在 JavaScript 中查找到已知位置的距离

    在浏览器中使用 JavaScript 如何确定从我当前位置到另一个我有纬度和经度的位置的距离 如果您的代码在浏览器中运行 您可以使用 HTML5 地理定位 API window navigator geolocation getCurren
  • 如何计算列表中点的距离?

    我有两组列表 A 和 O 它们都有来自 x y z 坐标的点 我想计算A点和B点之间的距离 我使用了for循环 但它只给了我一个结果 它应该从结果中给出 8 个数字 我很感激有人能看一下 这是我的项目的最后一步 Ax 232 34 233
  • 计算iphone中两点之间的距离

    我正在创建一个应用程序 要求用户输入两个地方 邮政编码 我的应用程序将计算这两点之间的行驶距离并输出结果 用户可以选择添加航路点 我想我必须使用谷歌地图 API 并获取包含结果的 xml 文件 然后解析该 xml 文件 任何人都可以帮助我
  • 如何在android中获取两个位置之间的直线距离?

    首先仔细阅读问题 I need 直线距离 不步行 开车 or etc 看看下面给出的这张图片 谷歌为我们提供了驾车和驾车的距离 但我不想要它 我想要直线距离两个位置之间 纬度 经度 显示为红线 NOTE 我不想在谷歌地图上画红线 只是想要距
  • 2 个纬度/经度点(坐标)列表之间的地理/地理空间距离

    我有 2 个列表 list1 list2 以及各个地点的纬度 经度 一份清单 list2 的地点名称list1不具有 我也想要 list1 中每个点的近似位置 所以我想指出一点list1 尝试寻找最近的点list2并采取该地点 我对其中的每
  • 如何找到一个向量中与另一个向量最接近的值?

    我有两个大小相等的向量 例如 A 2 29 2 56 2 77 2 90 2 05 and B 2 34 2 62 2 67 2 44 2 52 我有兴趣在两个相同大小的向量 A 和 B 中找到最接近的值 几乎相等 即在 A 中的所有元素中

随机推荐

  • 需求:vue用流程图展示数据

    问题描述 如标题所示 粗略的写了一版 没有细化 UI 红框的地方本来想用canvas自己写 但是找资料的时候发现了一个插件LeaderLine 非常符合要求 然后发现了一篇文章vue横向树级组件 流程图 组件递归 套用了一下 然后按照自己的
  • 将json-bigint处理为数值分区数组的字段全部自动转为字符串

    json bigint虽然能帮我们处理好id 但 他的模式 显然不是直接可以用的 我们如果要到业务逻辑单独处理 那就太麻烦了 对系统也非常不友好 我们可以在vue项目中 src目录下创建一个utils 下面创建一个conversionLon
  • 线程共享&&独有

    线程共享 进程代码段 进程的公有数据 利用这些共享数据 线程很容易的实现相互之间的通讯 进程打开的文件描述符 信号的处理器 进程的当前目录和进程用户ID与进程组ID 线程独有 线程ID 桟 错误返回码 error 线程优先级
  • IDEA配置仓库提交简易说明

    1 码云注册并创建仓库 2 IDEA顶部菜单VCS 如果没有 删除代码文件夹里面的 git文件 3 Create git 4 选择需要提交的代码文件夹 5 IDEA顶部菜单Git 6 Commit 提交暂存 选择需要提交的代码文件 选择Co
  • SQLi LABS Less-18

    第十八关请求方式为 GET请求 注入点为 User Agent 注入方式为 错误注入 第一步 判断注入方式 先看源码 后台代码对 特殊字符进行了过滤 常规的注入方式行不通 只有通过代码审计来判断注入方式 登录成功后 有一个保存用户主机信息的
  • 文本三剑客之sed

    sed简介 sed 是Linux中提供的一个外部命令 他是一个行 流 编辑器 非交互式的对文件内容进项增删改查操作 那它和文本编辑器有什么区别呢 区别是 文本编辑器 编辑对象是文件 行编辑器 编辑对象是文件中的行 也就是前者一次处理一个文本
  • Anaconda使用conda连接网络时,出现网络错误CondaHTTPError(包括Anaconda安装与入门)

    今天准备安一个Anaconda来管理我的Python环境 在官网下载支持Python3 7的版本 直接安装即可 使用Anaconda Navigator可以方便地创建环境和管理各种外部包 conda version 查看版本 是否安装成功
  • element-ui 中标签el-select选中无反应问题

    el select标签 如果外部还嵌套循环 点击选中标签无反应 删除也不好使 原因由于层次太多 导致render函数没有自动更新 在el select标签内加入 change forceUpdate 强制刷新视图即可
  • 怎样删除Github中的项目

    我们在GitHub上创建项目的时候 如果想要删除当前项目 怎样进行操作呢 下面就简单介绍一下怎样去删除GitHub中的项目 1 选择要删除的项目 2 进入项目中的setting 设置 中 3 一直下拉 看到有红色字体出现 进入Danger
  • 都2022年了,出去面试连分布式锁的源码你都不会画?

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 目录 一 写在前面 二 Redisson实现Redis分布式锁的底层原理 1 加锁机制 2 锁互斥机制 3 watch dog自动延期机制 4 可重入加锁机制 5 锁
  • Linux基础笔记17

    磁盘基础概念知识 计算机主要存储媒介之一 由一个或多个铝制 玻璃的碟片组成 碟片外覆盖具有铁磁性材料 磁盘内部由磁道 柱面 扇区 磁头等关键部位组成 Linux 系统中硬件设备文件放在 dev 下 不同磁盘接口 系统识别的设备名称不一样 I
  • MySQL查询操作

    MySQL查询操作 1 建表 CREATE TABLE 学生 学号 char 7 NOT NULL PRIMARY KEY 姓名 char 8 NOT NULL 性别 char 2 年龄 tinyint 入学时间 datetime 专业 v
  • 【科普贴】MOS管开关原理及应用详解

    前言 MOS管通常被用作电源开关使用 通常使用PMOS做为上管 将NMOS做为下管使用 当然也有反过来使用的场景 但使用较少 此贴为科普贴 就不做累述了 MOS原理介绍 1 NMOS管介绍 电流方向从D S 漏极流向源极 导通条件为VGS有
  • i.mx287学习笔记4-使用QT控制LED

    上面是我的微信和QQ群 欢迎新朋友的加入 目录 1 安装QT CREATOR 2 硬件连接 3 驱动源码 4 编译驱动 测试驱动 5 创建QT界面 6 编译QT 7 运行 8 源码 1 安装QT CREATOR sudo apt get i
  • AVPlayer 播放的时候有黑色边

    iOS视频开发中 使用系统的AVPlayer的几率非常高 然 在部分Plus机型会出现黑边的情况 平时不容易发现 但你的视频若是白色色调 就比较明显 解决方法 修改AVPlayerLayer的属性 使playerLayer光栅化 即位图化
  • python需要学多长时间

    随着人工智能和机器学习的持续升温 Python 目前是首选的AI语言 在数据科学和AI中占据主导地位 而且随着互联网的发展 Python的应用越来越广泛 学习Python的人也越来越多 主要是因为Python门槛低 上手很快 而且通用性和实
  • npm ERR! 400/403 Bad Request - PUT https://registry.npmjs.org/xxx- “xxx“ is invalid for new packages

    npm ERR 403 403 Forbidden PUT https registry npmjs org df ui You do not have permission to publish df ui Are you logged
  • TypeError: 'builtin_function_or_method' object is not subscriptable的一种错误情况

    TypeError builtin function or method object is not subscriptable的一种错误情况 初学python 今天在做练习时为一个Error苦恼了很久 最终找到了解决方法 错误代码块如下
  • Contrastive Self-Supervised Learning 的对比学习框架和设计新方法

    翻译自 建议阅读原文 https towardsdatascience com a framework for contrastive self supervised learning and designing a new approac
  • OpenGL点精灵(Point Sprite)

    From http iiunknown blogbus com logs 48250551 html 在很多粒子的demo中 看到把粒子显示成一个个小球 如果你以为那是用glutSolidShpere画出来的话 你就错了 上万个粒子 每个球