OpenGL学习日记-2015.3.13——多实例渲染

2023-11-05

    实例化(instancing)或者多实例渲染(instancd rendering)是一种连续执行多条相同渲染命令的方法。并且每个命令的所产生的渲染结果都会有轻微的差异。是一种非常有效的,实用少量api调用来渲染大量几何体的方法。OpenGL提供多种机制,允许着色器对不同渲染实例赋予不同的顶点属性。

几个简单的多实例渲染命令:

    1、void glDrawArraysInstanced( GLenum mode, GLint first, GLsizei count, GLsizei primCount )
            该函数是glDrawArrays()的多实例版本,参数完全等价,只是多了个primCount,该参数用于设置渲染实例个数。
    2、void glDrawElementsInstanced(GLenum mode, GLsizei count, GLenum type, void* indices, GLsizei primcount )
            该函数是glDrawElements()的多实例版本,同样只是多了个primCount参数而已,同样是用于设置渲染实例个数。
    3、void glDrawElementsInstancedBaseVertex( GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei instanceCount, GLuint baseVertex )
            该函数是glDrawElementsBaseVertex()的多实例版本,instanceCount表示渲染的实例数目。

多实例渲染顶点属性控制:

    1、void glVertexAttribDivisor( GLenum index, GLuint divisor )
            index对应于着色器中输入变量的location。divisor:表示顶点属性的更新频率,每隔多少个实例将重新设置实例的该属性,例如设置为1,那么每个实例的属性都不一样,设置为2则每两个实例相同,3则每三个实例改变属性。而该属性的属性数组大小将为(instance/divisor),instance为之前设置的渲染实例数(primCount),假设在多实例渲染中改变实例的颜色,设divisor为2,instance为100,颜色数组至少为100/2 = 50组rgba数据,才能保证每个实例都有自己的颜色值,不然将是黑漆漆的。最后如果divisor设置为0,将代表是非实例化,渲染的结果是,所有实例都是黑漆漆的,可能这个黑漆漆的结果也不是必然的,我猜想的是这时候着色器的输入变量vec4 color为默认的(0.0,0.0,0.0,1.0)并没有设置它的值,所以是黑色的。

顶点着色器分析:

#version 410
    //输入变量position,顶点坐标
  layout (location = 0) in vec4 position;
//normal顶点法线计算
  layout (location = 1) in vec3 normal;
