OpenGLES - glBufferSubData 更新顶点缓存的一部分数据

在三维空间中移动物体,我的最直接的想法就是改变物体的坐标,这也是我弄懂一些三维空间中坐标关系后的唯一抓手,这也是之前经常导入模型确显示不了的根本问题,毕竟三维模型不由我控制,不过得实话实说,我真心控制不了,对 3dmax 真是一知半解,有机会一定要加强一下。

感觉频繁的创建、删除顶点缓存,是否太过浪费资源,耗费保贵的时间呢?所以,在官方网站一顿狂查乱猜,终于找到这么个有点靠谱的家伙来帮帮忙,大家研究后,发现它只能更新其中一部分顶点的坐标,而不能把整体进行偏移,这个可能真的不适合用于移动物体时,对整体坐标的一致偏移量增减了。

换个角度......

写博客就这点好,边写着,边像是有人在看一样,思路总会源源不断地涌现出来!

N久后,

是否可以移动坐标原点呢?

但坐标原点移动了,其它物体也有了偏 移量的增减,这也是行不通的。

简单地说,我能和GPU交互的,只是给这一堆数据,这堆数据看似杂乱,但都是从实际的三维坐标系中取出来的物体的顶点的实际坐标,且我要求3D美工把物体中心放在坐标原点,一是,初始不需要任何偏移;二是,导进来,我就钉死这个物体在屏幕中心,必何我能看到它,这也是N久以来“血”的教训的结果;

有些东西确实不需要强制这样或那样,但没有约定,就会出现多种可能,我没那么多时间去解决这些可能性,因为我的目标不在那里,所以我需要排除这些干挠因素,直奔主题,那么有些实践得来的方法,虽然在明眼人看来有些愚蠢,但对我来说,是解决问题的良药,至少是目前来说。

好啦,还是没有好办法,那我还是用同样,在明眼人看来是愚蠢的方法来做我需要完成的事情,也许以后会发现新大陆,但至少目前来说,我只能在这块在我看来肥沃的土地上种我的菜,打我的粮,就这么简单。

复杂的事情,简单处理,虽然稍显愚蠢,但目前的条件下能达到目的,就是明智之举!您说不是吗?!

如您确实看不过眼儿了,真心欢迎指教,谢谢了先。

Name

glBufferSubData — 更新缓存对象数据存储的一部分 update a subset of a buffer object's data store

C Specification

void glBufferSubData( GLenum target,
  GLintptr offset,
  GLsizeiptr size,
  const GLvoid * data);

 

Parameters

target

Specifies the target buffer object. The symbolic constant must be GL_ARRAY_BUFFER or GL_ELEMENT_ARRAY_BUFFER.

offset

Specifies the offset into the buffer object's data store where data replacement will begin, measured in bytes.

size

Specifies the size in bytes of the data store region being replaced.

data

Specifies a pointer to the new data that will be copied into the data store.

Description

glBufferSubData redefines some or all of the data store for the buffer object currently bound to target. Data starting at byte offset offset and
extending for size bytes is copied to the data store from the memory pointed to by data. An error is thrown if offset and size together
define a range beyond the bounds of the buffer object's data store.

Notes

When replacing the entire data store, consider using glBufferSubData rather than completely recreating the data store with glBufferData. This avoids the cost of reallocating the data store.

Consider using multiple buffer objects to avoid stalling the rendering pipeline during data store updates. If any rendering in the pipeline makes reference to data in the buffer object being updated by glBufferSubData, especially
from the specific region being updated, that rendering must drain from the pipeline before the data store can be updated.

Clients must align data elements consistent with the requirements of the client platform, with an additional base-level requirement that an offset within a buffer to a datum comprising N be a multiple of N.

Errors

GL_INVALID_ENUM is generated if target is not GL_ARRAY_BUFFER or GL_ELEMENT_ARRAY_BUFFER.

GL_INVALID_VALUE is generated if offset or size is negative, or if together they define
a region of memory that extends beyond the buffer object's allocated data store.

GL_INVALID_OPERATION is generated if the reserved buffer object name 0 is bound to target.

See Also

glBindBufferglBufferData

Copyright

Copyright  2005 Addison-Wesley. This material may be distributed subject to the terms and conditions set forth in the Open Publication License, v 1.0, 8 June 1999. http://opencontent.org/openpub/.

时间: 2024-09-20 04:38:32

OpenGLES - glBufferSubData 更新顶点缓存的一部分数据的相关文章

