Webgl使用视口+剪刀更新区域

2024-02-28

我一直在尝试创建一个多视口 webgl 应用程序。

对于每个视图,我使用视口+剪刀将所有内容渲染得非常好。 但现在我想改进渲染并只渲染更新的视图,因此跳过过度绘制。 我做了一个小演示来展示这个想法:http://kile.stravaganza.org/lab/js/scissor/ http://kile.stravaganza.org/lab/js/scissor/

据我了解剪刀,假设它只会渲染当前的剪刀框并保持画布的其余部分不变。但无论我尝试什么,它似乎都会不断清除每一帧上的整个画布:(

这是渲染代码(最后一个视图应该只渲染一次并将其保留在每一帧上):

function drawScene()
{
    gl.clearColor(1.0, 0.0, 0.0, 0.0);
    gl.scissor(0,0,200,200);
    gl.viewport(0,0,200,200);
    gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
    drawFigures();

    gl.clearColor(0.0, 1.0, 0.0, 0.0);
    gl.scissor(200,0,200,200);
    gl.viewport(200,0,200,200);
    gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
    drawFigures();

    gl.clearColor(0.0, 0.0, 1.0, 0.0);
    gl.scissor(200,200,200,200);
    gl.viewport(200,200,200,200);
    gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
    drawFigures();

    // Render just once   
    if (first)
    {
        gl.clearColor(1.0, 1.0, 0.0, 0.0);
        gl.scissor(0,200,200,200);
        gl.viewport(0,200,200,200);
        gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
        drawFigures();
        first=false;
    }
}

知道我怎样才能达到这种效果吗?

预先非常感谢


您可以使用preserveDrawingBuffer属性:

gl = canvas.getContext("experimental-webgl", { preserveDrawingBuffer: true });

不建议在生产中使用它。这WebGL 规范 http://www.khronos.org/registry/webgl/specs/latest/ states:

虽然有时需要保留绘图缓冲区,但它可以 在某些平台上导致显着的性能损失。每当 可能此标志应保持为 false 并使用其他技术。 同步绘图缓冲区访问等技术(例如,调用 readPixels 或 toDataURL 在渲染到的同一函数中 绘图缓冲区)可用于获取绘图缓冲区的内容。 如果作者需要在一系列上渲染到同一个绘图缓冲区 调用时,可以使用帧缓冲区对象。

这个问题还包含有关的相关信息preserveDrawingBuffer: WebGL何时决定更新显示? https://stackoverflow.com/questions/9491417/when-webgl-decide-to-update-the-display

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

Webgl使用视口+剪刀更新区域 的相关文章

随机推荐

  • gevent 和 posgres:异步连接失败

    我正在使用 gevent 处理基于 Django 的 Web 系统上的 API I O 我已经使用以下方法进行了猴子补丁 import gevent monkey gevent monkey patch socket 我已经使用以下方法修补
  • Web、应用程序和移动编程之间的主要技术区别是什么?

    我想知道Web ASP PHP Ruby等 之间的主要技术区别是什么 应用程序 C C NET Java 和移动 J2ME Objective C 编程 这是最难的 如果有人学会了其中之一 他可以轻松地切换到其他之一吗 首先 从一个技术的从
  • Android 共享图片不起作用

    我正在尝试使用以下代码共享应用程序的屏幕截图 View content findViewById R id layoutHome content setDrawingCacheEnabled true Bitmap bitmap conte
  • Plotly Dash 中心 dcc.输入文本字段

    我在弄清楚居中需要哪些样式参数时遇到了很多困难dash core components Input我的页面中间的文本字段 import dash import dash core components as dcc import dash
  • NSNumberFormatter 不允许输入十进制数字

    我对 NSNumberFormatter 的使用感到非常困惑 这应该非常简单 但我无法让它工作 我想设置一个 NSTextField 以允许输入带小数点或不带小数点的十进制数字 这是我认为可行的 NSNumberFormatter form
  • 从现有 Makefile 创建 CMakeLists 文件

    我想用cmake为 C 项目生成构建文件 我有一个现有的Makefile 我在生成这个时遇到问题Makefile使用标准cmake句法 如何包含标准 C 库 例如 lstdc lpthread lboost thread mt in the
  • Django 使用 locals() [重复]

    这个问题在这里已经有答案了 我是 Django Web 开发的初学者 我注意到locals 使用函数代替我习惯看到的上下文字典 据我在网上看到的locals 非常有用 那么是否有任何特殊情况 这不是真的 最好使用context dictio
  • Heroku Django,模板不存在错误

    因此 经过几个深夜的工作 我终于将我的应用程序部署到 Heroku 上 但现在出现了不同的问题 彻夜难眠 模板不存在 错误 我使用的是 Django 1 11 所以我的设置如下 INSTALLED APPS django contrib a
  • 有类似 Buffer.Last Position Of 的东西吗?查找缓冲区中最后一次出现的字符?

    我有一个类型的缓冲区ReadOnlySequence
  • 即席只读查询是否存储在 SQL Server 事务日志中?

    在 SQL Server 2008 中 数据库恢复模型配置为full 是诸如 从表名中选择 col1 col2 col3 记录到事务日志文件中 换句话说 我可以使用事务日志备份确定特定一天在数据库上运行了哪些查询吗 不会 事务日志根本不记录
  • RethinkDB:​​Javascript - 如何删除嵌套对象

    我在尝试从表中删除嵌套对象而不意外删除过程中的所有数据时遇到了相当大的困难 现在发生了三次 感谢上帝我制作了副本 我的对象 value1 thing value2 thing value3 thing roles 1 name Dave i
  • Kotlin - 如何在子类中返回“自身类型”? (不带扩展功能)

    让我们来学习这些课程 class A fun foo A this class B A fun bar 现在我希望 Kotlin 能够检测到我何时调用foo on B 然后给我输入的结果B 这样我就可以写 B foo bar 对于 kotl
  • javascript setInterval 的内存泄漏

    这两种说法有什么区别吗 setInterval animateImage 1000 or setInterval animateImage 1000 浏览器 js 引擎是否会以任何不同的方式解释第二个语句 从而可能导致内存泄漏或性能问题 情
  • 由于不同的病毒扫描程序导致 Microsoft Visual Studio 速度变慢

    与 Microsoft Visual Studio 一起使用的最慢的病毒扫描程序是什么 由于我的病毒检查器 我刚刚让 Microsoft Visual Studio 再次 变慢 数百个项目 其中一些包含超过 100 个 C 文件 因此任何减
  • 如何通过按 Enter 退出 while 循环?

    I am trying to get a while loop to break by pressing the Enter key on a keyboard My code is package javaapplication4 imp
  • Android Espresso 执行长按而不是单击

    onData anything inAdapterView withId R id ScheduleOrderListViewListView atPosition 0 perform click 50 的时间执行长触摸 有没有好的解决方法
  • 用于收集对象的 Rails 模型类方法

    我在编写用于集合的类方法时遇到问题ActiveRecord对象 在过去的几个小时里 我已经两次遇到这个问题 这似乎是一个简单的问题 所以我知道我错过了一些东西 但我无法在其他地方找到答案 Example class Order lt Act
  • 无法在设备上调试应用程序

    我的所有设备都工作正常 这个特定的设备是三星的 但没有 当我插入手机时 手机会显示在 DDMS 设备列表中 但是 没有任何应用程序 进程出现 这是唯一发生这种情况的设备 是的 USB 调试已启用 是的 debuggable 在清单中设置为
  • css嵌入无滚动条

    好吧 我有一个带有 ajax 按钮的页面 当您点击 ajax 按钮时 它会将一个嵌入对象扔到 data div 中 一切正常 我的问题是嵌入正在创建一个我不想要的滚动条 关于如何防止滚动条有什么想法吗 我已经尝试过在任何地方都可以抛出 ov
  • Webgl使用视口+剪刀更新区域

    我一直在尝试创建一个多视口 webgl 应用程序 对于每个视图 我使用视口 剪刀将所有内容渲染得非常好 但现在我想改进渲染并只渲染更新的视图 因此跳过过度绘制 我做了一个小演示来展示这个想法 http kile stravaganza or