我遇到了一个令我难过的问题,我希望有人可以给我一些指示.
我正在使用一个使用自定义ViewGroup的应用程序(实际上是一个包含RelativeLayout的FrameLayout)来呈现事件日历.日历中的事件表示为视图,其大小根据事件的持续时间和包含视图的大小而定.
我遇到了调整包含FrameLayout大小时发生的问题.当前实现将删除表示事件的所有视图,并尝试添加新事件并根据FrameLayout的当前大小计算其大小.这项工作是通过View的onSizeChanged()方法触发的,该方法在FrameLayout中被覆盖.
调整视图大小时,将执行此代码并更新视图,但是,它们实际上都不会在屏幕上呈现... FrameLayout中包含的视图根本不可见.如果我在hierarchyviewer工具中加载视图,它们是视图树的一部分,并在概述中列出它们应该位于的位置,但它们不会显示.(请注意,视图在FrameLayout的初始渲染中是可见的......只有在调整大小后它们才会消失.)
看来调整大小期间的事件顺序如下:
onMeasure()
onMeasure()
onSizeChanged()
onLayout()
Run Code Online (Sandbox Code Playgroud)
重置视图后调用requestLayout()(在onSizeChanged()内)似乎没有任何效果.但是,如果在调用requestLayout()之前导致一些延迟,则视图将变为可见.我可以通过生成一个线程和休眠来创建这个延迟,或者通过创建一个虚拟按钮来简单地调用requestLayout()并在调整大小后自己调整它,或者甚至在onSizeChanged()的末尾放置这个丑陋的黑客:
post(new Runnable() {
public void run() {
requestLayout();
}
});
Run Code Online (Sandbox Code Playgroud)
当我使用这个hack时,包含的视图是可见的,事件的顺序如下:
onMeasure()
onMeasure()
onSizeChanged()
onLayout()
onMeasure()
onMeasure()
onLayout()
Run Code Online (Sandbox Code Playgroud)
因此,似乎强制第二个度量传递(在视图树被修改之后)使得包含的视图应该是可见的.为什么延迟对requestLayout()的调用对我来说这是一个谜.
谁能提供任何关于我做错的指示?
我意识到,如果不查看一些代码,这有点难以理解,因此我创建了一个小型示例应用程序,它展示了我的问题并使其在Github上可用:
https://github.com/MichaelSims/ViewGroupResizeTest
我上面提到的hack致力于一个单独的分支:
https://github.com/MichaelSims/ViewGroupResizeTest/tree/post-runnable-hack
如果我能提供任何其他信息,请提前通知我并提前致谢.
我正在使用amCharts(在幕后使用Raphaël)将一些图表渲染为SVG; 并且注意到如果SVG在最初不可见的div中渲染,则当div变为可见时,浏览器不会立即渲染图像.但是,如果我修改显示,例如通过调整浏览器大小或按Ctrl-鼠标滚轮缩放,则在重绘页面时,SVG图像将按预期呈现.
div可见性切换的确切方法是通过Bootstrap的选项卡式导航栏.
我承认对SVG不是很有经验 - 这是浏览器渲染或amCharts的SVG标记的问题,还是当我能告诉SVG的可见性发生变化时,我是否需要显式调用某种重绘方法?
这是一个说明问题的jsFiddle ; 如果您切换到第2部分(在Chrome,Firefox中),则图表最初不可见.调整显示大小会使其显示.
我看到经常推荐使用Moller和Trumbore的Fast Minimum Storage Ray/Triangle Intersection.
问题是,我不介意预先计算和存储任何数量的数据,只要它加速交叉点.
所以我的问题是,不关心记忆,做射线三角交叉的最快方法是什么?
编辑:我不会移动三角形,即它是一个静态场景.
我正在使用漂亮的fullCalendar jQuery插件.
我希望能够在每个事件中都有标题和详细信息,如下面的屏幕截图所示:

这里的细节是每个会话的参与者.(隐藏在细节上的溢出)
我有一个ruby哈希,我想用RABL渲染.哈希看起来像这样:
@my_hash = {
:c => {
:d => "e"
}
}
Run Code Online (Sandbox Code Playgroud)
我试图用一些RABL代码渲染它:
object @my_hash => :some_object
attributes :d
node(:c) { |n| n[:d] }
Run Code Online (Sandbox Code Playgroud)
但我收到了 {"c":null}
如何使用RABL渲染?
据我所知,标题中提到的所有技术都是看起来非常相似的渲染算法。所有基于光线的技术似乎都围绕着通过图像的每个像素投射光线来表示真实光线。这允许渲染非常逼真的图像。
\n事实上,我正在制作一个简单的程序,根据光线追踪在一个周末自行渲染此类图像。
\n现在的问题是我想以某种方式命名这个程序。我使用了术语 \xe2\x80\x9cray Tracer\xe2\x80\x9d,因为这是书中使用的术语。
\n然而,我听过很多不同的术语,我有兴趣知道光线追踪、光线匹配、光线投射、路径追踪和任何其他常见的光线相关算法之间到底有什么区别。我能够在网上找到这些技术的一些比较,但它们都只比较了其中的两种,并且一些定义重叠,所以我想问这个关于所有四种技术的问题。
\n执行摘要:如何在代码中指定OpenMP应该只为REAL内核使用线程,即不计算超线程的线程?
详细分析:多年来,我在空闲时间编写了一个仅限SW的开源渲染器(光栅化器/光线跟踪器).可以从这里获得GPL代码和Windows二进制文件:https: //www.thanassis.space/renderer.html 它在Windows,Linux,OS/X和BSD下编译并运行良好.
我上个月推出了一种光线追踪模式 - 生成的图片质量飙升.不幸的是,光线跟踪比光栅化要慢几个数量级.为了提高速度,就像我对光栅化器一样,我为光线跟踪器添加了OpenMP(和TBB)支持 - 以便轻松利用额外的CPU内核.光栅化和光线跟踪都很容易进行线程化(每个三角形工作 - 每像素工作).
在家里,凭借我的Core2Duo,第二核心帮助了所有模式 - 光栅化和光线跟踪模式的加速都在1.85x和1.9x之间.
问题:当然,我很想看到CPU的最高性能(我也玩"GPU",初步的CUDA端口),所以我想要一个坚实的基础进行比较.我把代码交给了我的一个好朋友,他可以使用16英寸,1500美元英特尔超级处理器的"野兽"机器.
他以"最重"模式运行它,光线跟踪模式......
......他的速度是我的Core2Duo的五分之一(!)
喘气 - 恐怖.刚刚发生了什么?
我们开始尝试不同的修改,补丁,......最终我们弄明白了.
通过使用OMP_NUM_THREADS环境变量,可以控制生成的OpenMP线程数.随着线程数从1增加到8,速度增加(接近线性增加).在我们越过8的那一刻,速度开始减弱,直到我的Core2Duo速度的五分之一,当使用所有16个核心时!
为什么8?
因为8是真实核心的数量.其他8个是...超线程的!
理论:现在,这对我来说是新闻 - 我看到超线程在其他算法中帮助很多(高达25%),所以这是出乎意料的.显然,即使每个超线程核心都有自己的寄存器(和SSE单元?),光线跟踪器也无法利用额外的处理能力.这引导我思考......
它可能不是缺乏处理能力 - 它是内存带宽.
光线跟踪器使用边界体积层次结构数据结构来加速光线三角形交叉.如果使用的芯超线程,则每个在一对"逻辑核"的,试图从在该数据结构不同的地方(即,在存储器中),以读 - 和CPU高速缓存(每对本地)完全捶打.至少,这是我的理论 - 任何建议都是最受欢迎的.
所以,问题是: OpenMP检测"核心"的数量并产生与之匹配的线程 - 也就是说,它包括计算中的超线程"核心".就我而言,这显然会导致灾难性的结果,速度方面.有谁知道如何使用OpenMP API(如果可能的话,可移植)只为REAL内核生成线程,而不是超线程的线程?
PS代码是开放的(GPL),可在上面的链接中找到,随时可以在您自己的机器上重现 - 我猜这将在所有超线程CPU中发生.
PPS原谅帖子的长度,我认为这是一种教育经历,想分享.
我的IE代码有一个恼人的渲染问题
CSS:
div {
display: inline-block;
margin-right:40px;
border: 1px solid;
}
Run Code Online (Sandbox Code Playgroud)
HTML:
<div>element</div>
<div>element</div>
<div>element</div>
<div>element</div>
<div>element</div>
Run Code Online (Sandbox Code Playgroud)
这是它在firefox/chrome中的外观(预期的显示)

这就是它在IE中的样子

如果IE支持display:inline-block,我用google搜索,显然它确实如此.
是否有一种功能或其他方式可以使用鼠标在Shiny中实现徒手绘制(即绘制随机形状/大小)?
具体来说,我希望能够renderPlot通过以各种(但非均匀)方式标记它来与图形"交互" . - 换句话说,我希望能够标记已经存在的图形.
我的功能缺点已经发现包括:
click_plot交互类型的设置兼容.如果我的<head></head>HTML页面部分中包含外部样式表,它们是否会在HTML之前加载并立即应用于渲染?让我介绍一下我的具体用例.
外部styles.css文件:
form label {
display: none;
}
Run Code Online (Sandbox Code Playgroud)
包含表格的页面:
<head>
<link rel="stylesheet" href="styles.css" type="text/css" />
</head>
<form action="process.php" method="post">
<label for="name">Name</label>
<input type="text" id="name" name="name" />
</form>
Run Code Online (Sandbox Code Playgroud)
我可以确信标签在页面加载时是不可见的(由于CSS下载没有闪烁)吗?
否则,我可以内联添加样式属性,但这可能是维护的噩梦.
rendering ×10
algorithm ×2
css ×2
html ×2
javascript ×2
android ×1
custom-view ×1
drawing ×1
fullcalendar ×1
geometry ×1
graphics ×1
jquery ×1
openmp ×1
plot ×1
r ×1
rabl ×1
raytracing ×1
renderer ×1
resize ×1
ruby ×1
shiny ×1
slowdown ×1
svg ×1
terminology ×1
viewgroup ×1