dedeCMS系统批量更新提示没有该栏目数据,可能缓存文件解决办法

错误提示 没有该栏目数据, 可能缓存文件(/data/cache/inc_catalog_base.inc)没有更新, 请检查是否有写入权限 一.系统搬家后或在系统还原后,重新更新栏目或文件的时候,有时会出现这样的错误提示没有该栏目数据 可能缓存文件 data/cache/inc_catalog_base.inc)没有更新 请检查是否有写入权限 这时大家都去改文件或文件夹的写入权限,一般会去改成777或755,但实际上这并不管用.其实解决方法很简单,只要做到以下三步,即可[此法很好用] 1. 把

JAVA之旅(十七)——StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder

JAVA之旅(十七)--StringBuffer的概述,存储,删除,获取,修改,反转,将缓存区的数据存储到数组中,StringBuilder 讲完String,我们来聊聊他的小兄弟 一.StringBuffer概述 关于StringBuffer这个对象,Buffer是什么意思?缓冲区的意思,String一旦初始化时不可以被改变的,而StringBuffer是可以的,这就是区别,特点: StringBuffer是一个容器 可以字节操作多个数据类型 最终会通过toString方法变成字符串 存储 S

如何强制更新图片缓存

/** 強制更新圖片緩存 * @param Array $files 要更新的圖片 * @param int $version 版本 */ function force_reload_file($files=array(), $version=0){ $html = ''; if(!isset($_COOKIE['force_reload_page_'.$version])){ // 判斷是否已更新過 setcookie('force_reload_page_'.$version, true,

怎样删除u盘缓存写入的数据

  一键u盘装系统对于大家来说可能并不陌生了,使用起来十分的简便.不过使用之后,要对u盘好好地保护起来.可是怎么样保护好u盘呢?这个问题很多人其实都会考虑到.现在的u盘功能上有了很大的改进,不过拔插功能使用多了仍然会对u盘带来一定的损坏.那么怎样巧妙地删除u盘缓存写入的数据以便更好地保护u盘呢?下面来看看具体的操作步骤吧. 1.鼠标右键单击电脑u盘图标,然后点击"属性"选项,具体操作如下图所示: 2.找到u盘属性窗口,在里面选中"硬件"标签,然后点击u盘磁盘驱动器,

如何设计和更新前端缓存

问题描述 如何设计和更新前端缓存 如何设计和更新前端缓存.................................... 解决方案 请参考:http://www.oschina.net/news/45424/xutils-1-8-4

sql临时表删除一部分数据

问题描述 sql临时表删除一部分数据 alter proc XinXiang_CRM_INF_Verification ( @InType varchar(50), @ISFOR varchar(50) ) as begin DECLARE @str varchar(2000),@NUM int create table #CRM_INF_Verification_Q_AgetID ( ID int, InType varchar(50), NUM varchar(50), Question v

jquery-Jquery的DataTable可以从缓存里面绑定数据吗?

问题描述 Jquery的DataTable可以从缓存里面绑定数据吗? that.WarrantyStatusEditCtrl = function($scope, $compile, $routeParams, $location, $log, apiService, columns, cacheService, commonUtils, DT_OPTION, WARRANTY_HEADER, $rootScope) { $scope.header = WARRANTY_HEADER.STATU

美国ICS-CERT称西门子的这次更新仅仅修复了一部分漏洞

日前,西门子公司宣布已经修复其工业控制系统中的若干漏洞,这些漏洞在一个月前被独立研究人员发现.但美国政府警告称,系统中仍然存在着问题.西门子公司一直因其对漏洞迟钝的反应而饱受批评,NSS实验室的研究者曾在西门子S7-1200微可编程逻辑控制器中发现若干漏洞.该公司被指控试图掩盖问题,尽管被给予价值数千英镑的免费研究.然而,在西门子网站的声明中,公司宣称其已经发布了一款软件更新来修复两个漏洞,其中一个会引起回放攻击,另一个会引起拒绝式服务攻击.由于S7-300和S7-400控制器没有受到拒绝式服务

更新表-sql 如何在建立一个存储过程时更新两张表的数据?

问题描述 sql 如何在建立一个存储过程时更新两张表的数据? create proc proc2 ( @OrderID int, @BookID varchar(20),--更新 orderInfo quantity:更新 orderSheet payment @BookStock int ) as update orderSheet set payment = b.newpay FROM orderInfo,orderSheet,(select (payment + price * @Book