[問題] 在Direct3D載入.obj檔的問題

看板C_and_CPP (C/C++)作者 (怪龍-卡西歐魯)時間15年前 (2011/01/15 12:43), 編輯推噓2(208)
留言10則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VS2008 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) Direct3D(不過不太重要) 問題(Question): 是這樣的 我正在照著這個網站的教學寫Direct3D的程式 http://www.directxtutorial.com/Tutorial9/B-Direct3DBasics/dx9B7.aspx 這裡是我寫的程式 http://nopaste.info/9f5a6f9ac7.html 基本上其他地方都和教學差不多 自己有改的部分只有258行開始的init_graphics()函式 也只是改一些點的位置而已 跑出來的東西很奇怪,不過那不是重點 主要是在這個程式裡面記載各個vertex和index的陣列是寫死的 而我希望能夠讓程式載入外部的obj檔 並從obj檔裡面parse出需要的資料 於是我寫了一個parser http://nopaste.info/d6d3bb5ff5.html 而拿來做測試資料的obj檔內容如下: v 1 1 1 v 1 1 -1 v 1 -1 1 v 1 -1 -1 v -1 1 1 v -1 1 -1 v -1 -1 1 v -1 -1 -1 f 1 3 4 2 f 5 7 8 6 f 1 5 6 2 f 3 7 8 4 f 1 5 7 3 f 2 6 8 4 (理論上,這個obj檔的內容會跑出和上面那支程式一樣的結果) 這個parser很單純的把obj檔裡面的各個數字做分類 v開頭的話 就把後面三個數字放到vertices[]陣列的三個座標裡面 而f開頭的話 就存到indices[]陣列裡面 這個parser我已經執行過很多次了,沒有問題 但是當我把parser部分整合到Direct3D程式的時候 卻出現了很大的問題 下面是我整合後的程式 http://nopaste.info/19c1bf377a.html 有換掉的地方就是把原本寫死的陣列換成讀進obj檔的程式而已 但是這樣在compile的時候會出現錯誤 stack around the variable 'temp' was corrupted 為什麼會發生這樣的錯誤呢? 我想錯誤應該不是在處理檔案的部分 因為我把parser獨立執行是可以的 所以我想是我做的陣列和原本寫死的陣列不同 但是比對了很多次,感覺都沒有什麼不一樣的地方 想請教板上的各位網友自己是在哪裡犯了錯誤這樣 在這邊先感謝各位的解答m(_ _)m -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 70.162.57.56

01/15 13:39, , 1F
有沒有行號啊 ... 你有兩個 temp 耶
01/15 13:39, 1F

01/15 13:48, , 2F
可是兩個temp是在不同block裡面宣告的,這樣會有影響嗎?
01/15 13:48, 2F

01/15 13:50, , 3F
主要有問題的應該是在260~320行這段
01/15 13:50, 3F

01/15 13:51, , 4F
系統說的那個temp是指286行宣告的那個temp的樣子
01/15 13:51, 4F

01/15 14:56, , 5F
是不是因為fscanf(fptrs,"%d",&temp) %d你傳short*給他
01/15 14:56, 5F

01/15 14:57, , 6F
他把 short* 用 int* 接,結果不曉得把後面什麼值蓋掉了吧
01/15 14:57, 6F

01/15 14:58, , 7F
284 開始的 block 改成 fscanf(fptrs,"%hd",&temp) 試試看?
01/15 14:58, 7F

01/15 15:01, , 8F
不過我自己測試,debug模式會跟你一樣壞掉release就沒事 @@
01/15 15:01, 8F

01/15 17:00, , 9F
因為他說堆疊爆炸 ... 所以我想是你的區域變數存取出問題
01/15 17:00, 9F

01/16 01:38, , 10F
把%d改成%hd後問題就解決了,感謝各位的解答
01/16 01:38, 10F
文章代碼(AID): #1DCIODbq (C_and_CPP)
文章代碼(AID): #1DCIODbq (C_and_CPP)