The Game loop

很早之前就研究过关于Game loop的问题。昨天在研究Win32 game window的时候再次牵扯到了该问题。发现以前了解的game loop结构不对。

关于各种Game loop的解析:the game loop 还得仔细再看看才行…

另外还有个基于上边这个文章的视频:

Create a Window in OpenGL without GLUT

You’d better read both of them to gain the full understanding on Win32 and OpenGL setup.

不太喜欢用GLUT,之前用过,老是感觉很怪,比如有鼠标在屏幕上动,callback interval会变慢。另外也找不到合适的方式来设置game loop。最大的好处就是不需要写太多代码,而且跨平台。

所以还是按照比较正常的win32开发方式来弄咯。NeHe的教程仿佛也没用GLUT。

theForger’s Win32 API Programming Tutorial

顿悟GJK为啥不能直接用来查找碰撞信息

一直搞不明白网上的人说用GJK一定要加margin。我就在想,加个屁的margin啊,直接找origin到simplex边的最短距离的那个vetor就是penetration vector嘛,直接就可以找到contact normal了嘛。结果还是证明我是睁眼瞎。

下图是两个三角形碰撞的两种情况,灰色的六边形是两个三角形的minkowski difference(sum of the reverse)。特性是如果两个凸多边形碰撞,他们的minkowski difference会包括(0,0)原点(那个稍微大点的黑点)。

左边是两个三角形有一点碰撞,实际上可以直接通过原点到simplex的最近的边(橘黄色右上的那个边),作垂线,然后这个垂线就是penetration vector,可以拿来获取碰撞信息,比如,contact normal,penetration depth,contact points啊。显而易见三。

不过右边那个图,因为碰撞且有很大幅度的相互覆盖,如果找最近的那条边的垂线…显而易见已经不再能表示具体含义了。

所以说为啥网上的人说GJK需要加一个很小的margin,这样两个物体的margin相互覆盖的时候叫做shallow penetration,然后可以获取比较准确的contact information。如果是deep penetration,就是相互覆盖太大了,就需要用另外的算法来检测碰撞信息了!!比如:EPA!

刚才又在想,为啥不直接找从原点到整个minkowski sum(difference)的边的最短垂线,仿佛那样就是penetration vector。不过想了一下,再次证明我睁眼瞎…如果以两个12边型相互碰撞…搞不好有24条边要检测;再或者,如果是俩圆形,椭圆形,不规则的圆弧convex…再加上3D…估计再好的电脑也撑不住吧。

所以还是先找simplex(2D是一个 三角形,3D里边是一个四面体,特性是:能包含一个“点”的最小形状)好,方便些。

修改为检查日期

大换血哦!
麻烦死了

XMPP Pubsub大概做完了!

现在都可以监控多个网页或者RSS了,之后可以再把Atom加上!
Monitor为多线程控制,不过还是最弱智的每隔一段时间扫描一次。
另外RSS如果更新的话,只会推送最近的一个entry。
 
Subscribe普通的网页url几乎没有什么用处,只能提醒网页是否更新,推送消息内只有网页的连接,没有任何其余Different信息。不过能接收到网页更新提示也不错哦~
 
Server端的东西稀里糊涂的都几乎写完了,看上去还能用!
现在任何人都可以写一个XMPP的客户端发送接收XMPP stanze了!简单的要死!语言随选:Java, C, Python, PHP, ActionScirpt, Erlang….
只是我写的XMPP Server Pubsub component只接收我自定的XMPP格式,比如,你想订阅俺的Blog,就发送个以下的stanza到我的服务器:
<iq type=’set’ to=’beacon.domain’ id=’id’>
 <pubsub xmlns=’http://www.beacon.com/BeaconFeed’&gt;
  <subscribe feed=’http://liyapriljune.spaces.live.com/feed.rss&#8217; jid=’xxx@domain’/>
  <options/>
 </pubsub>
</iq>
仿佛在options elment里边还以定义你需要订阅这个resource多长时间,或者只接收某些关键字等等信息。不过我没试验过。
 
我自定义的stanza格式相当不规范,之后还是要修改一下。
不过现在至少能用了!
 
说了一堆废话,这个东西到底拿来干嘛???
 
