[問題] openGL 3D投影圖

看板C_and_CPP作者 (我趴我趴我趴趴趴)時間14年前 (2009/11/05 02:00), 編輯推噓12(12018)
留言30則, 5人參與, 最新討論串1/1
請問一下 3Dmodel 我要在他各個角度做投影 並且取得各個投影圖深度的值(Gray Level呈現) 不知道有沒有什麼方法? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.133.9.110

11/05 02:09, , 1F
用 glReadPixels 讀 depth buffer
11/05 02:09, 1F

11/05 02:18, , 2F
如果你只是要呈現而沒有要得到資料 直接寫shader 效率也高
11/05 02:18, 2F

11/05 02:28, , 3F
資料和呈現都要~~所以應該是都要寫
11/05 02:28, 3F

11/05 08:53, , 4F
每個frame都去glReadPixels 雖然是可以 FPS肯定不會高到哪去
11/05 08:53, 4F

11/05 08:54, , 5F
就是1F l大說的, 用glReadPixels讀Depth Buffer....
11/05 08:54, 5F

11/05 08:55, , 6F
他要拿到Z值跟寫shader有什麼關係?? 把Z寫到FragData[0]
11/05 08:55, 6F

11/05 08:55, , 7F
以外的地方去!?
11/05 08:55, 7F

11/05 08:55, , 8F
可是要搞效率 又要扯到很多奇怪的技術= = 還是硬幹吧
11/05 08:55, 8F

11/05 08:57, , 9F
也許他只是想拿值在下個pass render 那就用FBO阿 我也不知道
11/05 08:57, 9F

11/05 08:57, , 10F
他拿值用意是什麼@@
11/05 08:57, 10F

11/05 09:00, , 11F
在他沒有描述清楚他的用途之前, 何必自己幫他假設這麼多
11/05 09:00, 11F

11/05 09:01, , 12F
事, 等他有需要自己提需求/問題就好了啊?_?
11/05 09:01, 12F

11/05 09:01, , 13F
雖然說要拿Z第一個想到是ShadowMap, 不過人家都要Gray
11/05 09:01, 13F

11/05 09:02, , 14F
因為他講了 各個角度 感覺就是連續的....
11/05 09:02, 14F

11/05 09:02, , 15F
Level了, 先不用考慮這麼多吧....Orz
11/05 09:02, 15F

11/05 09:04, , 16F
PG不要自己臆測人家需要什麼, 要溝通討論出來才對:)
11/05 09:04, 16F

11/05 09:56, , 17F
兩個方法 一個用 DepthTexture 一個用 Shader 寫
11/05 09:56, 17F

11/05 09:56, , 18F
但這兩者都會遇到非線性的 Z Buffer 問題
11/05 09:56, 18F

11/05 10:08, , 19F
請問一下W大~~gl_FragCoord.z會有非線性Z的問題嗎?_?
11/05 10:08, 19F

11/05 10:09, , 20F
或者是考慮到實際上Z Buffer內的值不是線性的?_?
11/05 10:09, 20F

11/05 10:11, , 21F
實際上的 Z Buffer, 不過兩者都可以利用特別 mProj 修正
11/05 10:11, 21F

11/05 10:12, , 22F
小弟我也在想, 原po如果要真實Z Buffer的值, shader就要
11/05 10:12, 22F

11/05 10:13, , 23F
自己橋值, 不然用gl_FragCoord.z就可以很簡單的output出
11/05 10:13, 23F

11/05 10:14, , 24F
255階Gray Level了Orz
11/05 10:14, 24F

11/05 10:15, , 25F
不過記得 VS 上面乘上 ViewProj 就應該不是了
11/05 10:15, 25F

11/05 10:16, , 26F
所以在 VS 上面還要多一個動作 linearZ = OUT.z / OUT.w;
11/05 10:16, 26F

11/05 10:17, , 27F
之後還要除上 Frustum 的 Far
11/05 10:17, 27F

11/05 10:27, , 28F
啊, 對喔~~忘了Z也經過了non-linear的transform了....
11/05 10:27, 28F

11/05 10:27, , 29F
不過這個問題應該可以用gl_FragCoord.w乘回來(還是除回
11/05 10:27, 29F

11/05 10:28, , 30F
來?)就可以了吧?? gl_FragCoord放的就是1/w的值@_@"
11/05 10:28, 30F
文章代碼(AID): #1AyS4wt4 (C_and_CPP)