青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

公告

聯(lián)系我:我的126郵箱: billhsu。 Locations of visitors to this page
<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

統(tǒng)計(jì)

  • 隨筆 - 41
  • 文章 - 0
  • 評(píng)論 - 82
  • 引用 - 0

常用鏈接

留言簿(16)

隨筆分類(lèi)

隨筆檔案

相冊(cè)

Game Dev

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

Android游戲計(jì)時(shí)

Read this post in english:http://androgeek.info/?p=299

以前代碼經(jīng)驗(yàn)很多都是基于windows的,所以對(duì)android下面的計(jì)時(shí)函數(shù)不是太了解。

在寫(xiě)Friut3D時(shí),我用的代碼是用gettimeofday()來(lái)計(jì)時(shí)的。但是效果不好,游戲里有個(gè)場(chǎng)景跑起來(lái)十分卡,acepig兄和我都覺(jué)得這個(gè)問(wèn)題很詭異。開(kāi)始覺(jué)得這是模型的問(wèn)題,現(xiàn)在看來(lái)是計(jì)時(shí)函數(shù)不精確惹得禍。

看看當(dāng)時(shí)寫(xiě)的獲取系統(tǒng)時(shí)間的代碼:

static long getTime(void)

{
gettimeofday(
&now, NULL);
return (long)(now.tv_sec*1000 + now.tv_usec/1000);
}


今天在一個(gè)google討論組里得知gettimeofday()記得的tick是不準(zhǔn)確的。而這個(gè)游戲邏輯依賴(lài)于time delta來(lái)計(jì)算各個(gè)物體運(yùn)動(dòng),計(jì)時(shí)不精確,渲染自然會(huì)卡頓。

于是用納秒級(jí)的準(zhǔn)確度的clock_gettime()重寫(xiě)了getTime()函數(shù):

static long _getTime(void)

{
struct timespec now;
clock_gettime(CLOCK_MONOTONIC, 
&now);
return now.tv_sec*1000000 + now.tv_nsec/1000;

}


改了計(jì)時(shí)函數(shù)后,游戲各個(gè)場(chǎng)景都流暢了。

posted @ 2011-01-30 23:16 Bill Hsu 閱讀(2129) | 評(píng)論 (0)編輯 收藏
骨骼動(dòng)畫(huà)中的反向動(dòng)力學(xué)

IK在骨骼動(dòng)畫(huà)里常常能看到,作用就是根據(jù)子骨骼的方位推算出它的那些父骨骼方位。可是一直都是知道有那么回事,但是又不太知道具體是怎么實(shí)現(xiàn)的。
在multi-crash.com上看到一篇骨骼動(dòng)畫(huà)反向動(dòng)力學(xué)(IK)的實(shí)現(xiàn)  ,內(nèi)容寫(xiě)的很易懂。
這是基于CCD(
Cyclic Coordinate Descent)算法的。還有種雅可比矩陣的算法,不過(guò)這種算法我還不太清楚,希望高手指教啊。
下面講講CCD,先看這張圖。

注意圖中的紅線和綠線,紅線是當(dāng)前骨骼與目標(biāo)骨骼的連線,綠線是目標(biāo)骨骼與最終位置的連線。
從子骨骼到父骨骼的順序迭代計(jì)算,旋轉(zhuǎn)紅線到綠線。這樣多迭代幾次就會(huì)得到較好的結(jié)果。

要注意的是需要對(duì)骨骼的旋轉(zhuǎn)范圍加以限制,因?yàn)槿梭w的關(guān)節(jié)不是以可以任意方式旋轉(zhuǎn)的。

[例如圖中藍(lán)色部分為可以旋轉(zhuǎn)的范圍]

posted @ 2010-08-26 17:29 Bill Hsu 閱讀(3510) | 評(píng)論 (0)編輯 收藏
AndroGeek歡迎大家

http://androgeek.info/

AndroGeek[安卓極客]是我正在辦的一個(gè)網(wǎng)站,內(nèi)容以Android 編程開(kāi)發(fā)與資訊為主。

