- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个增强现实应用程序,它应该渲染一个 3D 模型。到目前为止,一切都很好。我将 Vuforia 用于 AR,将 libgdx 用于图形,一切都在 Android 上,工作起来很有魅力......
问题是,我需要创建一个“类似窗口”的效果。我真的需要让模型看起来像一扇 window ,你可以透过 window 看到它后面。这意味着我有某种墙壁对象,上面有一个洞(一扇 window )。通过这个洞,可以看到墙后的另一个3D模型。
问题是,我还需要渲染视频背景。而这个背景也是在墙后。我不能在渲染墙壁时只打开混合,因为那样会破坏视频图像。
所以我需要让墙和它后面的所有东西都透明,但不是视频背景。
仅使用 OpenGL 是否有可能实现这样的奇迹?
我一直在考虑前端到端和后端到前端渲染的某种组合:先渲染背景,然后渲染墙壁,但只将它混合到 alpha channel 中(使视频仅在像素上可见未被墙覆盖),然后渲染实际内容,但仅将其混合到可见像素(不在墙后面),然后再次“渲染”墙,但这一次使其后面的所有内容都可见。这样的东西行得通吗?
最佳答案
I can't just turn of blending when rendering the wall
是什么让你这么想的? OpenGL 不是场景图。这是一个绘图 API,一切都按照您的调用顺序发生。
所以操作顺序是
在关闭混合的情况下绘制视频背景。
视频和墙壁之间的对象(根据需要打开或关闭混合)
绘制墙壁,启用混合或 alpha 测试,以便您可以创建窗口。
Is such marvel even possible using only OpenGL?
理解 OpenGL 的关键在于,您不会想到用它来设置 3D 世界场景,而是用它来绘制 3D 世界的 2D 图片(因为 OpenGL 实际上就是这样做的)。最后,OpenGL 只是更智能的画笔,可以在平面 Canvas 上绘制。想一想您如何在纸上作画,如何遮盖不同的部分。然后使用 OpenGL 完成。
好的,现在我明白你想要实现什么了。墙并不是真正可见的,而是一个依赖于深度的 mask 。很容易实现:使用 alpha 测试 而不是混合来在深度缓冲区中生成窗口。或者,您可以不进行 alpha 测试,而只绘制 4 个四边形,它们之间形成一个窗口。
诀窍在于,您只将其绘制到深度缓冲区中,而不是颜色缓冲区中。
glDepthMask(1);
glColorMask(0,0,0,0);
draw_wall();
在这种情况下混合将不起作用,因为即使是完全透明的 fragment 也会在深度缓冲区中结束。因此阿尔法测试。在固定函数 OpenGL glEnable(GL_ALPHA_TEST)
和 glAlphaFunc(…)
中。但是,在 OpenGL-ES2 上,您必须通过着色器来实现它。
假设你有一个单 channel 纹理,在 fragment 着色器中做
float opacity = texture(sampler, uv).r;
if( opacity < threshold ) discard;
关于android - OpenGL : Create a "transparent window-like object",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22975801/
我想要一个具有透明背景的图表,因此 PNG 似乎是一个不错的选择。但是当我设置透明背景时,轴标签的质量急剧下降。我该如何解决?请参阅以下代码。就目前而言,图表具有透明背景,正如我所希望的,但文本质量很
我正在尝试制作一个透明的谷歌图表,但它似乎不起作用。它只是绘制纯白色背景。 有没有人在透明度方面取得成功? 难道我做错了什么? 提前致谢! 谷歌图表信息:solid fill 测试网址: Google
我有一个 subview 已添加到我的 UIView 中。这个想法是 subview 是一个带有 uibuttons 的悬停面板。 subview 的 alpha 值为 0.2,因为用户需要能够看到其
如何在不影响表单控件的情况下更改表单的 alphablend? 德尔福XE7 最佳答案 此问题的一个解决方案是使用多设备应用程序(如果无法使用VCL)。 如果您需要保留透明的TForm,只需更改属性T
嗨,我正在用 mvc4 做我的元素。在我的布局页面中,我有一个透明的 div(#wrapper),最重要的是我有许多非透明的 div。为此,我使用了以下 css 和 html 代码。
我有黑色和透明的简单图像,想将其更改为白色和透明。我想保持透明度(80% 黑色和 20% 透明 >> 80% 白色和 20% 透明,30% 黑色和......)。我尝试了填充桶,但没有成功。 据我所知
我有一组位图。它们在某种程度上都是透明的,我事先不知道哪些部分是透明的。我想从排除透明部分但在正方形中的原始位图中创建一个新位图。我认为这张图片解释了这一点: 我知道如何从现有位图中创建位图,但我不知
我整个下午都在尝试第一次使用 expo-cli 运行 expo build:ios,这样我就可以将我的第一个 expo 应用程序放到 TestFlight 上,但我反复收到错误消息:“你的应用程序图标
我想知道为什么在 Mac OS X 上的滚动条有时是白色透明的,有时是黑色透明的,如果您在常规设置中将“显示滚动条”设置为“滚动时”。所有浏览器(Safari、Chrome、Firefox、Opera
这个问题在这里已经有了答案: Difference between "-webkit-text-fill-color" and "color"? (2 个答案) 关闭 4 年前。
我想为我的应用程序开发一个配置文件屏幕。我正在使用 AppCompactActivity,因为我需要我的应用程序也支持非 Lollipop 设备。我只需要为应用程序中的这个特定 Activity 屏幕
第一个场景: h1{ text-align: center; } td{ width: 100px; height: 100px; border-right: 1px solid gray; bord
我在 Google Earth Engine 中工作,正在尝试创建一种无颜色/完全透明的颜色(无边框和无填充)。下面是一行代码,其中第一种颜色应该是透明的“颜色”。基本上我希望我的最小值根本不显示在
我在HTML5 Canvas 上玩createRadialGradient()。除非我要实现(半)透明性,否则它的工作原理就像一种魅力。 我做了这个jsFiddle以使事情更清晰:http://jsf
我需要从 www.webwoods.co.uk/lsss/index.html(黑色和红色的星星)的网站图标中删除白色背景 有没有办法用常用的图形编辑器(Adobe CC、Paint 等)来做到这一点
我需要使用透明度(背景每隔几秒钟更改一次)找到图像(检测游戏中的文本)。我的脚本: #include HotKeySet("s", "Start") $x = 0 $y = 0 Func Start
环境:WebGL,Chrome。将透明png用作模型的纹理时,我有以下行为: 图片A-树将建筑物隐藏在其后,我看到了世界框纹理。它还隐藏自身(后分支不可见) 同时-图片B-正常运行,窗口是透明的,我看
我正在尝试将水印渲染到视频中。一旦水印的图像文件 (.png) 包含透明度,图像就不再渲染到视频中。如果我将该图像转换为 .jpg 然后再转换回 .png,效果很好。如果我创建一个没有透明度的新 pn
我正在使用tilemill来生成mbtile。有人知道如何使mbtiles背景透明吗? 最佳答案 您的默认样式将具有类似的规则 Map { background-color:#f00; } 这为
我有一个奇怪的问题,我在尝试在 WebGL 中进行混合时无法弄清楚。黑色呈现为完全透明,所有带有灰色阴影的内容也呈现为半透明。我已经将它设置为使用 alpha channel 作为透明度的来源,并且在
我是一名优秀的程序员,十分优秀!