青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

醬壇子

專注C++技術 在這里寫下自己的學習心得 感悟 和大家討論 共同進步(歡迎批評!!!)

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  66 Posts :: 16 Stories :: 236 Comments :: 0 Trackbacks

公告

王一偉 湖南商學院畢業 電子信息工程專業

常用鏈接

留言簿(19)

我參與的團隊

搜索

  •  

積分與排名

  • 積分 - 388784
  • 排名 - 64

最新隨筆

最新評論

閱讀排行榜

評論排行榜

        OpenGL,或者D3D 的深度緩存都存在精度問題,在最新的Nvidia GF8 系列顯卡中已經開始應用float point depth buffer. 而在此之間,深度緩存其實只有位平面的概念. 這隨API的不同,都需要指定后緩存深度緩存精度, Depth ,我一般使用24位,也就是D3D中常見的 D24S8. 但除非你是用浮點,否則都會有精度損失的問題,這種情況總是發生在2個幾乎共面的片面,他們投影在后裁減平面時都會被賦予一個深度(當然,如果深度緩存可寫的話),而上面已經說過,目前來說,深度只是位平面, 你可以把他假設為這樣的形勢

depth              w
0                  [near_clip,               near_clip + 0.1]
1                 [near_clip + 0.1,        near_clip +0.2]
2                 [near_clip + 0.3 ,        near_clip +0.4]
........
max             [far_clip - 0.1,                 far_clip]
上面假設硬件的最小深度單元 r = 0.1

那么將會出現這樣的問題.
當2個片元距離近裁減平面 w  落在同一個區間的時候,他們的深度是相等的. 最終你所看到的結果,就是下面的這種樣子:

注意到藍色線框里面.


要解決這個問題, 你只要google 或者去 beyond3d,等論壇,搜索 depth fighting ,得到的答案往往就是設置深度偏移. OpenGL : Polygon offset. D3D: Depth Bais.
拿OpenGL 來說,就是對有存在深度沖突的2個 Mesh Object  A,B如下方式渲染.
A.Render();
glEnable(GL_POLYGON_OFFSET_FILL);
glPolygonOffset(
0.0f,-1.0f);
B.Render();
glDisable(GL_POLYGON_OFFSET_FILL);

這是一個不錯的方法,但是實際操作起來很麻煩,而且沒有效率. 注意到,你必須一先一后的渲染這2個對象, 拿上圖來說,我需要在MAX 中把手套和手臂脫離,形成一個獨立的節點,然后我起碼需要新建立2個頂點緩存,并在渲染的過程中設置2次.這對于帶寬是個不小的代價.所以我不是很贊成這樣去處理,當然,有的時候無法避免了,也會如此..

       如果避免發生Z-Fighting 才是關鍵. 注意到上面的depth - w 的位平面對應關系. 由于硬件都只能支持一定的深度格式,也就是說,Depth bits 是一定的,假為 D.而頂點的投影深度則毫無限制,他可以是 near_clip ---> far_clip 的任意一個浮點數.因此
      dw/D = (far_clip - near_clip)/near_clip;
    從上面可以看出, 要想dw 更精確,那么 near_clip 必然要更大(適用范圍是far_clip >> near_clip).
上面那張存在depth-fighting 的截圖當時的情況是 near_clip :0.0001 far_clip : 64000.0
下面的是在near_clip 0.1 far_clip 不變.


繼續提高定點投影深度,也不會出現難看的深度沖突了.
posted on 2009-03-27 11:31 @王一偉 閱讀(4122) 評論(7)  編輯 收藏 引用

Feedback

# re: 最近做地圖遇到Z-buffer精度問題 2009-03-27 11:35 @王一偉
找到一些英文資料
Depth Bias收藏

An application can help ensure that coplanar polygons are rendered properly by adding a bias to the z-values that the system uses when rendering the sets of coplanar polygons. To add a z-bias to a set of polygons, call the SetRenderState method just before rendering them, setting the State parameter to D3DRS_DEPTHBIAS, and the value parameter to a value between 0-16 inclusive. A higher z-bias value increases the likelihood that the polygons you render will be visible when displayed with other coplanar polygons.


