2011-08-25 52 views
1

我正在嘗試編程一個4d的小遊戲。 我使用C++和OpenGL。本網站帶來了如何提高4D圖像一個很好的解釋:
http://eusebeia.dyndns.org/4d/vis/07-hsr.html#Enhancing_4D_Projection_Images4維隱藏表面去除

他們告訴申請四維隱面消除(HSR)算法。
我不得不說我是一個編程和算法的新手,我真的不知道從哪裏開始組裝一個4d HSR,也不是一個3d。
如果有人有這些算法的經驗,可以解釋我如何在C++中翻譯它?

BTW:我在投影3D四維空間,所以我需要爲頂點刪除算法,而不是像素的修改,或者至少是我想......我可能是錯的...

回答

0

在許多情況下,3D隱藏表面移除意味着當您繪製表面時,您還記得您繪製的每個像素的深度(與「眼睛」的距離)。當你去繪製一個已經繪製出曲面的曲面時,如果它比眼睛已經存在的像素靠近眼睛,那麼你只繪製該像素。在3D圖形庫中,OpenGL(將3D場景描述投影到2D顯示器),這被稱爲Depth Buffer Test

您可能還會跟蹤表面朝向哪個方向。如果它遠離「眼睛」,那麼根本不要畫它。在OpenGL中,這是調用backface culling。如果您想創建您的文章所描述的分層透明效果,那麼您必須根據深度對像素進行排序並首先繪製最深的像素。然後在頂部繪製更接近的像素,用舊像素顏色和當前曲面顏色的凸組合替換當前像素。

對於你的4d情況,你需要決定什麼是投影4d的東西。我認爲任何3D動畫模型實際上都是一個4d模型。如果你願意的話,你可以像這個模擬的壁球球員一樣畫出所有的幀: 4d racquetball player

在這張圖片中,時間在這裏用灰度值表示。所以你可以看到球員在球場上移動並擊球,所有的都是一個靜態的圖像。當然,一個適當的4d到2d的投影可能不會顯示一組離散的時間框架,但是寧願連接連接時間的頂點,這樣就不會看到一堆單獨的球,而是看到一個'管'代表球的軌跡。但是,在您鏈接的文章中提到了類似的情況,在某些情況下,這可能會減少溝通。

+0

謝謝你的直接和準確的答案,但我投影3D的4D空間,所以我需要像深度緩衝區,頂點,而不是像素的算法:(我讀了關於這些(深度緩衝區,背面剔除)算法,看起來很複雜,我:( – Pella86