14年前做的一个NURBS Demo

最近整理文件,发现14年前的NURBS Demo居然在Win 7下还能很好运行,速度比当年快了很多。

当时研究在3D游戏中,采用NURBS建模的模型。根据相机与物体的位置,实时演算生成模型的三角形。 离相机远的部分,三角形就少,节省渲染时间,离相机近的就三角形多,细节更丰富些。说起来很理想,但实现起来有好几个难点:

  1. NURBS Trim的问题
    NURBS曲面中挖洞的方法是用NURBS曲线去描述这个洞,如何快速在游戏中实现是个难点。这是我当时主要攻关的问题。当时找出两个方法,一个是根据相机距离远近,及曲线不同段的曲率,不断调整切分Nurbs Trim曲线的不同段的粒度。一个是另辟蹊径,给3DS MAX开发了一个插件,能在编辑NURBS曲面时,同时生成一个合并了原有材质且带Alpha通道的高精度材质图片, 在Nurbs Trim 曲线以内的alpha通道都是透明的。
  2. NURBS编辑工具的问题
    当时公司用的NURBS编辑工具主要是3DS MAX,虽然是有较强的NURBS曲面编辑功能,但实际生成的NURBS曲面问题很多,远不如同期的Rhino,可Rhino当时对插件之类的二次开发支持又很不好。
  3. NURBS曲面在随着相机距离而调整模型的过程中,物体的边缘,会在屏幕上产生抖动感。
    这个问题相当难以克服,一直没能解决。

当时有宣传用NURBS的游戏,例如Quake3,其实它只是在建模中使用了NURBS,并没有做到实时的生成模型。当时整个游戏界对NURBS抱有很高的期望,有显卡公司想从硬件层面给予解决,但后来都没了消息,再后来也就没再关注这方面的进展,不知现在怎样。不过现在的显卡能力已经超强,不用NURBS技术,就靠堆三角形已经能实现近乎真实的画面效果了。

下面是Demo的两个截图,大家可以看到这个鸭子的三角形数量在两个图里是不同的。在同一个图中,鸭子不同部位切分的细节程度也是不同的, 整个鸭子上的三角形都是每帧都重新实时生成的。

当时为了搞这个,读了很多SIGRAPH,MSR,及各大学关于NURBS的论文,对自己提高帮助很大。

11-2

 

这个demo的下载链接是 http://www.nihuo.com/downloads/nv.zip

下载下来demo后解压,选择File ->Open, 打开NRB_DUCK.oo就能看到鸭子, 按下F键就能看到三角形的线框,按鼠标右键能旋转模型, 按<, >能调整模型切分的系数。更详细的可参看readme。屏幕左上角的tri是整个模型的三角形数量。因为主要是为了演示NURBS一些关键算法的效果,其他方面都很粗糙,还请见谅。

Nginx模块开发教程

做Nginx模块开发的时候,发现这方面的文档很少, 磕磕绊绊走了不少弯路。 过了两年,发现有点改善,但不算大。 昨天有人问能不能教他简单的Nginx开发入门,本想在网上给他找个教程的,结果没找到太合适的,于是干脆自己写了个简单的教程。主要是入门代码和一些资料的索引。有两个例子, 一个是Hello World, 就是访问URL显示Hellow World, 一个是Hello World Text, 就是可以通过配置文件来定义显示的欢迎信息。 教程地址是 https://github.com/nihuo/Nginx-Module-Development-Tutorial。 看完这个教程应该就会知道如何开始写Nginx模块,如何解析参数,如何输出。

这个教程是给Nginx模块开发的初学者的。其实我自己也是个初学者,之前正式开发过的模块只有两个,是抱着和大家一起学习的态度写这个教程的。 尝试分享给别人其实也是自己整理旧知识学习新知识的很好过程, 发现了不少自己以前认识错误的地方,狂汗。 当然,现在写的例子,估计问题还是不少,算是抛砖引玉,欢迎大家多多批评指教。

以后有空的时候还会再添加例子,也欢迎大家来编辑添加。 Nginx不只是个Web Server,其实是个很好的高性能服务器二次开发平台, 希望能通过这个教程让更多人认识Nginx巨大的二次开发潜力。

整个教程是用英文写得,为了锻炼自己的英文,可能会让英语大牛们贻笑大方,笑过后,不妨耐心指正,将不胜感激。

 

IE10的奇怪问题

今晚遇到个IE10的问题,折腾了很长时间。就是在Win7下面的IE10中Ajax选择Post模式, 用HTTP Watch看到所有信息都正常,但在服务器端就是拿不到POST的数据。设置IE10为IE9模式就没有这个问题。折腾了好久,后来发现关闭HTTP WATCH就没有这个问题了,真是吐血。

《致老去的我》

这几天循环一首歌,邵夷贝的《致老去的我》,在http://www.songtaste.com/song/3256656/能听到。

 

《致老去的我》

亲爱的老去的我
此刻你坐在窗前
向过去回望
做过哪些选择
获得怎样的生活
他可否如你想象

是否生活在这样的国
即使不靠近海岸和山河
也四处可见绽放的花朵
人们扯下万千口罩
放肆笑着

过最接近生活的生活
安全的饭菜和牢固的屋舍
不警惕危险 不担心病患
没有人被允许经历孤单

孩子们看得到 彩虹和蜻蜓
老师教他自由 车辆为他缓行
夜晚宁静安眠 白天喜悦清醒
家永远在原地 他从不迁移

陌生的人儿啊
全部都充满善意
分享而不夸耀
不关心背景
不关心什么身份
相遇仿佛遇见太阳

在任何情况下 从不慌张
不热衷比较 内心很坦荡
爱好多样 有坚定的信仰
人们撕下万千面具
尽情歌唱

过最接近生活的生活
安全的饭菜和牢固的屋舍
不警惕危险 不担心病患
没有人被允许经历孤单

梦想是天生的 必有得愿望
是身份的证明 不会被谁影响
就像每一个人 都终会死去一样
每个人也终究会实现梦想

做过哪些选择 获得怎样的生活
它是否如你想象
做过哪些选择 获得怎样的生活
它是否如你想象

词曲:邵夷贝

 

 

智能电视乱想

小米电视这样的智能电视应该再加一个primesense.com 提供的3D摄像头(primesense也是kinect技术的提供者)及麦克风。 加上后能做很多事,最容易想到的是玩游戏和视频聊天,除此之外还有很多更有意思的:

  1. 控制电视不再用遥控器,而是用手势或语音
  2. 自动识别看电视的人,为每个人保存单独的收看进度,及收藏夹列表,及观看记录。并可根据不同的人给出不同的收视推荐
    当有多个人一起看电视时,可以用如下解决方案

    1. 每个人可以通过特定手势或语音来请求电视的控制权,如果没有人提出异议则电视由他控制
    2. 如果有人提出异议,则电视可以用如下规则来选出谁最终控制电视
      1. 从争议者中选出这个星期看电视较少者
      2. 用石头剪子布之类的小游戏来决定
  3. 深度的收视行为统计分析
    现在的收视率统计是用一些样本户(尼尔森公司在中国有18000个收视率调查样本户, 2007年数据),进行采样。而采样过程中,还需要人员的参与,比如另一大收视率统计公司索芙特的遥控器上有家里每个人的按钮,每次选择了台后需要按下对应按钮,这样机器才知道当前是谁在看电视。这种收视率调查方式问题很多。首先是因为需要人的参与,容易有错误,例如人按错了键,或者懒得按。再者采样范围过小,容易被一些
    电视台控制而用3D摄像头+麦克风很容易对用户的收视行为进行深入准确的分析

    1. 用摄像头识别有多少人看,收看人的性别,年龄段
    2. 收看时谁是专心在看,谁是边聊天嗑瓜子,甚至看着报纸,或走来走去
    3. 统计播放到电视剧的什么时候,大家更专注,什么时候笑得最多
  4. 广告统计分析
    1. 可以统计哪些广告大家真正认真看了,哪些没认真看,哪些压根没看
    2. 精确统计广告观看者的人口属性:年龄段,性别,影视喜好
  5. 真正的精准定向广告
    互联网电视知道每个用户最近看了什么电视,通过电视浏览了什么网页,搜索了什么关键词,这些资料都有助于提高广告的定向效果。
  6. 高度互动的,游戏式的广告
    例如播放一款汽车广告时,用户可以进到广告里,看到自己坐在车上的样子,玩一个开这个车赛车的游戏(可参照用kinect玩赛车游戏的效果,不需要任何游戏柄,直接双手做出握方向盘的姿势即可)。
  7. 有时看着电视就睡着了,通过摄像头识别出来后,电视可自动关闭
  8. 通过摄像头识别出小孩,对他看电视时间进行限制
  9. 试衣服
    通过3D摄像机估测出人的身高,腰围,胸围等指标,然后吧人脸等图片上传上去,在衣服的购物网站,立刻就能显示出购买人穿上新衣服以后的效果。