如果有好的Logo創(chuàng)意或者有寫(xiě)Android相關(guān)的文章的想法,請(qǐng)聯(lián)系我~~~

AndroGeek歡迎大家。

 

[為了國(guó)際化,這是一個(gè)英文站點(diǎn)]

posted @ 2010-08-23 10:04 Bill Hsu 閱讀(341) | 評(píng)論 (0)編輯 收藏
Android NDK 開(kāi)發(fā)OpenGL ES 2.0一些注意點(diǎn)

Android是個(gè)好系統(tǒng)哇,特別是Android NDK r3出來(lái)以后,可以用OpenGL ES 2.0了。
自己也試了試用NDK編一個(gè)OpenGL ES 2.0的程序,可是,編譯的時(shí)候出現(xiàn)了一大堆錯(cuò)。

如圖,滿(mǎn)屏幕都是 undefined reference to 那些OpenGL ES函數(shù)。
看來(lái)是庫(kù)文件沒(méi)有鏈接進(jìn)來(lái)。

這是NDK例子里的Android.mk的寫(xiě)法:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    :
= libgl2jni
LOCAL_CFLAGS    :
= -Werror
LOCAL_SRC_FILES :
= gl_code.cpp
LOCAL_LDLIBS    :
= -llog -lGLESv2

include $(BUILD_SHARED_LIBRARY)

問(wèn)題就出在用紅色標(biāo)出的那行。

把那句修改為:
LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog
LOCAL_LDLIBS
+=-L$(SYSROOT)/usr/lib -lGLESv2

就可以正常編譯了。

還有一些注意點(diǎn)是:
編譯程序前要clean,否則編譯會(huì)出錯(cuò);
每次更新了自己的.so文件后,在eclipse的那個(gè)java項(xiàng)目里要記著refresh一下。

posted @ 2010-08-10 11:37 Bill Hsu 閱讀(3413) | 評(píng)論 (1)編輯 收藏
靠得住的休眠函數(shù)XSleep

直接用timeGetTime()這個(gè)函數(shù)的誤差是有目共睹的,在15ms左右,于是,如果游戲的消息循環(huán)用了timeGetTime(),那么3D游戲畫(huà)面會(huì)因?yàn)閮蓭g時(shí)間誤差大而有些抖動(dòng)。
今天在csdn上看到了一篇文章:http://blog.csdn.net/lanzhengpeng2/archive/2008/05/06/2401554.aspx
講的也正好是這個(gè)問(wèn)題,記錄一下。

在使用timeGetTime()的代碼塊的前后加上timeBeginPeriod(1)和timeEndPeriod(1),就可以提高timeGetTime()的精度。

同時(shí),可以利用timeSetEvent寫(xiě)了一個(gè)靠得住的休眠函數(shù)[代碼來(lái)自上述文章]:

static void XSleep(DWORD dwDelay,HANDLE hEvent)
 {
  MMRESULT hTimer 
= timeSetEvent(dwDelay,1,(LPTIMECALLBACK)hEvent,0,TIME_ONESHOT | TIME_CALLBACK_EVENT_SET);
  MsgWaitForMultipleObjectsEx(
1,&hEvent,INFINITE,QS_ALLINPUT,0); //當(dāng)有Windows消息時(shí),還能繼續(xù)處理Windows消息。故選擇了這個(gè)函數(shù)。
  timeKillEvent(hTimer);
 }

消息循環(huán)[代碼來(lái)自上述文章]:
 MSG msg;
 DWORD dwLastTime;
 HANDLE hSleepEvent 
= CreateEvent(NULL,FALSE,FALSE,NULL);

 timeBeginPeriod(
1);

 dwLastTime 
= timeGetTime();
 
