vtk-py z-Buffer可见算法
C++版例子:
https://lorensen.github.io/VTKExamples/site/Cxx/PolyData/SelectVisiblePoints/
优点:
- Simple to use
- Can be implemented easily in object or image sapce
- Can be executed quickly, even with many polygons
缺点
- Takes up a lot of memory
- Can't do transparent surfaces without additional code
示例用法:
自定义输入资源,左键旋转,右键显示当前可见点。
import vtk # 自定义动作
class MyInteractor(vtk.vtkInteractorStyleTrackballCamera):
def __init__(self, parent=None):
self.AddObserver("RightButtonPressEvent", self.RightButtonPressEvent) def SetVisibleFilter(self, vis):
self.VisibleFilter = vis def RightButtonPressEvent(self, obj, event):
self.VisibleFilter.Update() print("number of visible points: ", self.VisibleFilter.GetOutput().GetNumberOfPoints()) mapper = vtk.vtkPolyDataMapper()
mapper.SetInputData(self.VisibleFilter.GetOutput())
actor = vtk.vtkActor()
actor.SetMapper(mapper)
actor.GetProperty().SetPointSize(2)
actor.GetProperty().SetColor(1, 0, 0)
self.GetDefaultRenderer().AddActor(actor) self.OnRightButtonDown()
return def CreateScene(mesh):
renWin = vtk.vtkRenderWindow()
ren = vtk.vtkRenderer() # 设置背景颜色
ren.GradientBackgroundOn()
ren.SetBackground(0.1, 0.1, 0.1)
ren.SetBackground2(0.8, 0.8, 0.8) # 设置窗口大小
renWin.SetSize(600, 600)
renWin.AddRenderer(ren) iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin) # 添加自定义动作
style = MyInteractor()
style.SetDefaultRenderer(ren)
iren.SetInteractorStyle(style) mapper = vtk.vtkPolyDataMapper()
mapper.SetInputData(mesh)
actor = vtk.vtkLODActor()
actor.SetMapper(mapper)
ren.AddActor(actor) visPts = vtk.vtkSelectVisiblePoints()
visPts.SetInputData(mesh)
visPts.SetRenderer(ren)
style.SetVisibleFilter(visPts) renWin.Render()
iren.Initialize()
iren.Start() if __name__ == "__main__":
filename = "xxxx.obj"
reader = vtk.vtkOBJReader()
reader.SetFileName(filename)
reader.Update()
mesh = reader.GetOutput()
CreateScene(mesh)
vtk-py z-Buffer可见算法的更多相关文章
- Z-buffer算法
1.Z缓冲区(Z-Buffer)算法 1973年,犹他大学学生艾德·卡姆尔(Edwin Catmull)独 立开发出了能跟踪屏幕上每个像素深度的算法 Z-buffer Z-buffer让计算机生成复杂 ...
- 大整数算法[09] Comba乘法(原理)
★ 引子 原本打算一篇文章讲完,后来发现篇幅会很大,所以拆成两部分,先讲原理,再讲实现.实现的话相对复杂,要用到内联汇编,要考虑不同平台等等. 在大整数计算中,乘法是非常重要的,因为 ...
- TensorFlow利用A3C算法训练智能体玩CartPole游戏
本教程讲解如何使用深度强化学习训练一个可以在 CartPole 游戏中获胜的模型.研究人员使用 tf.keras.OpenAI 训练了一个使用「异步优势动作评价」(Asynchronous Advan ...
- DRL 教程 | 如何保持运动小车上的旗杆屹立不倒?TensorFlow利用A3C算法训练智能体玩CartPole游戏
本教程讲解如何使用深度强化学习训练一个可以在 CartPole 游戏中获胜的模型.研究人员使用 tf.keras.OpenAI 训练了一个使用「异步优势动作评价」(Asynchronous Advan ...
- 采样方法(二)MCMC相关算法介绍及代码实现
采样方法(二)MCMC相关算法介绍及代码实现 2017-12-30 15:32:14 Dark_Scope 阅读数 10509更多 分类专栏: 机器学习 版权声明:本文为博主原创文章,遵循CC 4 ...
- 浅析敏感词过滤算法(C++)
为了提高查找效率,这里将敏感词用树形结构存储,每个节点有一个map成员,其映射关系为一个string对应一个TreeNode. STL::map是按照operator<比较判断元素是否相同,以及 ...
- berkeley db 内存池 LRU算法
priority based lru in src/mp/mp_fget.c, __memp_fget(), 初始化 一个page buffer时, 设置其 priority: bhp->pri ...
- 【风马一族_Python】 实施kNN算法
一.在PyCharm 5.0.4(编写python程序的IDE) 编写kNN.py文件的代码 -------------------------- 1. kNN.py 运算符模块 --------- ...
- 算法导论学习-RED-BLACK TREE
1. 红黑树(RED-BLACK TREE)引言: ------------------------------------- 红黑树(RBT)可以说是binary-search tree的非严格的平 ...
- 测试不同格式下depth buffer的精度
这篇文章主要是参考MJP的“Attack of The Depth Buffer”,测试不同格式下depth buffer的精度. 测试的depth buffer包含两类: 一是非线性的depth b ...
随机推荐
- WebDriver测试web中遇到的弹出框或不确定的页面
我自己是用try catch解决的,不知道其他人的解决方法?如有,可以留言
- 新手编译开发OpenWrt入门教程(自定义固件、ubuntu学习)
转自: http://www.znck007.com/forum.php?mod=viewthread&tid=21571 由于openwrt编译教程资料很多,不同的cpu芯片只需要选择对 ...
- [转]eclipse 设置默认编码为Utf-8
参考:http://www.cnblogs.com/yimu/archive/2011/06/30/SXLYLOVE.html 需要设置的几处地方为: Window->Preferences-& ...
- 2015.5.21 VS2010中引用Word组件后提示 类型“Microsoft.Office.Interop.Word.ApplicationClass”未定义构造函数 解决方法
wordApp = new Word.ApplicationClass();//这句在VS2005中没问题,在2010中会报错. 解决方法:在资源管理器 “引用”项的"Microsoft.O ...
- RegisterUserFunc为测试对象添加新方法或重写已有方法
QTP中为了提高扩展性,提供了一个为测试对象添加一个新的自定义方法,或者重写测试对象已有的方法的函数RegisterUserFunc,在此给大家分享一下. RegisterUserFunc:为测试对象 ...
- Solaris10安装配置LDAP(iPlanet Directory Server )
Solaris10安装光盘自带了iPlanet Directory Server安装包,系统管理员可以利用iPlanet Directory Server在Solaris系统创建一个LDAP Serv ...
- equals()与hashCode()方法详解
java.lang.Object类中有两个非常重要的方法: 1 2 public boolean equals(Object obj) public int hashCode() Object类是类继 ...
- v8垃圾回收和js垃圾回收机制
垃圾回收器是一把十足的双刃剑.好处是简化程序的内存管理,内存管理无需程序员来操作,由此也减少了长时间运转的程序的内存泄漏.然而无法预期的停顿,影响了交互体验.本文从 V8 (node.js runti ...
- 简单好用的General开发框架
1.开篇概述 从2004年学习编程,2007年学习C#以来,做的多半都是跟数据库打交道的工作,所以也积累了很多数据库方面的知识,用过一些ORM框架,从了解掌握到自己实现,慢慢积累了很多代码,直到201 ...
- git clone Timed out 解决
因为不可抗拒的原因,在乌鲁木齐从 github 上面克隆项目时,会超时克隆不了. 使用 https 方式报错: $ git clone https://github.com/xxx.git Cloni ...