搬家珠海

搬家到珠海整三个月了,考虑搬家5年,终于付诸实施了。

一。搬家的起因及过程

韩国阿姨一直有过敏性鼻炎,从07年开始就有加重的趋向。到08年非常严重,已经出现哮喘的征兆,07年的时候同仁医院的医生就建议我们搬家去南方空气好的海边城市,08年我们不得不把搬家提上日程,当时还去一些沿海城市看了看,但后来因一些家事耽搁下来。到2011年年底,她的鼻炎又开始加重,这时候已经有了孩子,北京冬天糟糕的空气让孩子也不停的咳嗽,当时就决定真的要搬家了。 2012年初,在几个搬家待选地之间考察后决定搬家苏州。都制定好了搬家计划的时候,我突然膝伤加重,而北京有全国最好的运动创伤医院,只好又放下搬家计划,安心疗伤。到了下半年膝伤大为好转,但又遇到参与移动互联网创业的机会,于是征得老婆同意后加入一个创业公司分管技术。但到了10月老婆的鼻炎严重到需要做手术治疗,开头以为是很小的手术,结果到最后成了全身麻醉,用时两个多小时的手术。 到了冬天北京PM2.5又多次破表,最高的时候900多,我和孩子都不停的咳嗽,怎么吃药也好不了,这时候痛下决心无论如何也要搬家了。 于是春节前就和老板就提出了辞职,春节后就离开了公司,准备尽快搬家。

开始还是想按去年的计划,搬家苏州,但机缘巧合春节期间遇到珠海的朋友L。在她的建议下我和韩国阿姨三月一起去珠海考察了一周,最后决定搬家珠海。4月下旬搬过来,现在经过开始阶段的适应,全家人都喜欢上了这个城市。 变化有:

  1. 来这里半个月后,我和孩子的咳嗽都完全好了。 老婆呼吸道的症状也全没有了。
  2. 在北京,看着外面雾蒙蒙的天,经常不敢带孩子出去玩。而在珠海,孩子天天在外面玩到很晚才回家
  3. 老婆感觉睡眠质量都高了很多
  4. 在北京时,孩子总有鼻屎,老抠鼻子,怎么说也没用。来了这里后,空气好,鼻屎都很少有,抠鼻子的习惯也没有了。

现在还不敢确定以后就真的定居珠海,要至少住满一年才能确认,但至少我们对现在珠海的生活都很满意。

二。为什么选择珠海

在决定搬家的时候考虑了如下几个问题

  1. 空气要好
  2. 老婆的过敏性鼻炎对两种花粉过敏尤其严重,这两种花最好不要有
  3. 处在IT产业繁华地区
  4. 距离一线大城市不远
  5. 生活方便
  6. 要有不错的幼儿园
  7. 治安要好
  8. 城市管理要好,要有好的发展规划
  9. 气候要好
  10. 生活成本低

完全符合这个条件的城市没有,最接近的就是苏州和珠海,而珠海在空气和过敏花粉这两个方面都占绝对优势,所以最后选择了珠海。

