问题标签 [off-screen]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - OpenGL 选择性离屏渲染到一个片段着色器中的 2 个纹理之一
我正在为旋转操纵器编写一个 glsl 着色器。我的目标是 Autodesk Maya 风格,xy 和 z 旋转各有 3 个轴,沿相机前轴旋转的一个轴在它们上等于 4;
用户可以通过直接在视口中选择特定轴来将其操作结果限制在特定轴上。
为了启用对象选择,我使用带有 2 个附加纹理的 custrom 帧缓冲区作为渲染目标 - 一个用于颜色,一个用于选择 ID。
问题是让这 4 个轴由 GL_LINES 模式绘制会给用户带来问题。如果线条画得又细又漂亮,用户应该非常精确地点击它们来激活特定的轴,因为他必须精确地选择具有正确 object_id 轴的像素。我想通过制作两张单独的图纸来缓解他的生活。用于颜色输出的细线和用于 objectid 输出纹理的 3 倍宽的线。
我是openGL的新手。现在我的天真逻辑是传递一个布尔统一,告诉片段着色器绘制颜色或对象ID缓冲区。
这是带有传递的 render_target 选择器的绘图命令
这是片段着色器:
我真的不喜欢我为此使用的逻辑,因为它看起来丑陋且未经优化。首先,因为着色器必须运行两次,并且它有一个相当复杂的几何着色器,我在其中生成圆。其次,因为我的片段着色器中有很多 if else 的东西,我被告知 gpu 不喜欢分支。
那么问题 1 编写这样的着色器的替代正确方法是什么?问题2更具技术性。
在这里,我提供了通过 theese 2 glDrawArrays 调用得到的屏幕截图。如您所见,我的颜色缓冲区中有黑色轮廓。问题是当 framgent 着色器执行 out_objectid 目标的渲染代码时,它仍然会向 out_color 写入一些脏的随机信息,如下图所示,所以我不得不用 out_color=vec4(0,0,0,0 )。至少它给出了干净的黑色。
所以问题2。我的错误在哪里?如何防止 objectid 块写入 out_color?谢谢更新:按照我的建议,我达到了这种效果。我无法描述 openGL 内部发生了什么。看起来它仍然写入 GL_DEPTH_COMPONENT 并进行了一些未定义的深度测试,从而导致了这种结果。我不希望在此绘制调用期间进行任何深度写入,因为操纵器始终位于顶部。也许你可以给我额外的建议。
绘图代码
qt5 - Qt:将 QML 窗口渲染到缓冲区
我的代码如下所示:
有人可以帮我如何让 Qt 将所有内容渲染到我提供的缓冲区吗?必须避免使用 OpenGL。我可以使用 QWebPage 来完成这项工作,但这对我来说似乎要困难得多......
c++ - FBO + 纹理:离屏生成几何数据的奇怪结果
我有 2+ 遍渲染,其中第一阶段生成矩形网格顶点的位置并将它们存储在 2D 浮动纹理中。着色器看起来是这样的:
顶点:
分段:
输出的 2D 浮动纹理调整为矩形顶点网格的尺寸,并将其绑定到 FBO 的颜色附件之一。因此,FBO 大小继承自纹理大小。
视口设置为与矩形网格的尺寸相同:
所以,现在视口和纹理都具有相同的大小和之后:
...输出顶点的位置应从 vec3(0.0, 0.0, 0.0) 到 vec3(1.0, 1.0, 0.0),因为纹理坐标从 0.0, 0.0 到 1.0, 1.0 不等。
奇怪的是,片段着色器的输出顶点位置的 x 和 y 值从非零开始,并且它们的最大值低于 1.0。对于 2 x 2 网格:左下角:vec3( 0.25, 0.25, 0.0 ) ( 0.5 / mesh_side = 0.5 / 2 = 0.25 ) 右上角:vec3( 0.75, 0.75, 0.0 )
对于 16 x 16 网格:左下角:vec3( 0.03125, 0.03125 , 0.0 ) ( 0.5 / mesh_side = 0.5 / 16 = 0.03125 ) 右上角:vec3( 0.96875, 0.96875, 0.0 )
将顶点着色器位置设置为从 vec3(-1.0, -1.0, 0.0) 到 vec3(1.0, 1.0, 0.0) 应该意味着我正在“绘制”整个视口。修改顶点着色器的位置会导致片段着色器的输出值不同。
上面的代码有什么问题,为什么绘图从 0.5 / rect_mesh_side_length 开始?
这是最初发布的问题。
有什么建议么?
javascript - WebGL Three.js 在使画布 Div 可见之前,不会加载某些内容
我有一个使用 3 个画布的 HTML5 应用程序,其中两个包含使用 Three.js 渲染的 WebGL 3D 场景
这三个画布位于一个自定义滑块内,该滑块当时仅以全窗口大小显示一个画布。我遇到的问题是,即使我在初始化期间加载了三个视图,在我滑动到不可见的 webgl 画布之前,还有一些东西没有加载,然后它被加载并显示。当我说加载时,我的意思是渲染中的某些东西,因为场景和所有方法从一开始就可以正常工作。
我检测到这一点是因为在第一次滑动到这个 div 时,它需要一些时间,并且在此期间控件会变得毛躁,用户真的不知道他是否正确单击,因为“幻灯片下一步”按钮的活动状态未激活直到这个未知的加载结束。幻灯片动画也被跳过可能是因为这个加载比滑动花费更多的时间。一旦显示一次,该行为就是正确的行为,它会迅速从一个视图滑到下一个视图。
即使画布不在屏幕上,渲染中是否有选项或浏览器也可以强制执行此加载?理想情况下仅在初始化期间,因为我不希望 GPU 渲染未显示的内容,只需预加载它们即可。
opengl-es - egl离屏渲染中的pbuffer vs fbo
我对 egl pbuffer 表面感到非常困惑。在我看来,pbuffer 表面是一个独立于平台的表面,就像 windows 表面或像素图表面一样。绘制到该表面的东西虽然不可见,但应该能够被读回。
这个问题的答案似乎证实了我的理解:
OpenGL ES(EGL) 与 eglCreatePbufferSurface 和 eglCreatePixmapSurface 的区别
但是,我的实验表明,除了使用 pbuffer 表面之外,我还需要创建一个 fbo 缓冲区。
这段代码似乎对我有用,它创建了一个 pbuffer 表面,然后创建了一个 fbo。
但是,如果我删除 fbo,并尝试直接绘制到 pbuffer,我会在调用 glClear() 函数后立即看到分段错误:
我的环境是带有英特尔图形/台面的 ubuntu 14。
你知道我为什么看到分段错误吗?(我检查了eglcontext,似乎创建成功了。)你能确认pbuffer表面需要fbo吗?
编辑:正如 Reto 所指出的,我的问题是因为缺少属性。
在设置了这些属性之后,我能够使事情与 opengl es 2 上下文一起工作。但是,我仍然对桌面 opengl 上下文有疑问。
在桌面opengl上下文中,我只能得到一个透明图像,而不是读回一个红色图像。这是我当前的代码:
opengl-es - egl pbuffer 离屏渲染只能回读背景
我想用 pbuffer 表面实现 egl 屏幕外渲染。但我能读回的只是背景颜色。我画的东西看不到。
例如,如果我用蓝色清除屏幕,通过 glReadPixel 读回的图像只是一个蓝色图像,没有其他东西。
我真的没有想法了
video - chromiumembedded mp4 请求已取消
我在屏幕外模式下使用 CEF 在我的应用程序中显示网页。到目前为止,我尝试过的所有网站和功能都运行良好,直到我尝试了视频。Youtube 和其他网站工作正常,但我创建了一个小页面来自动播放 MP4,但它不起作用。
我将 html 保存在本地磁盘上并将 Some.mp4 放在它旁边。当我在 Chrome 中打开文件时,它工作正常并且视频播放。
但是,通过 CEF 在我的应用程序中打开页面并没有做任何事情。我得到了视频的框架,没有别的。在 devtools 中进一步研究问题,我发现对 mp4 文件的请求正在被取消。
任何帮助,将不胜感激。
.net - Awesomium 1.7.5 webView.ExecuteJavascript 不起作用
我使用了离屏浏览器。然后,我创建webView
、订阅DocumentReady
并加载了 html。
我的方法DocumentReady
:
我的html:
而这个 javascript 没有用。我做错了什么?只有当 js 在 html 中时,我才能执行 js。我使用了 Awesomium 1.7.5。
请帮帮我 :(
opengl - 如何获得当前实现支持的正确颜色和/或可模板渲染的内部格式?
使用 OpenGL FBO 进行离屏渲染。创建 FBO 的主要代码片段如下:
上面的代码适用于某些图形硬件,但在其他硬件上则失败。而且 glCheckFramebufferStatus() 报告的错误是 GL_FRAMEBUFFER_UNSUPPORTED ,这意味着颜色或模板格式的内部格式是不可渲染的。
如何获得运行代码的图形硬件支持的正确颜色或可模板渲染的内部格式?或者,我怎样才能使我的代码在不同的 OpenGL 版本和硬件实现之间具有可移植性?
我的研究:
javascript - 如何在 Foundation 中创建垂直的画布外下拉菜单?
目前,Foundation 允许您创建从左侧或右侧水平滑入的画布外菜单。我很想知道如何创建一个可以从上到下垂直滑动的内容:向下移动包裹的内容。
我知道已经有独立的 javascript/ajax 解决方案。我真正在寻找的答案是尽可能地遵守现有的基础代码;使用相关的右/左菜单代码作为模板。
提前致谢 :)。