作者littleshan (我要加入劍道社!)
看板C_and_CPP
標題Re: [語法] 請問DirectX 9的一些問題
時間Mon Nov 30 15:58:14 2009
※ 引述《tyc5116 (累人啊....)》之銘言:
: 恩...
: 這是DirectX的函式
: D3DXMatrixRotationX( &matWorld, timeGetTime() / 1000.0f );
: 每次呼叫到這裡的時候便旋轉角度(timeGetTime() / 1000.0f)
: 我怎麼知道這個值要多少才會轉完一圈剛好1秒呢?
: 目前我並不知道電腦執行的速度有多快,一秒內會執行到這個函數幾次啊?
: 這是我主要的問題啦~~再麻煩了,謝謝^^
雖然我們不知道 hardware 去 render 一張圖的時間是多少
不過我們可以假設
render 第一張 frame
和 render 第二張 frame 的時間是差不多的
(這假設也很合理)
所以我們可以這樣寫:
float render_time; // 儲存 render 上一張 frame 所花的時間
void render()
{
DWORD time_begin = timeGetTime();
// 一秒轉動 2 PI 弧度
// 每張 frame 之前相隔 render_time 這麼多秒
// 所以是轉動 render_time * PI * 2.0
D3DXMatrixRotationX(&matWorld, render_time * PI * 2.0f);
// 把東西畫出來
...
// 計算這張 frame 花了多久
render_time = (timeGetTime() - time_begin()) / 1000.0f;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.29.108
推 VictorTom:暈, 還是l大的方法比較有彈性Orz 剛問了一下同事, D3Dy 11/30 16:20
→ VictorTom:SDK的tutorial 04似乎剛好有一個類似的sample就是這樣 11/30 16:20
→ VictorTom:做的, 有需要也可以看一下:) 11/30 16:20
推 tyc5116:哈~那些範例我都看過啦..XD,只是有些地方要改不知道要怎改 11/30 16:34
→ tyc5116:我的作業是繞X軸轉一圈花一秒,再換繞Y軸一圈花一秒 11/30 16:35
→ tyc5116:然後就有一堆timer的問題要解決,目前還想不出來...@@ 11/30 16:35
推 tyc5116:試了一陣子,render_time常常都會是0耶,為什麼? 11/30 21:21
→ littleshan:render速度太快了 timer 跟不上 11/30 21:48
→ littleshan:加一個 Sleep 試試 11/30 21:49