日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

opengles 2.0 点精灵 多边形偏移等备忘

發(fā)布時間:2025/3/17 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 opengles 2.0 点精灵 多边形偏移等备忘 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
opengles 2.0 點精靈 多邊形偏移等備忘

opengl es 2.0只支持三種繪畫單元:
??? 三角形,直線和點精靈。
???
??? GL_TRIANGLES
??? GL_TRIANGLES_STRIP??? (指定n個頂點,繪制n-2個三角形)
??? GL_TRIANGLES_FAN??? (指定n個頂點,繪制n-2個三角形)

??? GL_LINES
??? GL_LINE_STRIP
??? GL_LINE_LOOP

??? GL_POINTS(這個是點精靈)


設置和獲得可以設置的直線的寬度:

??? void glLineWidth(GLfloat width);
??? GLfloat lw[2];
??? glGetFloatv(GL_ALIASED_LINE_WIDTH_RANGE,lw);

???
指定正面和背面:

??? void glFrontFace(GLenum dir)??? //GL_CW GL_CCW
???
??? void glEnable(GL_CULL_FACE);
??? void glCullFace(GL_FRONT GL_BACK GL_FRONT_AND_BACK);

點精靈:
???
??? 點精靈是一個與屏幕對齊的正方形,有position和radius。

??? 在shader里面有內(nèi)建變量gl_PointSize,用來輸出點的半徑,由頂點shader輸出。

?? 得到允許的點精靈的大小:

??? GLfloat pointsizeRange[2];
??? glGetFloatv(GL_ALIASED_POINT_SIZE_RANGE,pointsizeRange);
???

??? 注意opengles窗口的坐標范圍是:從左下角(原點)到右上角。

??? 而點精靈的原點是在左上角 坐標值 從0-1.
???

?? 如何設置點精靈的position和radius呢:

??? position當然是用頂點屬性來設置的。


??? radius在頂點shader里面設置,頂點shader里面有個內(nèi)建的變量gl_PointSize用于設置

??? 點精靈的radius大小。

??? gl_PointCoord是片段shader的內(nèi)建變量,vec2類型,mediump精度。

??? 在shader里面繪制點精靈的例子:
???
??? uniform sampler2D s_texSprite;
??? void main(void)
??? {
??????? gl_FragColor = texture2D(s_texSprite,gl_PointCoord);
??? }

?

基元處理流程:
???
??? 物體的坐標點 根據(jù)基元的類型跟視見體做裁剪,去掉看不到的部分
???????
??? 跟modelviewprojection相乘,然后再x/w, y/w, z/w得到normalized設備坐標(-1.0到1.0)。

??? 視口轉(zhuǎn)換階段:
??? 用到兩個函數(shù):
??? glViewport(x,y,w,h)和glDepthRange(near, far);???

??? 利用這個(x/w, y/w, z/w)坐標,在根據(jù)視口的尺寸,就可以得到物體在屏幕上的x,y坐標。

??? 根據(jù)z/w和glDepthRange()指定的near和far深度值。

??? 具體計算方式請看


多邊形偏移:
???
??? 當繪制兩個完全重疊的物體時,渲染出來的效果會出現(xiàn)相互滲透的現(xiàn)象,

??? 這是由于精度有限的緣故,這種現(xiàn)象如果光靠提高精度

??? 是不能完全解決的,所以需要使用多邊形偏移技術(shù),

??? 若開啟多邊形偏移,在做深度測試和深度寫入之前,給片段的深度值加

??? 一個delta,然后用這個值進行深度測試,如果深度測試通過,

??? 則會寫入原本的深度值,而不是depth+delta。

??? glEnable(GL_POLYGON_OFFSET_FILL);
??? glDisable(GL_POLYGON_OFFSET_FILL);

??? void glPolygonOffset(GLfloat factor, GLfloat units);
???
??????? depth offset = m*factor+r*units;
??? 書上個了個例子,factor=-1.0f,units=-2.0f。

posted on 2013-12-12 17:58 ldpzgz 閱讀(...) 評論(...) 編輯 收藏

轉(zhuǎn)載于:https://www.cnblogs.com/firstldp/p/3471714.html

總結(jié)

以上是生活随笔為你收集整理的opengles 2.0 点精灵 多边形偏移等备忘的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。