while(isActive())
 {
  
//需要一直處理Windows消息到無(wú)消息處理為止
  for(;PeekMessage(&msg,NULL,0,0,PM_REMOVE);)
  {
   
if(msg.message == WM_QUIT)
   {
    CloseHandle(hSleepEvent);
    timeEndPeriod(
1);
    
return ;
   }
   
if(!TranslateAccelerator(msg.hwnd,hAccelTable,&msg))
   {
    TranslateMessage(
&msg);
    DispatchMessage(
&msg);
   }
  }

  DWORD FrameDelay 
= max(1,1000/max(1,GetMaxFPS()));
  DWORD dwTime 
= timeGetTime();
  
if(dwLastTime + FrameDelay > dwTime)
  {
   XSleep(dwLastTime 
+ FrameDelay - dwTime,hSleepEvent);
  }
  
else
  {
   update();
   dwLastTime 
+= ((dwTime - dwLastTime) / FrameDelay) * FrameDelay; //當(dāng)實(shí)際幀數(shù)嚴(yán)重低于預(yù)期幀數(shù)時(shí),這段代碼可以完成跳幀功能;當(dāng)實(shí)際幀數(shù)大于等于預(yù)期幀數(shù)時(shí),這段代碼仍然可以使幀之間的時(shí)間間隔固定。之前謝Boss沒(méi)有處理好的主要就是這個(gè)。
  }
 }

 CloseHandle(hSleepEvent);
 timeEndPeriod(
1);
這樣,時(shí)間誤差就會(huì)在1ms之內(nèi)了,游戲也就不會(huì)抖動(dòng)了。

posted @ 2010-07-30 10:55 Bill Hsu 閱讀(1605) | 評(píng)論 (0)編輯 收藏
僅列出標(biāo)題
共9頁(yè): 1 2 3 4 5 6 7 8 9 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲激情第一区| 香蕉av777xxx色综合一区| 亚洲精品综合| 亚洲人成网站精品片在线观看| 国产人久久人人人人爽| 国产精品久久久久久久久久三级| 欧美激情成人在线视频| 亚洲——在线| 欧美激情亚洲自拍| 欧美日韩成人综合在线一区二区| 欧美日韩亚洲综合一区| 国产精品mm| 国产在线欧美| 亚洲精品一区二区三区av| 99日韩精品| 欧美一级淫片播放口| 久久国产一区二区| 免费亚洲电影在线| 亚洲乱码精品一二三四区日韩在线 | 欧美在线免费观看亚洲| 久久激情视频久久| 亚洲国产一区二区视频| 99精品欧美一区二区蜜桃免费| 亚洲一级黄色| 老牛影视一区二区三区| 欧美性色aⅴ视频一区日韩精品| 国产日本欧美视频| 日韩亚洲在线| 久久精品国产99国产精品| 欧美成在线观看| 在线亚洲+欧美+日本专区| 久久麻豆一区二区| 欧美日韩一级黄| 国产精品免费福利| 欧美成人网在线| 国产精品一区二区在线观看不卡| 国产综合色一区二区三区| 亚洲免费电影在线| 久久久欧美一区二区| 日韩一级黄色av| 狼狼综合久久久久综合网 | 国产精品日韩久久久| 在线观看欧美一区| 欧美在线国产| 亚洲免费电影在线观看| 久久精品国产91精品亚洲| 欧美日韩一区在线观看视频| 国内外成人在线| 欧美一区二区三区久久精品| 亚洲美女在线一区| 欧美精品福利| 日韩视频在线观看国产| 美女诱惑一区| 久久久国产一区二区| 国产亚洲欧美激情| 久久国产免费看| 亚洲免费在线看| 国产精品久久午夜| 亚洲欧美日本视频在线观看| 99国产精品视频免费观看| 亚洲第一综合天堂另类专| 亚洲精品在线视频| 欧美成人免费在线视频| 久久精彩免费视频| 国外成人在线视频网站| 久久免费少妇高潮久久精品99| 一区二区三区日韩| 国产精品理论片| 亚洲免费在线观看| 亚洲视频高清| 国产日韩欧美日韩| 久久久亚洲精品一区二区三区| 欧美一区=区| 韩曰欧美视频免费观看| 久久天天躁狠狠躁夜夜av| 性欧美18~19sex高清播放| 国产婷婷色一区二区三区四区| 久久精品三级| 午夜精品久久久| 欧美激情精品久久久| 国产欧美欧美| 欧美~级网站不卡| 午夜久久资源| 国产欧美日韩精品专区| 欧美亚洲视频| 欧美在线视频网站| 亚洲第一天堂av| 欧美黄污视频| 欧美调教vk| 欧美一区在线看| 久久久久亚洲综合| 夜色激情一区二区| 亚洲一区免费网站| 国产一区日韩二区欧美三区| 鲁大师成人一区二区三区| 欧美精品色综合| 香蕉乱码成人久久天堂爱免费| 欧美一区二区三区电影在线观看| 亚洲国产二区| 亚洲综合色噜噜狠狠| 在线电影欧美日韩一区二区私密| 欧美刺激午夜性久久久久久久| 亚洲视频免费| 国产欧美一区视频| 夜夜精品视频| 欧美亚州一区二区三区| 久久成人精品视频| 欧美高清在线观看| 久久九九99| 欧美日韩精品一区二区天天拍小说| 亚洲欧美中文字幕| 蜜桃av噜噜一区| 欧美亚洲系列| 欧美日韩国产二区| 麻豆精品视频在线观看| 国产精品九九| 最新国产成人在线观看| 国产视频在线观看一区二区三区 | 亚洲尤物视频网| 免费欧美在线视频| 狠狠狠色丁香婷婷综合激情| 亚洲一区二区免费| 韩国精品在线观看| 9色精品在线| 亚洲激情第一页| 欧美一区日韩一区| 亚洲专区一区| 欧美日本一区二区高清播放视频| 麻豆成人91精品二区三区| 国产精品网站一区| 一区二区三区四区国产精品| 日韩一区二区精品在线观看| 久久久777| 老司机免费视频一区二区| 国产精品人成在线观看免费| 日韩系列欧美系列| 在线视频日韩| 欧美日韩视频不卡| 亚洲精品国产精品国产自| 亚洲欧洲日本mm| 久久久久国内| 亚洲精品视频一区二区三区| 亚洲欧美激情四射在线日| 在线视频免费在线观看一区二区| 久久亚洲高清| 亚洲一区二区日本| 久久久久久久久综合| 亚洲一区国产精品| 久久综合九色九九| 久久激情中文| 久久这里只有| 在线成人性视频| 麻豆成人综合网| 亚洲国产精品成人va在线观看| 在线高清一区| 欧美精品免费在线观看| 国产精品99久久久久久人| 亚洲视频网站在线观看| 国产精品theporn| 亚洲欧美一区二区原创| 久久国产日韩| 亚洲三级免费电影| 欧美手机在线视频| 午夜久久电影网| 久久精品人人爽| 亚洲区国产区| 国产精品一区二区你懂的| 欧美专区日韩视频| 亚洲国产裸拍裸体视频在线观看乱了中文 | 亚洲人成高清| 欧美无乱码久久久免费午夜一区 | 欧美成人精品在线视频| 亚洲人成77777在线观看网| 欧美特黄视频| 欧美一级精品大片| 亚洲国产欧美一区| 亚洲欧美日韩精品久久亚洲区 | 美日韩精品免费| 亚洲图色在线| 玖玖玖免费嫩草在线影院一区| 亚洲精品午夜| 国产一区二区三区日韩| 欧美精品一区二区视频| 午夜在线观看免费一区| 亚洲黄一区二区三区| 欧美与黑人午夜性猛交久久久| 亚洲国产精品精华液2区45| 欧美日韩综合另类| 久久字幕精品一区| 在线综合亚洲| 欧美激情在线狂野欧美精品| 欧美一区国产一区| 亚洲午夜国产成人av电影男同| 好吊日精品视频| 国产精品专区一| 欧美日韩在线另类| 欧美成年视频| 久久久久综合一区二区三区| 亚洲综合社区| 一区二区三区欧美在线观看|