Offset = m * D3DRS_SLOPESCALEDEPTHBIAS + D3DRS_DEPTHBIAS

where m is the maximum depth slope of the triangle being rendered.

m = max(abs(delta z / delta x), abs(delta z / delta y))

The units for the D3DRS_DEPTHBIAS and D3DRS_SLOPESCALEDEPTHBIAS render states depend on whether z-buffering or w-buffering is enabled. The application must provide suitable values.

The bias is not applied to any line and point primitive. However, this bias needs to be applied to triangles drawn in wireframe mode.

// RenderStates
D3DRS_SLOPESCALEDEPTHBIAS, // Defaults to zero
D3DRS_DEPTHBIAS, // Defaults to zero

// Caps
D3DPRASTERCAPS_DEPTHBIAS
D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS

  回復  更多評論
  

# re: 最近做地圖遇到Z-buffer精度問題 2009-03-27 11:37 @王一偉
另外一篇 英文資料(轉自 http://www.intel.com/cd/ids/developer/apac/zho/dc/games/optimization/170939.htm?page=4
使用Z-Bias解決Z-Fighting問題的替代方案
|
目錄
Introduction
Alternative Method 1: Projection Matrix
Alternative Method 2: Viewport
Alternative Method 3: Depth Bias
Conclusion
Additional Resources

Alternative Method 3: Depth Bias

The last method addressed in this article uses the DirectX 9 Depth Bias method to solve z-fighting. A check to verify that the graphics card is capable of performing depth bias is needed. Intel Integrated Graphics will support depth bias in the next graphics core code named Grantsdale. After checking the cap bits to verify that depth bias is supported, this technique merely requires setting D3DRS_SLOPESCALEDEPTHBIAS and D3DRS_DEPTHBIAS to the proper values to get the desired effect.

The following code snippet shows the depth-bias alternative to using a DirectX z-bias call:

BOOL m_bDepthBiasCap; // TRUE, if device has DepthBias Caps

// Globals used for Depth Bias
float g_fSlopeScaleDepthBias = 1.0f;
float g_fDepthBias = -0.0005f;
float g_fDefaultDepthBias = 0.0f;

// Check for devices which support the new depth bias caps
if ((pCaps->RasterCaps & D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS) &&
(pCaps->RasterCaps & D3DPRASTERCAPS_DEPTHBIAS))
{
m_bDepthBiasCap = true; // TRUE, if DepthBias Caps
}

// Billboards are rendered...

// DepthBias work around
if ( m_bDepthBiasCap ) // TRUE, if DepthBias supported
{
// Used to determine how much bias can be applied
// to co-planar primitives to reduce z fighting
// bias = (max * D3DRS_SLOPESCALEDEPTHBIAS) + D3DRS_DEPTHBIAS,
// where max is the maximum depth slope of the triangle being rendered.
m_pd3dDevice->SetRenderState(D3DRS_SLOPESCALEDEPTHBIAS, F2DW(g_fSlopeScaleDepthBias));
m_pd3dDevice->SetRenderState(D3DRS_DEPTHBIAS, F2DW(g_fDepthBias));
}

// Posters are rendered...

if ( m_bDepthBiasCap ) // TRUE, if DepthBias supported
{
// DepthBias work around
// set it back to zero (default)
m_pd3dDevice->SetRenderState(D3DRS_SLOPESCALEDEPTHBIAS, F2DW(g_fDefaultDepthBias));
m_pd3dDevice->SetRenderState(D3DRS_DEPTHBIAS, F2DW(g_fDefaultDepthBias));
}

. . .

Like the other methods (and like the original z-bias), some tweaking may be necessary, but using D3DRS_SLOPESCALEDEPTHBIAS and D3DRS_DEPTHBIAS is a relatively consistent technique for resolving z-fighting issues across a wide selection of graphics devices. The figure below shows the result of this alternate solution:


Figure 4. Z-fighting solved with depth bias solution.
As Figure 4 shows, care should be taken for adjusting the D3DRS_SLOPESCALEDEPTHBIAS and D3DRS_DEPTHBIAS. They can be very sensitive and lead to other issues like the problem below for distant objects:


Figure 5. Depth-bias solution possible issue: unwanted overlapping polygons.  回復  更多評論
  

# re: 最近做地圖遇到Z-buffer精度問題[未登錄] 2009-06-16 11:32 dd
dw/D = (far_clip - near_clip)/near_clip;
這個公式怎么得出來的?  回復  更多評論
  

# re: 最近做地圖遇到Z-buffer精度問題[未登錄] 2009-06-16 11:34 dd
(x,y,z,1) *
xScale 0 0 0
0 yScale 0 0
0 0 zf/(zf-zn) 1
0 0 -zn*zf/(zf-zn) 0
之后,z變為了z'
z' = zf*(z - zn)/(zf-zn)
怎么會是dw/D = (far_clip - near_clip)/near_clip?  回復  更多評論
  

# re: 最近做地圖遇到Z-buffer精度問題 2009-09-05 21:44 hi
good  回復  更多評論
  

# re: 最近做地圖遇到Z-buffer精度問題 2010-04-02 16:47 tsyat
這個東西好像沒法用哦  回復  更多評論
  

# re: 最近做地圖遇到Z-buffer精度問題 2011-03-28 20:35 David Lee
懶東西,最近怎么不跟新博客了?  回復  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久www成人免费毛片麻豆| 亚洲深夜福利网站| 久久久久一区二区| 伊伊综合在线| 亚洲国产成人精品视频| 欧美成人免费在线| 中文欧美字幕免费| 亚洲永久精品国产| 国内精品久久久久久久影视麻豆| 久久综合国产精品| 欧美/亚洲一区| 亚洲一区二区三区久久| 亚洲欧美一区二区三区在线| 国内精品久久国产| 日韩天堂在线观看| 国精产品99永久一区一区| 欧美肥婆bbw| 国产精品久久久久久久久婷婷 | 99国产精品久久久| 亚洲伊人网站| 亚洲日本成人| 亚洲欧美日韩国产一区| 亚洲区一区二区三区| 亚洲午夜国产成人av电影男同| 国产午夜精品麻豆| 亚洲精品一区在线观看香蕉| 国产午夜精品视频免费不卡69堂| 亚洲大片精品永久免费| 国产精品自拍三区| 91久久精品国产91久久性色tv| 国产精品一区久久久久| 亚洲黑丝在线| 狠狠综合久久| 亚洲一区三区视频在线观看| 亚洲精品久久久久久一区二区| 亚洲摸下面视频| 一区二区精品在线观看| 久久一日本道色综合久久| 亚洲欧美日韩一区| 欧美精品导航| 亚洲高清久久久| 尤物在线精品| 欧美一区二区三区在| 亚洲影音一区| 欧美日韩国产成人高清视频| 欧美1区视频| 韩国女主播一区| 亚洲欧美综合一区| 午夜性色一区二区三区免费视频| 欧美1区2区3区| 猛干欧美女孩| 在线日韩成人| 久久亚洲国产精品一区二区| 久久久久久久久久久久久女国产乱| 欧美日韩视频一区二区| 亚洲免费福利视频| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 国产精品日韩欧美大师| 亚洲精品国产精品国自产在线| 在线精品亚洲一区二区| 久久人人爽爽爽人久久久| 久久久人成影片一区二区三区| 国产精品一二| 欧美一区网站| 久久尤物视频| 亚洲国产精品久久久久| 免费的成人av| 亚洲区欧美区| 亚洲一级特黄| 国产精品欧美日韩一区| 午夜亚洲福利| 久久亚洲春色中文字幕久久久| 国内精品久久久久国产盗摄免费观看完整版 | 亚洲另类自拍| 欧美三级免费| 小黄鸭精品aⅴ导航网站入口| 久久精品国产清高在天天线 | 国产精品一级二级三级| 午夜国产精品影院在线观看| 久久乐国产精品| 亚洲国产精品精华液2区45| 欧美激情一区二区三区| 一本色道久久99精品综合| 小处雏高清一区二区三区 | 欧美丝袜一区二区三区| 亚洲自拍三区| 欧美黑人在线观看| 亚洲一区二区三区精品视频| 国产亚洲精品bv在线观看| 久久女同互慰一区二区三区| 亚洲欧洲在线看| 欧美一站二站| 亚洲另类春色国产| 国产美女扒开尿口久久久| 麻豆精品精品国产自在97香蕉| 亚洲精品日韩综合观看成人91| 午夜精品国产更新| 亚洲电影中文字幕| 欧美日韩一区视频| 久久美女性网| 亚洲欧美日韩国产成人| 亚洲国产精品999| 欧美自拍偷拍午夜视频| 亚洲精品日韩一| 国产伦精品一区二区三区在线观看| 久久在线观看视频| 亚洲一区三区在线观看| 亚洲国产女人aaa毛片在线| 久久aⅴ国产紧身牛仔裤| 亚洲精品一区中文| 黄色成人91| 国产免费亚洲高清| 欧美日韩免费高清| 欧美成人精品在线观看| 欧美在线观看视频在线| 国产精品99久久久久久久久久久久| 欧美14一18处毛片| 久久精品欧美日韩| 亚洲永久免费av| 日韩亚洲欧美中文三级| 亚洲国产导航| 黄色成人在线网址| 国产欧美日韩专区发布| 欧美性jizz18性欧美| 欧美激情久久久久久| 久久永久免费| 久久久91精品国产一区二区精品| 亚洲图片欧洲图片av| 99国产精品久久| 91久久综合亚洲鲁鲁五月天| 欧美大色视频| 欧美高清在线视频| 欧美成人午夜激情| 蜜臀av一级做a爰片久久| 久久亚洲欧洲| 久久亚洲捆绑美女| 麻豆精品在线视频| 欧美va亚洲va香蕉在线| 免播放器亚洲一区| 男女视频一区二区| 欧美韩国日本综合| 亚洲福利国产精品| 亚洲国产高清一区二区三区| 亚洲国产成人不卡| 亚洲日本中文字幕免费在线不卡| 亚洲国产免费看| 亚洲精选一区| 一本一本久久| 性欧美xxxx视频在线观看| 欧美怡红院视频一区二区三区| 欧美一区二区成人| 久久在线视频| 欧美精品免费播放| 国产精品家庭影院| 国产主播一区二区三区| 亚洲国产精品一区制服丝袜| 亚洲黄色性网站| 国产精品99久久久久久久久| 欧美亚洲一区二区三区| 久久天堂av综合合色| 欧美激情第3页| 9国产精品视频| 欧美一级免费视频| 男女激情视频一区| 国产精品豆花视频| 狠狠88综合久久久久综合网| 91久久久亚洲精品| 午夜精品视频在线| 欧美成人a∨高清免费观看| 亚洲精品日产精品乱码不卡| 亚洲你懂的在线视频| 久久久亚洲欧洲日产国码αv| 欧美精品在线网站| 海角社区69精品视频| 一区二区欧美日韩| 久久久久久久一区| 亚洲精品字幕| 久久久99久久精品女同性| 欧美午夜三级| 亚洲国产精品高清久久久| 午夜一区不卡| 亚洲国产精品视频一区| 欧美在线1区| 欧美体内谢she精2性欧美| 激情欧美一区二区三区| 亚洲免费在线视频一区 二区| 久久这里只精品最新地址| 亚洲视频福利| 欧美黄色aa电影| 一区二区亚洲精品国产| 亚洲天堂网在线观看| 欧美高清一区二区| 久久精品91| 国产美女一区二区| 亚洲综合日韩中文字幕v在线| 亚洲国产成人久久综合| 久久久久九九视频| 国产日韩欧美一区二区三区在线观看 | 国产精品主播| 亚洲一区二区欧美日韩|