//顶点颜色
  layout (location = 2) in vec4 color;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenGL学习日记-2015.3.13——多实例渲染 的相关文章

  • 延迟阴影映射 GLSL

    我目前正在实施延迟渲染管道 但我仍坚持使用阴影贴图 我已经成功地将其实施到前向管道中 我所做的步骤是 获取灯光视图中的位置 转换为光视图剪辑空间 使用 0 5 0 5 获取阴影纹理坐标 检查深度 编辑 使用新结果图像更新代码 float c
  • 如何在opengl中使用四元数绕屏幕中心旋转?

    我正在尝试实现轨迹球 轨迹球旋转 但我的中心有问题 回转 无论如何 我希望中心成为屏幕的中心 让我解释一下到目前为止我所做的事情 我创建了一个四元数 旋转轴 向量起点x向量结束 角度 向量起点 向量结束 从该四元数中 我创建了一个旋转矩阵
  • 具有交错缓冲区的 openGL glDrawElements

    到目前为止 我只使用了 glDrawArrays 并希望转向使用索引缓冲区和索引三角形 我正在绘制一个有点复杂的对象 其中包含纹理坐标 法线和顶点坐标 所有这些数据都收集到一个交错的顶点缓冲区中 并使用类似于以下的调用进行绘制 假设所有血清
  • 如何为 glDrawElements() 指定每个图元的颜色

    我想渲染一个索引几何体 所以 我有一堆顶点和关联的排序索引 我在用glDrawElements 渲染 2 个四边形 如下所示 现在 我知道我可以使用glColorPointer 用于指定每个顶点的颜色 我的问题是 我可以指定吗每个基元的颜色
  • OpenSceneGraph 将相机设置在初始位置

    我是第一次使用 OpenSceneGraph 我有点迷失 因为文档确实不太清楚 所以 我有这段代码加载一个带有房子的 obj 文件 并且我在我想要的 人 所在的地方淹没了一个小盒子 所以现在 我不想把那个盒子放在那里 而是想把相机放在那里
  • 为贝塞尔曲线中的每个点绘制切线

    我设法绘制了一条贝塞尔曲线 如下所示 glColor3f 0 1 0 glBegin GL LINE STRIP for int i 3 i lt nPt i 3 glColor3f 0 0 0 for float k 0 k lt NLI
  • 使用 OpenGL 渲染 QImage

    与我相关的其他问题 https stackoverflow com questions 20126354 render qimage from sooffscreenrenderer in qglwidget 我认为更核心的问题是 如何渲染
  • 开启TK onRenderFrame和onUpdateFrame的区别?

    我目前正在使用 OpenTK 框架和 OpenGL 用 C 编写 Jump n Run 游戏 Open TK 提供预设功能 例如GameWindow Run or GameWindow onUpdateFrame onRenderFrame
  • 如何使用OpenGL数组纹理?

    我正在尝试在OpenGL中使用精灵表 通过数组纹理实现它这就是我加载纹理的方式 QImage image image load C QtProjects project images spritesheet png png const un
  • 新显卡上的 nvoglv32.dll 中的绘制调用崩溃

    几天前 由于一些硬件更改 我设置了计算机并安装了新的 Windows 8 副本 其中 我将显卡从 Radeon HD 7870 更改为 Nvidia GTX 660 再次设置 Visual Studio 11 后 我从 Github 下载了
  • OpenGL 计算着色器调用

    我有一个与新计算着色器相关的问题 我目前正在研究粒子系统 我将所有粒子存储在着色器存储缓冲区中 以便在计算着色器中访问它们 然后我派遣一个一维工作组 define WORK GROUP SIZE 128 shaderManager gt u
  • OpenGL/GLSL - 纹理过滤的实现

    我想在 GLSL 着色器中自己实现纹理过滤 min 和 magfilter 因为我想使用 image load and store 而不是采样器 而且我想以特殊方式处理未定义的像素 并且我正在寻找一篇文章或者这样讨论过滤过程 我记得如何从我
  • Libgdx SpriteBatch.draw() 指定 4 个顶点

    我正在使用 libGdx 创建一个 2d 游戏 并尝试使用这个特殊的方法来绘制一个简单的 2d 纹理 分别指定 4 个顶点 draw Texture texture float spriteVertices int offset int l
  • 如何获取片段的当前颜色?

    我正在尝试了解 GLSL 中的着色器 并且找到了一些有用的资源和教程 但我一直在寻找一些应该是基本且微不足道的东西 我的片段着色器如何检索当前片段 你通过说设置最终颜色gl FragColor whatever 但显然这是一个仅输出值 如何
  • 在 OpenGL 中写入深度缓冲区而不进行深度测试(非着色器)

    在OpenGL中 是否可以绘制一系列不检查深度的多边形 因此 考虑到它们的z位置 它们将始终绘制在之前绘制的其他多边形的前面 但与此同时 他们仍然写入深度缓冲区 我想这可以使用着色器来实现 但现在我无法访问它 严格来说不是 从man pag
  • GCC、字符串化和内联 GLSL?

    我想使用宏字符串化来声明内联 GLSL 着色器字符串 define STRINGIFY A A const GLchar vert STRINGIFY version 120 n attribute vec2 position void m
  • 使用 CentOS 在 AWS GPU 实例上运行 OpenGL

    我需要使用 CentOS 在 AWS EC2 GPU 实例上执行一些离屏渲染程序 然而 虽然我发现 Ubuntu 很容易安装 但我无法让 CentOS 正常工作 目标是在 EC2 GPU 实例上运行一些基本的实用程序 测试工具 没有屏幕或
  • 如何为镶嵌矩形构建数据

    我无法弄清楚为镶嵌矩形构建数据所需的函数 目前 这就是我对非镶嵌矩形所做的事情 GLuint Waveindices 0 1 3 1 2 3 std vector
  • OpenGL 混合功能可消除图元重叠但保持整体不透明度

    我有一些几何体 其中有一个三带的原始集 基本体中的一些三角形重叠 因此当我向具有 alpha 值的几何体添加材质时 我会看到重叠 如预期 我想在不改变几何形状的情况下消除这种效果 我尝试使用不同的混合模式 glBlendFunc 但我无法让
  • Opengl:保持 Arcball 相机向上矢量与 y 轴对齐

    我本质上是在尝试模仿 Maya 中相机旋转的方式 Maya 中的轨迹球始终与 y 轴对齐 因此 无论向上向量指向何处 它仍然会沿 y 轴旋转或与向上向量对齐 我已经能够使用 C 和 Qt 在 OpenGL 中实现 arcball 但我不知道

