Polygonalize Implicit Surface隐式曲面的多边形化

这几天遇到implicit surface (isosurface), marching cube这几个名称,复习了一下,顺便做了下面几个例子来增加理解: Alt text

第一行: sphere, sphere被grid切了, 注意保证grid够大.
第二行: box, box with rounding.
第三行: union(box, sphere), difference(box, sphere).
生成mesh之后,然后放到windows 10's 3D Builder中得到的渲染结果。

more ...

迭代啊别闷大招


QtLayoutDemo


南海桂城土地交易统计

地图(我感兴趣的区域):
Alt text

2016/2/18
TD2016(NH)WG0003 佛山市南海区桂城街道天佑二路7、9、11、13号地段
佛山市南海威通有限公司 楼面价 3965元/平方米(=4275万/面积3850.6/容积率2.8)
旧区 旁边没有大公园 虽然靠近桂城地铁站 但是因为南海大道交通很塞车
教育: 桂城中心小学

2016/1/07
TD2015(NH)WG021 南海区桂城街道广东金融高新技术服务区B区03-02-08地块
创新蓝绿投资(北京)有限公司 楼面价 11539元/平方米(=166877万/面积48207.7/容积率3.0)
城镇住宅用地兼容批发零售用地

2016/1/22
TD2015 ...

more ...

Maya中的fileDialog2命令

今天在使用maya的fileDialog2 cmd去建一个file dialog, 要求能选中打开多个files, 于是需要使用:
fileDialog2 -fileMode 4 ….;
这里-fileMode=4 表示支持多个文件选择.
问题是执行这个file dialog的时候,右下角两个按钮分别是Save, Cancel. 而我需要是Open, Cancel.

debug时候发现原来是对同一个地方分别两次操作,而产生冲突.
setAcceptMode(QFileDialog::AcceptOpen); // 影响open or save 这个按钮上的字.
setLebelText(QFileDialog::Accept, "Save"); 也是影响用一个地方,但是这个"Save"跟上面的AcceptOpen中默认使用的"Open"就冲突了. 这个函数允许随意改这个角色上的字.

解决方法是使用-okc "Open" flag来明确设置这个accept button上的text.

References: Qt4.8 (or Qt5.6), QFileDialog.

more ...

门锁系统的接口设计

想象一个场景:
你要开发一个门锁, 设计好了锁的很多细节: 安全级别, 大小, 外观, 跟什么门相配, 使用细节等等, 但你只是一个设计公司, 这没有关系,
因为在细节都决定好了之后, 只要找一家生产商合作按照你的设计要求来做就ok了, 当然你需要严格的验收测试.

上面那场景是我编造的, 重点是分离了接口的设计和实现.
接口的设计: 这个class需要提供什么信息, 使用者可以通过这些接口得到使用这个class所需要的一切. 注意是使用这个class所需要的, 而不是解构分解这个class所需要知道的一切.
接口的实现: 这是怎么实现, 用什么方法实现, 可能不同的算法, 没有关系, 使用者没有必要知道, 于是这些也没有必要让使用者接触到.

