iT邦幫忙

2025 iThome 鐵人賽

DAY 19
1

這裡是鐵匠史密斯,How is it going?
昨日知道如何旋轉玩家方向 fPlayerA
但是目前只使用常數 0.1f 來增加角度,是轉動得非常快的!
我們需要讓玩家旋轉方向的速度隨著影格刷新速率(frame rate)來調節

旋轉方向的原理回顧

至今我們對遊戲世界的**方向定義是什麼呢? 我們直接上圖: **
https://ithelp.ithome.com.tw/upload/images/20250819/201576531kiAPRtGUC.png
對應整個座標系,並在 Day 13 | Ray Casting : 光如何前進? Part 2 進行調整後,得出:

  • 順時針方向為負
  • 逆時針方向為正
    只要統一方向,後面的開發就輕輕鬆鬆~
    接下來,我們需要定義什麼是 Frame rate

Frame rate 闡述

Frame rate簡單來說就是影格速率 = fps (frame per second)
代表著: 電腦一秒可以顯示幾個影格(frame) [frame/ s]
這個單位相當於頻率,那週期呢? 我們先上圖:
https://ithelp.ithome.com.tw/upload/images/20250819/20157653Up8je7gRjo.png
假設電腦** 1 秒可以產生5個影格**,則

  • 頻率(Frequency = Frame rate (fps)) f = 5 [frame/ s] : ** 1 秒 可以產生多少影格?**
  • 週期(Period) T = 1 / f = 1 / 5 [s/frame]每走 1格影格 花了幾秒鐘?

那,這跟我們的旋轉角色方向的速率有什麼關係呢?
假設我們每個迴圈,都按著 A , 持續遞增 0.1 [rad] 每個迴圈代表 1 frame,如果我們的電腦:1 秒能生成 5 個影格 (frame) -> f = 5 [frame/s]
代表
玩家 1 秒內就轉了 0.1 [rad/frame]* 5[frame/s] = 0.5[rad / s]!

直接上計算圖:
https://ithelp.ithome.com.tw/upload/images/20250819/20157653R9rQfYqBX0.png

那要如何避免呢? 我們可以利用 T = 1/f 的特性來讓旋轉速率下降,所以,我們可以另外乘上T 作為調節的參數(權重)使得新的旋轉角度速率為
0.1 * 5 * T = 0.1 * 5 * 0.2 = 0.1 [rad]
無論 f = 5、60 或 1000,最終旋轉角度仍然約是 0.1 [rad/s] ,因為 T 會自動抵消 f 帶來的差異。
這樣的話,旋轉速率就不再被電腦的硬體效能(影格速率 f)所限制了

今日總結

  • 角度旋轉定義回顧
  • 角度旋轉速率調變的方法

今日講解了旋轉角度的定義,明日直接上code來看看旋轉的速率吧~
繼續走下去~


上一篇
Day 18 | Ray Casting : 視角的轉動 - Part 1
下一篇
Day20 | Ray Casting: 視角的轉動 - Part 3
系列文
用 C++ 實作簡易第一人稱視角遊戲:從入門到理解 Ray Casting30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言