使用caxis的修补程序性能?

9次(最近30天)
亚当
亚当 18 2014年十一月
编辑: 亚当2014年11月19日
有没有什么办法可以改善补丁对象相对于改变CAXIS设置或人物的colourmap的表现?
我具有由许多补丁对象(例如60个对象,每个具有〜1300面)类似于下面的设置,与图像重叠。补丁都用单一颜色为[R G B],不被索引到当前colourmap所以他们不相对于所述colourmap或其缩放改变定义。
(注:这只是我的测试,不是我的真实数据创建了一个例子形象,但它应该给这个想法 - 红色八角形表示补丁这里)
我希望能够更改该图像的基础图像或颜色映射。我有一个这样做的设置,它只是替换现有图像对象的“CData”作为前者,这意味着覆盖的面片对象理论上根本不需要更改。
然而,我有不同的基础图像被缩放不同,所以我有改变图像后使用CAXIS指令。这是更新的图像(当我删除C轴指令关闭图像更新瞬间)烦人缓慢。如果我没有补丁然后覆盖图像的更新几乎立刻所以很显然,它们会减慢下来的补丁。
那么,是不是有一些我遗漏的补丁设置导致它们对颜色图的变化(通过caxis或整个颜色图的变化)做出反应,还是我对此无能为力?我希望我使用真彩色设置补丁颜色,这意味着它们不受caxis类型变化的影响,也不需要重新绘制。

3条评论

亚光破折号
亚光破折号 18 2014年十一月
我认为整个场景都会被重新绘制,不管哪个对象需要更新(至少它以前是这样工作的)。如果你的补丁不需要更新,也许你可以渲染一次,然后保存到一个图像(硬拷贝功能),然后把它们作为一个图像对象而不是补丁打印出来?(因此,您的场景现在由一个覆盖在cdata缩放图像上的透明度的真彩色图像组成)当复杂的静态对象减慢我的渲染速度时,我会这样做。不确定它是否适合你的实际需要。。。。
亚光破折号
亚光破折号 18 2014年十一月
另一个想法是:如果慢度实际上与更新轴的cdata有关,那么也许可以将面片对象绘制在覆盖在包含图像的轴上的单独轴上?(必要时与连接轴连接)
亚当
亚当 18 2014年十一月
感谢您的建议。我将有一个发挥作用的这个主意的明天。之前,所以没有想到,作为一个选项,我从来没有用在彼此的顶部轴。
第一个选项是一个我曾经考虑过,但是补丁确实需要响应其他的变化定期更新所以这可能不适合。这仅仅是改变基本层具体地涉及他们不需要进行反应。
当自己真正重新计算补丁我用的DrawNow指令,使得它们出现一个另一类则是对他们采取所有出现在几秒钟​​内可以接受的,就像一个进度条,但是当他们刚刚堵塞渲染,当我改变CAXIS他们之后保留在那里,我只是有一个等待那些看起来几秒钟,就像什么也没有发生。

登入评论。

接受的答案

道格赫尔
道格赫尔 18 2014年十一月
编辑:道格赫尔 18 2014年十一月
Mike Garrity之前给我看了一个关于patch的例子:
每秒>> 2.4814帧
>>每秒20.6223帧
CLA
nfaces=5000;
nsides=6;
将为nframes = 20;
ang=linspace(0,2*pi,nsides+1)
x=repmat(cos(ang)‘,[1个面]);
Y = repmat(SIN(ANG)”,[1个nfaces]);
Z = repmat([1:nfaces],[(nsides + 1)1]);
XOFF = repmat(randn(1,nfaces),[nsides + 1,1]);
YOFF = repmat(randn(1,nfaces),[nsides + 1,1]);
H =补丁(X + XOFF,Y + YOFF,Z,Z);
h.FaceColor ='扁平';
h.EdgeColor ='没有';
xlim([-8 8])
ylim([ - 8 8])
抽搐
对于I = 1:将为nframes
XOFF = repmat(randn(1,nfaces),[nsides + 1,1])/ 10;
YOFF = repmat(randn(1,nfaces),[nsides + 1,1])/ 10;
h.Vertices = h.Vertices + [XOFF(:),YOFF(:),零(nfaces *(nsides + 1),1)];
的DrawNow;
结束
DISP([num2str(将为nframes / TOC)'每秒帧数'])
F = h.Faces;
如果尺寸(F,2)> 3
f2=[];
f2=[f2;f(:,1),f(:,2),f(:,3];
f2=[f2;f(:,1),f(:,3),f(:,4];
f2=[f2;f(:,1),f(:,4),f(:,5];
F2 = [F2;F(:,1),F(:,5),F(:,6)];
结束
h、 面=f2;
xlim([-8 8])
ylim([ - 8 8])
抽搐
对于I = 1:将为nframes
XOFF = repmat(randn(1,nfaces),[nsides + 1,1])/ 10;
YOFF = repmat(randn(1,nfaces),[nsides + 1,1])/ 10;
h.Vertices = h.Vertices + [XOFF(:),YOFF(:),零(nfaces *(nsides + 1),1)];
的DrawNow;
结束
DISP([num2str(将为nframes / TOC)'每秒帧数'])
通过简化补丁成三角形,事情进展得更快。

5条评论

显示 2条旧评论
亚当
亚当 18 2014年十一月
谢谢你的回复和评论。明天早上我会在工作中消化这些内容,因为我还在家里使用Matlab R2014a(现在是晚上!!)。
亚当
亚当 2014年11月19日
我决定离开这个现在,但是这绝对是非常有趣和博客文章更广泛的受众的值得。
我上面贴的例子,而不是我的真实数据更简单,实际上是一系列的,我想,以填补高峰下降到零线,是我的补丁进来的信号。
所以如果我发现三角化信号数据不太困难的话,我可以在家里尝试一下你的技术,但是这有点超出了我现在需要解决的问题,所以我可以解决这个问题,唯一真正重要的是我使用了一个极端的参数化。
再次感谢您的输入。

登入评论。

更多的答案(1)

凯利·卡尼
凯利·卡尼 18 2014年十一月
这可能帮助,如果可以合并多个补丁对象到一个多面的补丁。我发现,这通常加速渲染极大。如果脸上有顶点,我只是垫的不同号码的开出重复的最后一个:
XP = [0 0 1 1 0;1 1.5 2 1 1]';
YP = [0 1 1 0 0;0 1 0 0 0]';
马力=补丁(XP,YP,数k);
设置(hp,'FaceColor','扁平','FaceVertexCData',[1 0 0;1 1 0]);

3条评论

亚当
亚当 18 2014年十一月
谢谢。明天我要玩玩这个。当然,渲染速度越慢,我拥有的面片越多,尽管我目前不知道顶点的数量如何影响速度(例如,一个面片有80000个顶点,而不是每个面片有60个1300个顶点)。
凯利·卡尼
凯利·卡尼 18 2014年十一月
这个数字不应该是一个问题...我已经使用了类似的技术,以可视化的三角形网格超过10万的顶点(200,000面)。需要一两秒钟开始呈现,但它并没有停滞不前像将人物,当你有一吨的图形对象。
亚当
亚当 2014年11月19日
不幸的是在我的情况,这似乎是没有的速度比使用每一个形状补丁。也许是我的补丁的性质是这样的,把它们转换成面是没有任何帮助。我原以为尽管这图形对象的数量少得多会有所帮助。

登入评论。

登入回答这个问题。