我正在将平面颜色和纹理绘制到 WebGL Canvas 中。我的颜色和纹理具有不同的 alpha 值,我希望它们能够正确混合。我想要透明背景(它们应该与 Canvas 下的 HTML 内容混合)。
在 WebGL 中,我使用
gl.clearColor(0, 0, 0, 0);
gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
gl.enable(gl.BLEND);
当 HTML 背景为黑色时,它可以正常工作。但是当我设置一个JPG图案作为背景时,我画了黑色三角形(alpha=1)和白色三角形(alpha=0.5),我可以在三角形相交的地方看到背景图案。这是正确的行为吗?
最佳答案
gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA) 表示生成的 alpha 是
A_final = A_s * A_s + (1 - A_s) * A_d
在您的示例中,绘制黑色三角形(alpha=1)后,帧缓冲区中绘制的像素将具有 alpha
1 * 1 + (1 - 1) * 0 == 1 + 0 == 1
所以它将是完全不透明的。接下来,绘制完白色三角形(alpha=.5)后,两个三角形相交处的像素将具有 alpha
.5 * .5 + (1 - .5) * 1 == .25 + .5 == .75
这意味着最终颜色将被视为部分透明,并且当它与页面合成时,页面背景将透出。
这在常规 OpenGL 中是一个不太常见的问题,因为内容通常是在空白背景下合成的。但是,当您绘制到 FBO 并且必须将结果与上下文中的其他内容进行合成时,它确实会出现。有几种方法可以解决这个问题。
一种方法是让您的 alpha 与 gl.ONE 混合,gl.ONE_MINUS_SRC_ALPHA 这样您就可以得到
A_final = A_s + (1 - A_s) * A_d
这就是您通常想要的 alpha 混合。但是,您希望您的颜色仍然与 gl.SRC_ALPHA、gl.ONE_MINUS_SRC_ALPHA 混合。您可以使用 gl.blendFuncSeparate而不是 gl.blendFunc 来分别设置颜色混合和 alpha 混合函数。在这种情况下,您会调用
gl.BlendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA);
另一种选择是利用具有预乘 alpha 的颜色(即 WebGL actually already assumes you are using ,例如,当从纹理中采样颜色时)。如果您绘制第二个三角形,其中 alpha 已经乘以颜色(因此半透明的白色三角形会将 gl_FragColor 设置为 vec4(.5, .5, .5, .5) ),那么就可以使用混合模式了
gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA)
它会根据您的需要对颜色和 alpha 进行操作。
第二个选项是您在 WebGL 示例中常见的选项,因为(如前所述)WebGL 已经假定您的颜色是预乘的(所以 vec4(1., 1., 1., .5) 超出色域,渲染输出未定义,驱动程序/GPU 可以输出它想要的任何疯狂颜色)。在常规 OpenGL 示例中更常见的是 gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA),这会导致一些混淆。
关于html - 在 WebGL 中与 HTML 背景混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11521035/
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这
所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择
我有一张背景图片,我想在其中添加一个文本框。我想弄清楚如何将标题放置在其顶部的正确位置。(我使用标题是因为我需要自动换行功能)。现在,我只能让文本显示在左上角,但我需要能够手动定位它的开始位置。require'RMagick'require'Pry'includeMagicktext="Loremipsumdolorsitamet"img=ImageList.new('template001.jpg')img 最佳答案 这是使用convert的ImageMagick命令行的答案。如果你想在Rmagick中使用这个方法,你必须自己移植
我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.
我正在学习http://ruby.railstutorial.org/chapters/static-pages上的RubyonRails教程并遇到以下错误StaticPagesHomepageshouldhavethecontent'SampleApp'Failure/Error:page.shouldhave_content('SampleApp')Capybara::ElementNotFound:Unabletofindxpath"/html"#(eval):2:in`text'#./spec/requests/static_pages_spec.rb:7:in`(root)'
我正在尝试将一个简单的CSV文件读入HTML表格以在浏览器中显示,但我遇到了麻烦。这就是我正在尝试的:Controller:defshow@csv=CSV.open("file.csv",:headers=>true)end查看:输出:NameStartDateEndDateQuantityPostalCode基本上我只获取标题,而不会读取和呈现CSV正文。 最佳答案 这最终成为最终解决方案:Controller:defshow#OpenaCSVfile,andthenreaditintoaCSV::Tableobjectforda
我想用Nokogiri解析HTML页面。页面的一部分有一个表,它没有使用任何特定的ID。是否可以提取如下内容:Today,3,455,34Today,1,1300,3664Today,10,100000,3444,Yesterday,3454,5656,3Yesterday,3545,1000,10Yesterday,3411,36223,15来自这个HTML:TodayYesterdayQntySizeLengthLengthSizeQnty345534345456563113003664354510001010100000344434113622315
考虑一下:现在这些情况:#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2#output:http://domain.com/?foo=1&bar=2我需要用其他字符串输出URL。我如何保证&符号不会被转义?由于我无法控制的原因,我无法发送&。求助!把我的头发拉到这里:\编辑:为了澄清,我实际上有一个像这样的数组:@images=[{:id=>"fooid",:url=>"http://