随机推荐

  • 关于运行PR提示vcruntime140.dll无法继续执行代码的4个解决方法分享

    关于运行安 PR提示vcruntime140 dll无法继续执行代码的困扰 小编将为您提供详细的解决方法 在此之前 我们需要了解一下vcruntime140 dll文件的作用 vcruntime140 dll 是 Visual C Redi
  • 一个U盘制作多个系统镜像方法 ——适用于ARM架构UOS和KYLIN银河麒麟系统

    一个U盘制作多个系统镜像方法 适用于ARM架构UOS和KYLIN银河麒麟系统 一 背景 作为一个喜欢收集系统镜像的同学 加起来收集的ARM架构和X86架构系统镜像少则10个 每装一次系统都要刻录一次U盘 且等待刻录的时间也挺让人着急 为了尽
  • 使用EF Core 连接远程oracle 不需要安装oracle客户端方法

    连接字符串 Data Source DESCRIPTION ADDRESS PROTOCOL TCP HOST IP地址 PORT 1521 CONNECT DATA SERVICE NAME orcl Persist Security I
  • Jetpack-Compose 学习笔记(五)—— State 状态是个啥?又是新概念?

    系列第五篇 进入 Compose 中有关 State 状态的学习 前面几篇笔记讲了那么多内容 都是基于静态界面的展示来说的 即给我一个不变的数据 然后将它展示出来 如何在 Compose 中构建一个随数据而变化的动态界面呢 相信看完这篇就知
  • 【Vue】学习笔记-数据交互

    Vue 学习笔记 数据交互 概述 安装axios 通过axios向后台获取数据 数据交互的实现 常见错误总结 概述 基于Vue的web项目显示的所有服务端数据 都是通过Ajax获取的 官方推荐使用Axios作为Ajax库 所以本文主要讲解在
  • centos6.8升级内核

    centos6 8升级内核 1 查看内核版本命令 uname r 2 更新nss yum update nss 3 安装elrepo的yum源 升级内核需要使用elrepo的yum源 在安装yum源之前还需要我们导入elrepo的key r
  • Python使用腾讯云-短信服务发送手机短信

    目前 腾讯云短信 为客户提供 国内短信 国内语音 和 海外短信 三大服务 腾讯云短信SDK支持以下操作 国内短信 国内短信支持操作 指定模板单发短信 指定模板群发短信 拉取短信回执和短信回复状态 海外短信 海外短信支持操作 指定模板单发短信
  • 机器学习-分类模型-逻辑分类(2)

    逻辑分类简要概念 逻辑分类实际上是基于线性回归 sigmoid的一个分类器 二分类代码 import numpy as np import matplotlib pyplot as plt import sklearn linear mod
  • 一场时代的挑战与转变

    在我们的社会中 有一种现象引起了人们广泛的关注 那就是 年轻人存款 的问题 据最近的一项调查显示 大概五分之一的年轻人存款在一万元以内 10万元存款是一个 坎 存款超过10万就会超过53 7 的人 这样的数据 无疑引发了人们对于年轻人与存款
  • QT之动态库的创建、及测试代码编写

    1 新建文件和目录 在项目中选择library 右侧选择C library 如下图所示 2 按choose后 出现下面如图所示 添加库工程名字 3 选择共享库 并最好修改类名 头文件 源文件的名称 如下图所示 4 选择编译器 这里需要跟需要
  • 正则表达式之匹配字符串双引号

    字符串中可以出现转义的双引号 那么一般的正则表达式就不行了 譬如 无法正确匹配 word1 word2 word3 其结果是 word2 这里我用非获取匹配 则结果是 word2 word3 表示贪婪策略 非贪婪 pattern 非获取匹配
  • 最新Navicat Premium 16 激活中文版 适用于win和mac版

    Navicat Premium 16这是十分知名且专业的数据库开发管理工具 利用它不仅为用户提供完善的工具 可以轻松完美的帮助用户构建 管理和维护您的数据库 还与市面上主流的云数据库兼容 从而可以很好的满足不同用户们的各种使用需求 同时就算
  • element el-table 设置行高

  • Python从零开始学大概需要多久时间才能达到自主接单赚钱水平?

    我能也是学Python将近六七年的时间了 就来给大家讲讲Python吧 Python作为现在行业最受欢迎的编程语言 也是一门相对于其他的编程语言 Java C C 要更加简单 狗头保命 这是有目共睹的 那么因为Python的简单 所以现在学
  • router的使用

    路由和线路 路由router 表示当前项目全局的路由实例对象 跳转方法 push replace go back 线路route 表示当前路由页面的信息对象 获取动态路由的参数 params router跳转的两种方式 js跳转叫 编程式跳
  • 如何搭建VPN?

    搭建VPN的方法可以分为两个主要步骤 设置服务器和配置客户端 下面是一般的步骤 设置服务器 1 选择适合你需求的服务器 你可以租用云服务器 自行搭建服务器或者使用第三方VPN服务提供商 2 安装操作系统并进行基本配置 常用的操作系统有Lin
  • 如何安装黑苹果双系统

    title 黑苹果Win10双系统安装教程 小白也能秒掌握 装机装了一天 看了很多教程 踩了无数坑 终于成功了 写一篇教程防止后人踩坑吧 关于黑苹果 折腾过的人应该不陌生 自从苹果采用 Intel 的处理器 被解锁后可以安装在 Intel
  • 【前端兼容性】常见的浏览器兼容问题及解决方案

    常见浏览器兼容 前言 一 常见浏览器内核 1 Trident内核 2 Gecko内核 3 Blink内核 4 Webkit内核 5 Presto内核 已废弃 二 常见兼容性问题 1 不同浏览器的默认margin和padding不一致 2 图
  • PyQty5—第四课:GUI小程序界面设计(附完整代码)

    在第一节课中我们已经学会了PyQty5的安装 以及配置好了两个环境 如果还没有看到的小伙伴可以前去考古 点我 今天我们将会继续学习PyQty5的设计界面的认识 也会带领大家一步一步设计出一个小GUI作品 首先我们创建一个py文件 然后右击
  • OpenGL学习日记-2015.3.13——多实例渲染

    实例化 instancing 或者多实例渲染 instancd rendering 是一种连续执行多条相同渲染命令的方法 并且每个命令的所产生的渲染结果都会有轻微的差异 是一种非常有效的 实用少量api调用来渲染大量几何体的方法 OpenG