OpenGL ES 如何能看到一个物体内部和象3dmax中能只显示网格线
上一篇?OpenGL ES 正反面設置指令?中分析了正反面的判區方法,那么正反面有什么用呢?接下來我們就要引入一個叫做背面消除的概念。在3dmax中有個選項,當你用擠壓修改器擠出一個中空的長方體時,在外面是看不到里面的,這時就可以使用背面消除,把看不到的面消掉,而且結合正反面設置,把原本對著觀看者的面設成背面,就會被消除了,這時就只能看到遠離觀看者的面的在長方體內部的面兒了。
這就是房間要被觀看到里面內容時的做法,也有一種叫天空...的方法,不太懂,沒去研究。最終效果是有正對著觀看者的墻不被渲染,實際觀察發現,可能存在一面墻或兩面墻被打掉的可能性。
下面就來看看這個神奇的方法,我也是用了好久,反復調測,才用明白和真正理解,另外還有一個與背面消除使能配合使用的?glCullFace 指令,它能設置是背面消除,還是正面消除,或者正、背面同時消除。
邊翻譯以下內容,邊明白了另一個事情,在 3dmax 中是顯示一個幾何體的線框是可以的,那么在 OpenGL ES 中做起來也是很簡單的,就是用到?glCullFace 指令,傳遞?GL_FRONT_AND_BACK 這個參數,這樣就把正、反面都消除了,但僅消除面而已,任何一個三維體,都是通過點、面、線三者才繪制成的,如果點和線不繪制,就會漏光。
有了這些基礎知識,我們就能明白了,面只是點和線內部的區域,僅這部分不被繪制而已。
實際的計算繪制過程,也應該是根據提供的頂點,算出兩頂點之間的線,再根據一個三角形的三個頂點算出的三條件向中間面的區域進行插值計算得出相應片元的顏色,這就是柵格化操作吧,之前是看不明白的,這里確實讓人毛塞頓開。
其實寫博客的過程,也是一個思考、分析的過程。思想總是要表達出來,才能讓自已清楚地知道哪里有偏差,才能找到問題,做進一步的加工處理和修正。
?
Name
glCullFace — 指定是否正面或背面可以被消除 specify whether front- or back-facing facets can be culled
C Specification
| void?glCullFace( | GLenum?mode); |
Parameters
mode指定是否正面或背面侯選用于消除。標識常量?GL_FRONT,?GL_BACK, 和?GL_FRONT_AND_BACK 可作為參數。初始值是?GL_BACK。
Specifies whether front- or back-facing facets are candidates for culling. Symbolic constants?GL_FRONT,?GL_BACK, andGL_FRONT_AND_BACK?are accepted. The initial value is?GL_BACK.
描述 Description
glCullFace 指定在面消除啟用時,是正面還是背面被消除(按 mode 指定)。要啟用和禁用面消除,調用?glEnable?和?glDisable?指令并傳?GL_CULL_FACE 參數。面包括三角形、四邊形、多邊形和長方形。
glFrontFace?指定順時針面和逆時針面哪一個是正面哪一個是背面。參看?glFrontFace?。
glCullFace?specifies whether front- or back-facing facets are culled (as specified by?mode) when facet culling is enabled. Facet culling is initially disabled. To enable and disable facet culling, call the?glEnable?and?glDisable?commands with the argument?GL_CULL_FACE. Facets include triangles, quadrilaterals, polygons, and rectangles.
glFrontFace?specifies which of the clockwise and counterclockwise facets are front-facing and back-facing. See?glFrontFace.
注意 Notes
如果 mode 是?GL_FRONT_AND_BACK ,就沒有面被繪制了,但是其它圖元如點和線仍被繪制。
If?mode?is?GL_FRONT_AND_BACK, no facets are drawn, but other primitives such as points and lines are drawn.
錯誤信息 Errors
如果 mode 是一個不可接受的值,那么就會產生?GL_INVALID_ENUM 錯誤信息。
GL_INVALID_ENUM?is generated if?mode?is not an accepted value.
Associated Gets
glIsEnabled?with argument?GL_CULL_FACE
glGet?with argument?GL_CULL_FACE_MODE
See Also
glEnable,?glFrontFace
Copyright
Copyright?? 1991-2006 Silicon Graphics, Inc. This document is licensed under the SGI Free Software B License. For details, seehttp://oss.sgi.com/projects/FreeB/.
?
?
?
轉載于:https://www.cnblogs.com/riasky/p/3478484.html
總結
以上是生活随笔為你收集整理的OpenGL ES 如何能看到一个物体内部和象3dmax中能只显示网格线的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信小程序知识点梳理
- 下一篇: 当今世界最受人们重视的十大经典算法