LockManager.h
class LockManager {
LockManager() { sLockManager = this; };
static LockManager &instance() { return sLockManager; };
static LockManager
sLockManager;

virtual int getInformationX() const { ...; };                    
virtual int getInformationY() const ...
more ...

Qt上GraphicsView显示SVG

Screen Shot

There is a problem came at the daily work, to show a button on a graphics view,
this button is supposed to have the hover state, with an icon, but not general image format, but use SVG.
My first time to use svg image, even i know it is vector ...

more ...

2016年02月阅读笔记

"In fact, there is no need to even enforce that the data be related to 3D", Chapter 2, Coomplete Maya Programming.
这个话有意思。假设自己来设计一个3d应用程序,会有建模,动画,光照渲染等功能模块,你会怎么解耦和关联各个模块呢,例如某个模块改变了,别的模块需要怎么更新,会不会麻烦。而maya应用了data flow model,数据在不同模块下流入流出,不同模块就是对这些数据来操作。上面那个引入的话,这些流动的data甚至可以不用看作是3d数据。
例如想到mesh, 什么是mesh? 三维顶点, 用边联系起来,结构halfedge是为了方便访问v/e/f。对mesh操作(sculpt, deform),是对顶点操作,顶点的数目分布坐标等. 我是首先想到了mesh这个东西 ...

more ...

Skinning蒙皮技术

Reference: Siggraph Course 2014 - Skinning: Real-time Shape Deformation

more ...

2015年11月阅读笔记

2015/11/02 今天读到一个文章: what kind of jobs do software engineers who earn 500k per year do? 里面的故事是 villiage需要工人来为村庄供水,有两类工人: type 1 worker: 拿着两个水桶,到水源的地方装水,然后会村庄,自己和家人分一部分的水,余下给村庄。 type 2 worker: 拿个铁锹去挖水道,从水源到村庄,花挺长时间,这时间里面别人不一定知道他在做什么,可能对他失望,好在村里有些人对他有信心,给他吃,好让他继续。突然一天,他的水道建好了。type 1 worker就失业,要找别工作,而type 2 worker得到了大回报。

工人,在接受任务之后 ...

more ...

20150929别逃跑问题

2015/9/29 一个月之前build opensubd的时候遇到一个cmake error:

当时请问了别人没有遇到,也想不到是什么原因。今天重遇这个问题,狠着心慢慢看,对比另一台机器上的build log, 在OpenSubd/cmake/FindDocutils.cmake的执行不一样, 原来是这个机子上安装了C:/Anaconda, FindDocutils.cmake里面被其中一个库影响了。

lesson: 别逃避问题啊, fix it.

more ...

祈祷落幕时

书名:祈祷落幕时
作者:东野圭吾
2015-1

amazon.cn 12月份的推荐书, 尝试买回来看一下, 谁知一看就停不下来, 周五下午到周六就看完了. 极少看侦探推理小说啊,都忘了上一部是什么时候看的了. 主要是叙述看得很舒服, 没有太凶残的描写, 关键是找人物的联系.
介绍说是父女的爱, 但看过一半没有预知结局时候还是觉得很莫名, 跟父女的亲情有什么关系呢? 而题目为什么又是"祈祷落幕时"呢?
当看完之后回味, 才觉得这书名不错。推荐.

more ...

Book - Everyday Probability and Statistics

Alt text Alt text
那本[Naked Statistics]是流行书, 所以年初的时候买来看, 主要是讲日常生活中, 例如媒体, 那些统计学方面的概念可能会被误解or有意无意的用来误导大众.
也正是在看这书时候发现后几章的概念不懂, 想找本简单的书来学习一下, 于是就有了第二本[人人都来掷骰子], 跟前一本的区别是: 前几章讲了一些概率的基础, 后几章讲统计学的概念。每一章介绍一个概念, 不长, 可以一下看完. 而且一般的步骤是例子|概念|怎么算, 没有复杂的公式没有公式证明推导等. 15章后开始的样品空间, 还不是很清晰.

不过能在上几周断断续续地看完这本书还是满足:-) 特别是还在追这部美剧:
Alt text
Person of Interest / 疑犯追凶;
这有一个问题就是我们还有多少隐私呢? 倒不是说zf监控了我们的信息, 而是我们在日常的网上购物/网上言论/网上账单等都把我们清清楚楚的记录了, 甚至比我们自己还记得清楚, 慢慢地可能比我们自己还了解我们自己了. so who care the privacy? 说真的, 我都不知道哪些属于隐私范围, 而另外即使知道了别人的隐私, 是否又等于侵犯了别人的隐私呢?

more ...

Fail to surround the mouse with the vertices

Date Tue 02 September 2014 By renc Category misc.

一个鼠标点press/click在模型上, 然后drag/move, 在这个drag的路程中, 鼠标压到的faces/edges都是连续的, 而顶点vertices竟然不是, why ?

Alt text
一个stroke的过程: mouse click/press -> drag/move -> release.
图中红色点假如为click的起点, 然后沿着粉色的路径来drag鼠标....

从face面的角度来看, 深蓝色的面为起点, 然后鼠标一旦离开这个深蓝色的面之后, 肯定会进入这个深蓝色面四周的8个浅蓝色面之一(假如把面的边界也看作面一部分). 于是在stroke的路线中, 鼠标所pick到的面是一个连着一个的, 连续.

从edge边的角度来看, 鼠标从起点移动时候, 虽然鼠标在面内部而不是压在边上面, 但是面的几个边总有一个是距离当前鼠标位置近一点的, 我们选择这个边; 当鼠标移动要离开这个深蓝色的face的时候, 肯定会触碰到这个face是边(假如把角点corner也看作是edge是一部分). 于是在stroke的路线中, 鼠标所pick到的边是一个连着一个的, 也连续.

而从顶点vertices/cornersd的角度来看呢? 如图中的stroke路线就不会压到顶点, 不会触碰到顶点, 也就是顶点, 不像之前的面和边 能保证鼠标移动的时候肯定会pick到连续的face/edge, 很可能在stroke的过程中都没有接触到几个呢, 更何况是连续?

怎么解决, 假如我们要求stroke的路线中出现一串连续的顶点?
因为上面说到面是完备的 ...

more ...

mesh history

做demo都只是对mesh做一次修改, 但是好像在一个成熟的程序里面往往是很多次修改的叠加.

引言

以前对mesh的修改都是例如 mesh.setVertexPosition( vertexID, newPos ); mesh.setVertexTC( tcID, newTC ); 这样直接改[1], 从读书时候到现在都是这么simple and naive:-) 而对于maya的case就没有这样简单了,例如去看maya>devkit>splitUV example [2], 套用上面直接修改的方法, 要split一个uv的话,那直接用MFnMesh加几个新uv, MFnMesh::setUV(new uv id, uv value) 就ok了, 可是故事没有这么简单....

Construction History and Tweak

直接摘抄两段来看看:

All the operations that can be performed on a polygonal ...

more ...