下面具体讲讲珠海的优势:

  1. 珠海的环境不错,一是空气比较好,二是绿化也很好
  2. 和珠三角其他城市不同,珠海没有走上先污染后治理的路。 珠海一直严格管制污染大的工业项目,大力扶持无污染的电子信息、软件与集成电路设计、生物医药等产业。虽然换了不少市长,但重视环境的发展方向一直没变。
  3. 珠海的气候不错, 尽管在北回归线以南, 但夏天的温度绝少超过35度。而且一般都是热几天以后就会下雨,又凉快下来。
  4. 遇到的每个住过珠海的人都对珠海赞不绝口
  5. 珠海引进了很多大学,有北京师范大学,北京理工大学,中山大学,暨南大学,吉林大学等等。据说有10万大学生,为将来的产业发展提供了充分的人员保障
  6. 和澳门一起合作开发横琴岛,划了一大块地出去给澳门大学。前一阵去看了,建设速度很快,校园已经基本建好了。
  7. 距离澳门极近,距离广州,香港,深圳都不远。
    1. 澳门走过去就可以了。
    2. 去广州有动车,1个小时到广州南站,开车也就1个小时多点
    3. 深圳可以坐船,据说1个小时多点,也可以开车,150公里左右,要2个小时。
    4. 从珠海市区的九洲港坐船去香港九龙1个小时10分钟。 着急且有钱的话也可以从澳门坐直升机航班去香港,只要16分钟。
  8. 港珠澳大桥正在建设中,2016年完工,到时开车不到一个小时就能到香港
  9. 珠海的交通管理比北京好太多了,红绿灯的设置非常科学,在不耽误车辆行驶的情况下,充分照顾了行人的安全。
  10. 2008年珠海正式被批准为全国首批生态文明建设试点地区
  11. 珠海是个移民城市,普通话畅行无阻
  12. 珠海有自己的机场,(苏州比珠海大很多,却没有自己的机场),在市区还有个直升飞机场。
  13. 珠海的房价虽然近两年也涨了很多,但市中心开发的新盘大多在1.7万 左右,海景房有2万多点的。最近听说有的楼盘喊道3万,但我看到珠海大部分楼盘价格还是在1.7 万上下,而且这种楼盘的房子质量,小区环境,已经普遍好过北京四环内价格5万的小区。靠近中山的地方则只有1.1万左右,而一些稍老小区的二手房价则更低。租房价格也不算高,是北京同等位置品质房子租金的大约四分之一左右。
    珠海最繁华的香洲区的区政府到中山坦洲镇政府只有10公里,但房价立刻从1万多掉到7000左右。
  14. 珠海有相当大的渔港,能买到新鲜的海鲜,比北京更新鲜也更便宜(这对爱吃海鲜的韩国阿姨来说是重大优点)。
  15. 有个国际赛车场
  16. 虽然是个小城市,但公园很多,带孩子玩的地方很多
  17. 幼儿园总的来说价格比北京要便宜不少,但硬件设备及师资并不差,甚至更好。
  18. 每两年有个航展
  19. 有很多海岛,虽然珠海沿岸的海不咋样,但据说一些海岛的海很清澈,风景不错
  20. 有金山和魅族两个知名IT企业,工行的软件开发中心也在这边。
  21. 离城市很近就有不少农家乐,有些做的菜颇有特色,味道相当不错
  22. 小城市,开车一般十来分钟就从市区的一头到另一头,交通很少拥堵。

再谈谈珠海的缺点

  1. 珠海气候也有比较难受的时候,是3月中下旬到4月底这段时间,潮气很大,湿度有时会到95%,屋子墙壁会结露。这里很多人家都有抽湿机,在潮气大的就要紧闭门窗开始抽湿。
  2. 珠海虽然在海边,但因为在珠江入海口,刚好又靠西岸,因为地球的自转作用,珠海里的泥沙都冲到珠海这边,海水偏黄,不如东岸深圳的海水好。
  3. 城市小,有些方面不如大城市方便。比如前一阵我想找个雅思培训班,在北京那都是烂大街了,而在珠海只找到一个。

三。考虑过的其他城市

这些年转过国内不少的城市, 把考虑过的几个拿出来和大家分享一下自己的观感:

  1. 苏州
    我们差点搬家去苏州。我和韩国阿姨都很喜欢这个城市。 优点有:

    1. 千年古城,老城和新城区分开发展,老城保存的比较好,文化底蕴深厚。
    2. 距离上海,南京,杭州都不远,上海只要一小时
    3. 苏州虽然不在海边,但紧邻太湖,而太湖大到和大海一样看不到对岸。金鸡湖,阳澄湖也都在苏州。
    4. 苏州的新区是和新加坡合作开发管理的,规划及管理的理念相当先进。当年苏州选拔新区干部不是从原有干部队伍中选取,而是招上来新人派到新加坡学习再回来管理,而这些人把世界最先进的城市规划管理理念带入了苏州,所以苏州的干部素质较高。 有朋友原先在北京中关村办公司,后来搬去了苏州。他说:感觉北京政府的很多干部对他们这种中小企业都是故意找茬,而苏州政府的干部则是真心要帮助他们成长。
    5. 苏州新区政府为企业有专门的一条龙服务窗口,需要办理的事项不用来回跑,在一个地方就全办完了。
    6. 苏州的新区的规划大致是这样,先有个工厂区,这附近一般就有住宅区,住宅区中心有个商业区,这样大部分交通流量都被消化在这个区块的内部,而不会给交通主干道带来过大压力。对比北京市的奇葩规划,高下立判。
    7. 苏州为高新企业提供大量切实的帮助,例如减免房租,税收优惠,提供食堂等等。
    8. 苏州房价不贵,比珠海还更便宜些。
    9. 苏州别看不声不响,已经在GDP上超过深圳,经济非常发达
    10. 苏州人比较友善,珠海人也友善,给我这个从北京出来的人都留下很好印象。后来想想,在北京,大家在交通堵塞,恶劣空气,高房价的影响下较难保持好心情,也就较难对他人展现自己的友善了。

最后没有选择苏州的原因有几个

    1. 苏州空气比北京好很多,但这两年还是有污染的,比珠海还是差不少
    2. 苏州周围频繁出现过水污染事件。苏州管理水平高,但不表示周围地区管理水平高。
  1. 大连
    05年去过大连,印象很不错。但前些年大连出现过石油泄漏事故,而渤海湾内也出现过石油泄漏事故,后来又都不了了之。想搬家去大连的念头也就不了了之了。
  2. 厦门
    06年和韩国阿姨去住过10天左右,我们对这个城市也是印象极佳。但最后没选择的原因有:

    1. 厦门距离长三角和珠三角这两大经济区都太远了
    2. 厦门的海并不干净,可能我们当时运气不好,刚好碰到不干净的海面,但印象已经挥之不去。
    3. 在厦门住过两年的Y强烈建议不要搬家去厦门
  3. 三亚
    当时选择南方空气好的海边城市第一个想到的就是三亚,去住了一个星期,发现三亚的气候及空气确实都极佳。但没选择的原因有:

    1. 物价房价都相当高
    2. 远离国内各大经济区
    3. 旅游城市,游客多多,不太喜欢这种地方
  4. 大理
    有个朋友知道我要搬家,第一个推荐大理。大理去过,感觉去旅游还行,去住就真的不太喜欢那种地方。 可能适合其他人,但实在不是我的菜。
  5. 深圳
    据说深圳的气候环境和珠海差不多,但曾有朋友的妹妹10来年前在深圳被大白天抢劫过,让我对深圳的治安缺乏信心,就没选择深圳。不过最近听朋友们说,深圳治安这些年已经大幅改善, 最近想去那边也转转看看。

四。给想搬家珠海人的建议

  1. 珠海好幼儿园学位很紧张,如果有上幼儿园的孩子要早联系。 我们因为搬家很仓猝,所以没能早联系,结果搞得自己非常被动,还好最后的结果不错
  2. 珠海的海景房偏贵,而且周围配套好,附近又有好幼儿园的很少。至于住不住海景房在当地遇到两个很极端的意见,一个是主张别住,说海景房都是给外地人住的,当地人不住,因为海边潮气大,且有腐蚀性,家里的电器都爱坏。 而另一派是说现在都有空调抽湿机什么的,原有的问题都不存在了,来珠海不住海景房还不如去内陆城市住。我们也犹豫了蛮久,最后韩国阿姨的韩国朋友们也都建议别住离海太近的地方,所以没有选择海边。
  3. 珠海的工作及生意机会,乃至工资待遇都要比深圳,广州差不少,如果想来这边找工作要慎重。

离开北京其实很是舍不得,舍不得亲戚朋友们,也舍不得北京的山山水水。希望北京的环境能尽快好起来。

==========

补充:我的微信号saodimonk,建了个搬家珠海的微信群,感兴趣的可以加入一起讨论(请标注『搬家珠海』)。

vim clang autocomplete插件

以前一直用omnicppcomplete自动完成插件,前几天查到有人对clang autocomplete插件评价极高,于是用了一下发现确实很棒,在用c/c++开发时,效果比前者好很多。 下面是些安装使用中的一些经验,和大家分享一下

注:使用环境为centos 6.2, vim 7.3

  1. 系统要先安装llvm和clang, 建议用install-clang来安装,方便很多。 安装时间很长,在我的虚拟机上,安装了整整一下午。
  2. https://github.com/Rip-Rip/clang_complete 直接clone代码来安装插件,用文档提示的用make install安装总失败, 后来从 http://www.vim.org/scripts/script.php?script_id=3302 下载了 clang_complete.vmb 放到代码目录才安装成功
  3. 开始用的时候总不成功,提示pattern not found, 后来在.vimrc 里加入 let g:clang_hl_errors=1, 失败的时候会提示出详细的失败原因。 发现是因为找不到另外一个目录里的头文件。于是在工程根目录建立.clangg_complete 文件, 加入-Isrc/include等内容,问题解决。
  4. 有时还是会失败,后来网上查到个解决方案,在.vimrc中加入let g:clang_user_options=’|| exit 0′ 解决

 

补充:发现这个插件在python开发中也能实现自动完成。