大家好,欢迎来到IT知识分享网。
关键词:VTK ;可视化编程;光照的实现;视窗的交互
导读:这是上一篇光照的续篇。在上一篇文章的基础上做了一点修正。
1、修改了光强场的值,与光源的角度相关
2、更新了视窗交互功能,使得可以在视窗里直接选取点来进行查看
第一篇文章可以看VTK:实现光照效果,从一根线到一个面
1、修改光强场的值
for i in shadow_cell_ids:
shadow[i] = 10*abs(self.inner_product(normals[i],self.direction))
将shadow的值,修改为与内积值相关的函数。
update_shadow函数修改为:
def update_shadow(self):
shadow_cell_ids = []
for i in range(self.nlights):
point, ind = self.grid.ray_trace(self.source, self.lights[i])
if len(point) < 1:
pass
else:
a = self.mag(self.source, point[0])
end = ind[0]
for i in point:
if self.mag(self.source, i) < a:
a = self.mag(self.source, i)
end = ind
else:
end = ind[0]
shadow_cell_ids.append(end)
# 创建shadow cell属性
shadow = np.zeros((self.grid.n_cells,))
shadow[0]=-2
normals_mesh=self.grid.compute_normals(cell_normals=True, point_normals=False)
normals = normals_mesh['Normals']
for i in shadow_cell_ids:
shadow[i] = 10*abs(self.inner_product(normals[i],self.direction))
self.grid.cell_arrays['shadow'] = shadow
2、增加了视窗交互功能
def simulate(pointa, pointb):
mag = Lighting.mag(pointa, pointb)
source = [pointa[0],pointa[1],pointa[2]]
direction = [(pointb[0]-pointa[0])/mag,(pointb[1]-pointa[1])/mag,(pointb[2]-pointa[2])/mag]
light.update(source, angle, direction, seeds)
p.add_mesh(light.grid, scalars='shadow', show_edges=False,opacity=1,cmap='plasma')
p.add_line_widget(callback=simulate, use_vertices=True,bounds=light.grid.bounds)
增加了line_widget视窗。
并且将视窗大小设置成与加载的图形一样的外框。
3、结论
通过一些简单的视窗交互,可以增加很多方便性。下面是一个动图。另外,我们也稍微修改了一下颜色。大家可以很清晰地看到,与光源的角度不同,光照强度也不一样,显示的效果也不一样。
大家好,我是张麟博士。欢迎大家关注我的头条号。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/65289.html