2009-11-12 159 views
2

我是IT的學生,我不得不在VB6的一個項目,我想做出3D軟件渲染,但我真的不知道從哪裏開始,我發現了一些教程,但我想一些深入的數學和算法,我會喜歡的東西,顯示如何使3D轉換,相機,燈光,陰影...3D軟件渲染與VB6

無所謂使用的編程語言,我只需要一些資源告訴我如何做到這一點。

所以我只是想知道在哪裏可以找到一些資源,或者你能告訴我一些源代碼,並告訴我從哪裏開始。

或者如果你們中的任何人對VB6項目有更好的主意。

謝謝。

+4

我只是好奇他們爲什麼要使用VB6? – bytebender 2009-11-12 17:45:30

+0

哪個虐戀大學在其課程中仍然有VB6? – 2009-11-12 17:46:58

+0

其實我寫了一篇關於在VB6中實現3D渲染器的文章。我永遠把它發佈到CompuServe。如果你有權訪問舊的CompuServe論壇,你應該查看它。 :-) – 2009-11-12 17:50:25

回答

3

很多年前,我做了一個陰影三角形渲染器,使用庫調用來繪製三角形。這是一種相當天真的方法,但使用VB6可以達到相同的效果。我從Foley等人的「計算機圖形學原理和實踐」中獲得了所有的數學算法&。一些零件現在已經過時了,但我認爲你會發現它對這個項目非常有幫助,例如它可以以合理的價格從亞馬遜購買。

一個簡單的方法可能是:

  1. 讀取模型文件三角形
  2. 使用矩陣來考慮攝像機的位置
  3. 項目三角點變換每個三角形到2D
  4. 繪製2D三角形(可能using GDI

這涵蓋了線框查看。要將其擴展到隱藏表面去除,您需要確定哪些三角形在前面。兩種可能的方式:

  1. Z順序排列三角形並繪製距離相機最遠的那個。這很簡單,但效率很低,如果有很多三角形,並且當順序不完全正確時可以產生重疊的三角形效果。您還必須決定如何按照範圍按質心對三角形進行排序...
  2. 使用軟件深度緩衝區。這會帶來更好的結果,但是要實施更多的工作。您將不得不編寫自己的三角形繪圖代碼,因此不能依賴GDI。請參閱bresenham's line algorithm以及相關算法,以瞭解如何執行此操作的填充三角形。

之後,你還需要一些基於照明的陰影。這些計算在計算機圖形學原理和實踐中涵蓋。對於簡單陰影,您可以使用gdi繪製三角形,但如果要繪製陰影或phong陰影,則顏色值會跨三角形變化。解決這個問題的方法之一是將三角形細分爲更小的三角形,但效率不高,不會給出非常好的結果。更好的做法是按照上面對軟件深度緩衝區的要求自己繪製三角形。

一個很好的擴展將是支持三角形以外的基元。基本的方法是在你閱讀它們時將基元分解成三角形。

祝你好運 - 可能是一個有趣的項目。

+0

感謝您提供的信息,我將搜索這本書,看看我能否在那裏找到答案。 – Andrei 2009-11-14 16:00:04

1

VB6不是最適合的語言是做數學和3D圖形,並考慮到你有沒有對上述以前的知識要麼,我會建議你選擇一些不同的(容易)。

因爲它是Visual Basic,所以你可以嘗試更多面向窗體的東西,那就是語言的原意。

+0

是的,我知道,但我需要在VB6中完成這個項目,而且我必須使用很多算術和數學,所以我想不出其他任何東西。 – Andrei 2009-11-12 17:49:42

0

作爲一個整體項目的3D軟件渲染器是相當複雜的,如果你以前從未做過。我會建議更小的東西 - 比如只做3D部分並使用線條進行渲染,或者只寫一個陰影三角形渲染器(無論如何都是3D渲染器的基礎)。

簡單的東西一點點,而不是試圖寫在第一次就一個完全成熟的3D軟件渲染器 - 尤其是在VB。

+0

我並不需要製作完整的3D軟件渲染器,但至少需要有相機,燈光,陰影和轉換。 – Andrei 2009-11-12 18:00:15

0

軟件渲染器是一個非常困難的項目和語言VB6完全不顯示(像該類別中的一個任務++的方式..),反正我可以建議你我使用了一些偉大的著作:

  1. 着色器:http://wiki.gamedev.net/index.php/D3DBook:Introduction_%28Volume%29
  2. 數學:3D Math Primer for Graphics and Game Development

還有其他2本書。即使他們是VB.NET,你可以找到一些有用的代碼:

  1. .NET Game Programming with DirectX 9.0
  2. Beginning .NET Game Programming in VB .NET
+0

非常感謝,我知道C++是最好的,但我必須使用VB6。我會檢查這本書的。 – Andrei 2009-11-12 17:58:30

5

我以前的職位不同意,一個3D渲染其實是非常簡單的。然而,高質量的3D渲染器很難。

  1. 獲得一堆3D數據,三角形是最簡單的。
  2. 瞭解同質座標和轉換的偉大4x4矩陣。
  3. 通過位置和旋轉定義相機(用4x4矩陣表示)。
  4. 通過本相機變換您的3D幾何體。
  5. 執行角度劃分和縮放到你的窗口。這將您的3D數據轉換爲2D。
  6. 將數據渲染爲2D。

現在你將失去一個深度緩衝區,所以在開始時堅持線框。 :-)

不要聽這些可以說話的人,出去玩得開心!

+0

是的,我一定會努力做到這一點,我也不會改變主意。我閱讀了關於這些事情的所有信息,並希望找到更多信息。 你剛纔說你已經爲此寫了一篇教程,你有鏈接嗎? – Andrei 2009-11-12 18:04:50

+0

祝你好運,明年的主題,然後xD – fortran 2009-11-12 19:53:03

1

還有就是3D engine list其中列出了三個發動機以純的鹼性(一個矛盾)+源代碼和它們中的一個是在Visual Basic(Dex3D)

DeX3D是一個開源3D引擎 完全在編碼Visual Basic從 Jerry Chen([email protected])。

  • 高洛德着色
  • 透明度
  • 起霧
  • 全方位和射燈
  • 分層齧合
  • 粒子系統
  • 支持三維工作室文件
  • 貝塞爾曲線段
  • 2.5 d文本
  • Visual Basic源

的更多信息,屏幕截圖和 源可以在Dex3D 主頁上找到。 (< =死鏈接)

+0

是的,我找到了早期版本的源代碼,我會嘗試看看它是如何工作的。 – Andrei 2009-11-12 18:17:04

0

我認爲你可以採取兩種方式,直接X的方式,並使用DirectX 8具有VB 5-6的支持。我發現了一個頁面http://www.gamedev.net/reference/articles/article1308.asp

你可以隨時編寫一個引擎組,但通過這樣做,你將需要像Frank Krueger所建議的一些基本的線性代數。

+0

我想使我的項目不使用DirectX和其他3D引擎,我想從基本代碼開始做一些事情,但如果我不能,我一定會嘗試使用DirectX,否則我會嘗試製作矢量繪圖應用程序。 – Andrei 2009-11-12 18:32:06