圖形方面的函式的引數為什麼多用浮點?

時間 2021-05-05 19:30:52

1樓:Ivony

因為3D運算中存在大量的浮點運算。

浮點數有兩個特點:

1、數值範圍大。

2、有效數字長度固定(在特定進製下)。

這兩點對於3D運算中大量的運算是至關重要的。

考慮一根棍子,上面有三個點:

如果用浮點數表示,那麼不論這根棍子怎麼伸長縮短,這三個點的相對距離比例可以得到很好的保持。

而用整型就是做不到的,,,,,,,,,

考慮一下3D運算中有多少這種棍子伸長縮短的計算?

@金秉文 的答案基本是錯的。浮點數的值域比整型大得多,但精度卻未必,因為需要保留額外的位數來表示浮點,所以精度(有效數字長度)反而是不如相同長度的整型。

而且他的答案中的各種例子都是整數和小數的區別,而不是整型和浮點型的區別。如果要表示小數也可以用整型來實現定點小數。而浮點數的關鍵性優勢在於值域大的同時確保有效數字長度是固定的,這對於3D運算非常方便。

2樓:Milo Yip

計算機圖形學中,許多方程需要使用實數集。但計算機是無法表示連續實數集的,只能表示其離散的子集。

相對於浮點(floating point),另一種表示近似實數集的方式是定點(fixed point)。

這兩種方式各有優點。

由於浮點有廣泛使用的標準(IEEE 754),硬體有良好支援,使用上非常方便

但浮點也有其天生的弱點,其實在圖形程式設計中也會用到定點,特別是在儲存方面。例如紋理的格式多數為定點(0~255 常用作表示 0.0~1.

0),頂點位置/法線/骨骼權重等也會使用定點表示方式。在中間計算過程,使用浮點會比較方便

回應一下 @金秉文 答案中的這個說法:

我覺得原因主要是:利用相同的儲存空間,浮點數所能表示的數值範圍更大,而更大的數值範圍就意味著更高的精度。

在同樣的儲存空間下,數值範圍和精度是反比關係。浮點數常給予這種錯覺,因為乙個浮點數可以表示很小的值(如10^-38),但在表示較大的數值時,兩個相鄰的可表達數字間的差距會大得多。定點的方式是在整個範圍內,令可表示數字間有固定的間距。

描繪圖形細節。比如你有乙個巨大的三維場景,在使用相同的儲存空間的前提下,如果用浮點數來儲存這個場景中的所有麵片的頂點座標,比起用整數,可以更為細緻地描繪這個場景。

實際上,表示巨大場景時,浮點數常會成為問題。例如場景採用 1m 為 1 單位的話,由於32位單精度浮點數只能表示6~7個十進位的精度,在距離原點 100km (10^5 m)處,精度只有大約1cm~10cm。如果直接渲染,會造成許多著色問題。

用這個空間來做物理模擬的話問題更大。

再考慮用32位定點數,設 1m = 1000 單位,這樣可表示 >4000 km 的範圍,而精度是固定1mm。

3樓:王洋子豪

我不明白這個問題的意義。 當前的任何計算領域有不需要實數運算的麼?(除了數論之外,如果有請不吝賜教) 浮點數的出現甚至比計算機本身的歷史還要早。

實數運算的需求並非僅限於圖形學,而是廣泛的存在於幾乎所有計算領域。另外實數運算並非只有浮點運算一種形式,還有定點運算。當然,浮點運算的優點使得它被廣泛使用。

我有乙個問題反問提問者,你了解什麼是浮點運算和圖形學數學基礎麼?看上去如果你了解兩者你就不會問這個問題了。如果你不了解,不妨先提出這兩個問題。

4樓:

對於像三角函式的返回值這樣的資料,放大其倍數會改變量學含義,不過仍然可以用分數,也就是兩個整數來替換浮點數,當然,從浮點數到分數的轉換也要考慮精度的問題。事實上,如果你願意,所有的浮點數都可以通過這種方法轉變成整數,但你不嫌麻煩我還嫌麻煩呢...所以,只要可以,我們都應該用第1種方法來把浮點數轉變成整數。

高精度計算。在圖形處理的一些演算法中,精度特別重要。比如在光線追蹤演算法中,光線每經過一次反射,計算誤差都可能會被放大;再比如在物理模擬的演算法中,由於需要用迭代的方法解微分方程,計算精度的要求就更高了,初始的一點點誤差在經過成千上萬次迭代之後就慘不忍睹了。

所以,如果用整數運算把這些演算法實現出來了,那麼我們在使用這些演算法時,就要經常地對計算精度進行預估,並把資料進行合理地放大,而事實上,這種預估又很難,通常你能做的就是試探法,用maya做過場景繪製的同學都知道,花十幾個小時繪製乙個三維場景是再正常不過的事情了,所以試探是很痛苦的。如果我們使用浮點數,由於其值域很大,通常都不需要考慮計算精度,使用起來非常方便,限制比整數小很多。

5樓:

比如乙個圖形要旋轉幾度,這個是要和三角函式計算的,如果用整數,如何處理這個問題,雖然原始圖象位置都是整數,但處理以後必然變成小數了。

為什麼printf函式可以有任意多個引數?我們能否自己宣告乙個引數個數可變的函式?如何實現這種函式?

CWKSC Just For Fun C 可變引數函式 可變引數巨集 VA ARGS 額外的逗號 喵 但 printf 是怎樣按照 去判斷需要多少個,並且從編譯期出現警告。這個不知道。上面那篇文章 需要 include 包括乙個型別,四個巨集函式 型別 va list 用來儲存巨集va arg 與巨...

windows為什麼不新增圖形介面的定時關機功能

乙個自由的作業系統最重要的是給使用者定製的空間而不是什麼亂七八糟的功能都加進去。這類功能是無窮多的,你加了A功能,還會有人問你為什麼不加B 至於為什麼不加,就是因為人家覺得你們不會為了這個功能換系統 你要是什麼功能都加入了,那還要應用商店幹啥,改成遊戲商店好了。我更希望現在的智慧型手機除了桌面 設定...

C 為什麼函式引數個數不同還能出錯啊?

Wang Shuai 因為例項化Trait不在immediate context所以SFINAE不適用。看標準是怎麼說的,注意加粗部分 14.8.2p8 If a substitution results in an invalid type or expression,type deduction...