说白了就是一个即时版本的,稍微高级点的Google Reader!!虽然还没做完!!
同志们可以订阅RSS, Atom或者普通网页url地址,服务器会自动查找它们的更新。当查找到更新的时候,会即时推送消息到你的客户端!客户端可以是本地计算机上边的软件,或者是手机,或者是某个Web Application!!
 
之所以用XMPP作为这个Project的Protocol,就是因为它易扩展!!简单!!公认!!Google Talk也用XMPP。
反正以后的发展空间很大!还可以做很多无限高级的东西!!!比如…Instant Messenging!!不过XMPP本来就是即时聊天的Protocol!连上俺的Server就可以聊天咯!
 
现在做的只是试验一下我的能力是否足够……仿佛我还不算太瓜……乱弄竟然弄好了!!
改天写个客户端试试!!Web Application也可以!!

Fake A Real-Time 浏览器!

啥意思?!Real-Time Browser?!

当当当当!! 那就是:

实时浏览器!!!!!!

 

正在思考这个问题……把现在大部分非实时的网络变成:半实时的,假实时的,甚至完全实时的!

这说不定是个很好的 idea! 至少可以减少点链接爱好者的数量!

 

大概状况就是:

当你浏览某个页面的时候,你就相当于已经订阅了此页,然后浏览器就可以接收关于该页面的数据,然后再做出相应的反映!注意哦!是接收!跟点链接,刷新无关……

离开某页面,你就退订了此页,你就不需要接收无关数据了!当然你也可以永久订阅此页,一直接收关于该页的数据!

 

可惜这种浏览器还没的…… 最大的问题是:需要Ping服务器和网站支持Ping!!

哇哈哈哈哈!我是天才!!弄个哇?!?!咋样?!每天可以节约点链接的时间来睡觉!!

 

说不定哪天Google啊,Microsoft啊,Mozilla啊,Apple啊,之类的就发布这种浏览器了…… 然后就高级了!!

哦耶!开源万岁万岁万万岁!

开源万岁!
主要是可以看源代码!
其次是不用给钱!
 
打算在客户端上用Gecko之类的,说不定可以作为一个排版引擎,反正开源,反正不要钱,而且Firefox都用它来排版。

Server端测试!

马上就要写完服务器端最基本的功能了!!
 
客户端就方便咯!随便咋写咯!

程序杀手凤凰涅槃了…

Java里边:
if(node.getName().equals("link")) 跟 if(node.getName()== "link") 得出的结果一样么?!?!
 
本人就是有这种无稽无聊的问题…
我的台式机用Vista Ultimate,作为测试机用左边的代码,得出来的结果是:true
另外笔记本用xp professiona,作为XMPP Server用右边的代码,得出来的结果:false
 
直接导致我昨天给张同学做演示的时候出错…
 
我再一次成为了程序杀手…
 
估计要认真看哈 == 和 equals 的区别了,不过问题在于…不同的机器竟然得出来不同的答案!
 

 
其他无关人员可以忽略,备忘录而已:
程序使用dom4j,node实际上是个Element instance,不过type还是Node…没被cast….
getName() return element name as a String
 
code:
private String getRSSLink(Element element){
  String rssLink = null;
  for ( int i = 0, size = element.nodeCount(); i < size; i++ ) {
    Node node = element.node(i);
    if ( node instanceof Element ) {
      if(node.getName()== "link"){
        return node.getText();
      }
      rssLink = getRSSLink( (Element) node );
    }
  }
  return rssLink;
 }
 
看了一下想起来了…
==是比较reference…是不是refer to 同一个 instance…
equal就相当于 “内容,值” 上的比较…比较value…
 

 
不过匪夷所思的是,为啥两台机器会给出不同的答案… 相当让人抓狂!!!!!!!!!!!!!
也有可能是我Java的版本问题,之前XMPP server用的不晓得啥子Java runtime enviornment,刚才重新装了跟我测试机器上一样的Java runtime。
 
反正就是一个词形容:
日怪!!!!!!!!!!!!!!!!!!!!!!!
 
程序杀手绝配日怪的程序

上网的乐趣是什么!!??

同学们!!到底上网的乐趣在哪儿喃?!请来访者踊跃发言嘛!
随便说你自己觉得上网的乐趣是什么,喜欢单纯点连接也好,喜欢看视频也好,喜欢耍网络游戏也好,喜欢聊天也好… 随便说!