2012-07-05 82 views
0

我正在C中製作一個簡單的測試應用程序,該應用程序應該生成三維骰子。我將使用OpenGL來完成實際繪圖,但我無法弄清楚如何實際生成頂點。當然,這個測試的重點是看我的算法是否有效,但是我發現了一個我無法修復的重大邏輯錯誤。有人可以請我指出一篇文章,網站或解釋這個概念的東西嗎?如果不是,雖然我寧願自己實際執行,但C代碼是可以接受的。3D骰子生成算法

基本上,這是我做之前,我忘了我在做什麼的算法:

void calculateVertices(int sides) { 
    BOOL isDone = FALSE; 
    int vectorsPerSide = 3; 
    VDVector3f *vertices = malloc((sizeof(VDVector3f) * (sides + 1))); 
    VDVector3f *normals = malloc((sizeof(VDVector3f) * (sides + 1))); 

    while (!isDone) { 
     // Start by positioning the first vertex. 
     vertices[0] = VDVector3fMake(0.0, 0.0, 1.0); 

     for (int index = 1; index <= sides; index ++) { 

     } 

     // Not a match, increase the number of vectors 
     vectorsPerSide ++; 
    } 
} 

基本上,它一直循環,直到找到一個匹配。這聽起來對我來說效率不高,但我對如何做到這一點沒有其他想法。第一個頂點實際上將從數組中移除;我打算用它來創建第一面,這將用於正確定位其他面。

我的主要目標是能夠將數字(如30)傳遞給它,並讓它自動設置頂點。我會而不是有防止製造單面和雙面骰子,因爲我有一些特別的想法。我會將這些頂點輸入到別處。

在此先感謝您的幫助!

順便說一句,我有一個算法,可以規範化完成的頂點數組。你不必爲此煩心。

回答

2

我不認爲這是可以概括這一點。例如,你會如何做出公平的5或9面的死亡?我不認爲我曾經見過這樣的事情。在維基百科進行快速搜索可以發現,柏拉圖固體可能就是你所追求的。 http://en.wikipedia.org/wiki/Platonic_solid

+0

這是一個很好的觀點。我可以限制循環的數量或者其他東西,因爲我希望能夠生成更加「困難」的骰子,比如27個骰子。 – Justin 2012-07-05 23:38:49

+0

我只是看着鏈接,這是一個非常好的匹配問題。我可以誠實地說,我已經儘可能聰明地搜尋了幾個小時,我不相信你能夠找到這麼快。感謝您的鏈接。 – Justin 2012-07-05 23:42:02