2011-11-26 89 views
0

我寫過一個Vector類,用於3D「引擎」。它在編譯調試模式時的工作方式與預期相同,但在發佈模式下編譯時,顏色完全錯誤。不是我指定的顏色,它變成了隨着相機改變的純色。在發佈模式下編譯時出現奇怪的結果

我拍下了照片來展示它的樣子:debug moderelease mode。請注意,我也使用這個類來轉換我的頂點,並且在調試和發佈模式下都可以正常工作。

這是我如何將顏色向量傳遞給我的着色器(僞代碼)。

Vector3 Diffuse = Vector3(0.3f, 0.5f, 1.0f); 
Vector3 Ambient = Vector3(0.3f, 0.3f, 0.3f); 

Shaders.SetUniformData("AmbientColor", sizeof(float) * 3, 1, &Ambient); 
Shaders.SetUniformData("DiffuseColor", sizeof(float) * 3, 1, &Diffuse); 

如果你需要看到更多的代碼,請告訴我們。

這裏是我的Vector類源代碼:http://pastebin.com/spy7FWFg(必須刪除http://因爲我只允許發佈2個超級鏈接)。 這一直困擾我一段時間,所以任何幫助非常感謝。

編輯:好吧我解決了它!呵呵,這是沒有錯的Vector類,它是我如何將它發送到着色器...

事情是我有2個功能,我已經把數據傳遞給着色器,第一個是我展示的在第一篇文章和其他(我真正使用的)需要一個UNIFORM結構(自定義結構)的數組,顯然這是一個在發佈模式下不工作...

對不起,浪費你的時間和謝謝爲你的幫助=)

+1

你的Vector類對我來說看起來非常完美。由於這種情況只發生在發佈模式中,所以請在所有代碼中查看(或尋找)未初始化的變量(通常在調試模式下,變量會被初始化,但它們不處於發佈模式)。 –

+0

如何向我們提供矢量類本身的源代碼?否則,這只是猜測,什麼是沒有正確初始化。 – datenwolf

+0

@datenwolf源代碼在我的文章中鏈接,你可能錯過了它,因爲它是純文本而不是真正的鏈接。這裏再次是:http://pastebin.com/spy7FWFg – Traxmate

回答

0

我同意cli_hlt,首先要尋找的是未初始化的變量在你的代碼中的任何地方。另外一個,有點不太可能是,雖然你可以嘗試儲存您在一條直線float[]環境和漫反射顏色經過他們面前:

float diffuseArray[] = { Diffuse.X,Diffuse.Y,Diffuse.Z }; 
float ambientArray[] = { Ambient.X,Ambient.Y,Diffuse.Z }; 
Shaders.SetUniformData("AmbientColor", sizeof(float) * 3, 1, ambientArray); 
Shaders.SetUniformData("DiffuseColor", sizeof(float) * 3, 1, diffuseArray); 

由於是,你正在工作(比較合理的,我認爲)假設所有Vector的成員變量都會顯示在內存中,在Vector對象的前12個字節中,所以傳入向量的指針應該相當於傳入一個包含三個數組的三維數組。我相信這通常是有效的,但如果您確定問題出現在給定的代碼行中,則可能值得嘗試。

+0

這樣做雖然做的工作,但它有點乏味......我已經檢查,如果它是通過放置斷點來獲得地址,然後檢查與欺騙引擎順序,這是爲了這張圖片顯示:http:// localhostr.com/file/RvgSnMw/cheat%20engine%20values.PNG 它應該不是一個未初始化的變量的問題,因爲類自動初始化所​​有變量爲0,但是,所有這些對我來說都是新鮮的,所以我可能是錯的:P – Traxmate

+0

既然它是這樣工作的,爲什麼不在你的頂點類中創建一個返回浮點數組的方法,這樣你就不必顯式地抓取每個組件? – NickLH

+0

謝謝大家! – Traxmate

相關問題