簡體   English   中英

3D等效位圖(bmp)

[英]3D Equivalent of Bitmap (bmp)

就像位圖(bmp)只是表示白/黑或顏色的二維數組一樣 - 是否有人知道一個簡單的三維位圖的類似“結構”類型? 換句話說,表示黑/白或顏色的三維值數組?

看起來有很多問題可以通過這種“點雲”類型的結構相對容易地解決。

換句話說,在沒有進入整個3d渲染世界的情況下,一些問題似乎可以通過更簡單的數據結構來解決,而且通常涉及有效管理3d對象(使用OpenGL,DirectX,Axiom,GDI +等)的數學要少得多。

據我所知,這種結構在各種矢量上都不會“高效” - 但似乎可能存在一些似乎適合3d對象的“模型”的問題。

使用算法從其他3d文件類型(例如STL,Mesh,POV,BLEND等)生成這樣的點雲也是有幫助的。 也許其中一個已經是這樣的結構? (新手):)

任何建議或信息非常感謝。 提前致謝。

沒有什么可以阻止您使用3D數組來存儲像素數據,除了存儲它的內存。 像這樣:

struct Pixel {
    int Red;
    int Green;
    int Blue;
}

public Pixel[,,] myPix3D = new Pixel[300, 300, 300];

這就是“Bitmap的3D等價物”

或者,您可以存儲每個像素及其位置,以節省內存。 這樣,您不會為對象中的空白存儲任何內容。

struct Pixel {
    int Red;
    int Green;
    int Blue;
    double X;
    double Y;
    double Z;
}

如果您從像MRI或CAT掃描儀那樣進行非常詳細的3D掃描,這些結構將是有用的,事實上,來自這種掃描的“切片”集合基本上是相同的。 大多數時候,我們只關心盡可能快地將可見像素放在屏幕上,並且存在更好的結構,例如矢量模型,三角形集合等。

另一種存儲3D圖像的方法是深度圖,該3D圖像實際上經常使用。 對於每個像素,您存儲一個值,指示它與“屏幕”的距離或投影表​​面的距離,並在隨后的繪圖操作中,您跳過任何深度大於當前像素的像素,因為它不會是可見。 (也稱為Z緩沖)

還請注意,當我們經歷實際渲染3D對象的過程時,我們首先在3D空間中創建它們 - 但我們通常不對這些對象進行紋理映射,因此“內存”表示暫時是您所使用的對象類型談論但是位圖總是包含所有像素,我們並不總是需要它,所以我們不會將實體對象渲染到3D空間,只渲染線框。 大多數圖形引擎在將臨時3D空間投影到2D之后應用紋理,並且已應用了許多優化。

您可以使用該中間步驟在3D空間中創建點,但是當我們感興趣的是渲染2D圖像時,這樣做是沒有效率的。 如果你對3D位圖有一些用處,可以很容易地從已經投影到3D空間的線框模型中創建它。

標准光柵化硬件和API本身支持3D紋理。 請注意,“點雲”並不是指任何類型的3D光柵 - 相反,點雲只是一個非結構化的點集合。

使用3D數據陣列最常見的問題是它占用了大量內存 - 即使數據適合可用內存,其龐大的大小也會使計算速度變慢。 有一些方法可以改進:我相信MIP貼圖支持3D紋理,而在主處理器端,八叉樹可以用來利用稀疏的3D數據。

但是,有許多應用程序,其中3D陣列是有意義的,沒有別的。 例如,MRI數據是自然密集的3D信息。

AFAIK沒有一個完善的光柵3D結構格式。 雖然柵格數據通常用於現代圖形,但它僅限於紋理,凹凸貼圖和高度場; 結構始終以向量術語定義。

我敢打賭,這種情況的原因是數據量x模型比率,有時在2D中有問題,但在3D中顯然處於劣勢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM