A. 如何動態地畫一條虛線在Android中使用OpenGL ES 2.0編程
動態繪制虛線,可以參考如下內容:
、被稱為點畫的影響。不幸的是,點畫已經從OpenGL的刪除,但幸運的是,有幾種方法仍然得到的效果。我們必須充分利用的OpenGL的著色語言的這項任務。 頂點著色器:uniform mat4 u_modelViewProjectionMatrix;
uniform mat4 mv;
attribute vec4 a_position;
attribute vec4 a_color;
varying vec4 v_color;
varying vec4 position;
void main() {
gl_Position = u_modelViewProjectionMatrix * a_position;
position = mv * a_position;
v_color = a_color;
}
著色器:precision mediump float;
uniform vec2 sourcePoint;
varying vec4 v_color;
varying vec4 position;
void main() {
if (cos(0.1*abs(distance(sourcePoint.xy, position.xy))) + 0.5 > 0.0) {
gl_FragColor = vec4(0,0,0,0);
} else {
gl_FragColor = v_color;
}
}
我沒有在這里找到本教程中,我測試了,這里是我的結果:
正如羅斯托夫在這個線程解釋,這里最大的部分是sourcePoint。
的關鍵 CodeGo.net,整個事情是sourcePoint被傳遞的
該行的起源。
如果你不喜歡這種方式也存在textures圖案的效果。有與α虛線效果textures,並將其應用到您的線路。
2.
我找到了一個更好的解決方案。它的水平和垂直線。
#define DOT_VERTEX_CODE \
"attribute vec4 a_Position;" \
"uniform mat4 projectionMatrix;" \
"varying vec2 v_xy;" \
"void main() {gl_PointSize = 1.0; gl_Position = a_Position*projectionMatrix; v_xy = a_Position.xy;}"
#define DOT_FRAGMENT_CODE \
"precision mediump float;" \
"varying vec2 v_xy;" \
"uniform float isVert;" \
"uniform vec4 color1;" \
"uniform vec4 color2;" \
"void main() {gl_FragColor = mod(isVert > 0.0 ? v_xy.y : v_xy.x, 2.0) >= 1.0 ? color1 : color2;}"
B. Android OpenGL 的基本使用
由於本人現在在公司做Android上的OpenGL圖像處理相關功能,以前沒有搞過這方面的知識,所以一切只能從頭開始搞起,接下來將會慢慢分享其他方面的內容,先用這篇比較基礎的文章來開頭。
剛才我們談到圖像處理,在做圖像處理我們不是可以用Canvas來繪制嗎,怎麼還要用OpenGL那麼陌生的東西來搞?為什麼要用OpenGL,肯定有它的好處。
接下來我們會來講解如何在Android項目開發過程中加入OpenGL,在開始前我們先了解同OpenGL ES密切相關的載體:GLSurfaceView:
要用OpenGL繪制,首先要有GLSurfaceVie的實例
現在OpenGL ES版本已經到3.0了,Android平台上目前有1.0和2.0,我們使用的是2.0,在使用前在onCreate()方法中檢查是否支持2.0的版本並且確定使用2.0
一般我們只需要使用「configurationInfo.reqGlEsVersion >= 0x20000」,至於加後面主要是用於模擬器檢查,假定模擬器支持2.0。
前面說到GLSurfaceView挖了一個洞,就是為了看見下面的渲染表面,同樣實在onCreate()方法中
通過setEGLContextClientVersion()方法配置surface視圖,設定好使用的OpenGL版本,然後調用setRenderer()傳進有自定義Renderer類的新實例。當Surface創建或者發生變化的時候,以及繪制一幅新幀時,渲染器都會被GLSurfaceView調用。
GLSurfaceView的生命周期要協同好Activity的生命周期,避免造成內存泄漏。
Renderer類也就是我們的渲染類了,它是通過實現Renderer介面來實現功能的。
渲染器介面定義的方法:
實現Renderer的介面方法
首選在onSurfaceCreated()中調用glClearColor設置清空屏幕用的顏色,這里使用紅色。
設置視口的大小
在onDrawFrame()中調用glClear(GL_COLOR_BUFFER_BIT)清空屏幕,會調用glClearColor中定義的顏色來填充整個屏幕。通過這幾個步驟,基本上就可以在GLSurfaceView繪制出東西了,在這里我只是簡單的用紅色繪制整個屏幕。
OpenGL在Android上的使用基本上是這樣,但是,當然沒那麼簡單,在使用OpenGL進行繪制算是比較繁瑣的過程,後面也會慢慢去揭曉其他使用方法,來構造一幅一幅精美的特效靜/動圖。
C. Android音視頻(六) 使用OpenGL ES 3.0預覽Camera
剛學習了OpenGL的紋理相關知識喚碧,終於可以接著寫Android音視頻系列了。
本篇博客會介紹使用OpenGL ES 3.0相關知識預覽Camera,並且提供Camera和Camera2兩個版本實現。
頂點著色器
片段著色器
紋理的類型需要使用 samplerExternalOES ,而不是之前渲染圖片的 sampler2D。
我們知道Android相機輸出的原始數芹拍據一般都為YUV數據,而在OpenGL中使用的絕大部分紋理ID都是RGBA的格式,所以原始數據都是無法直接用OpenGL ES來渲染的。所以我們添加了一個擴展 #extension GL_OES_EGL_image_external_essl3 : require ,其中定義了嫌鏈羨一個紋理的擴展類型 GL_TEXTURE_EXTERNAL_OES 。後面綁定紋理時需要綁定到 GL_TEXTURE_EXTERNAL_OES 上,而不是類型GL_TEXTURE_2D上。
其實前面部分和載入圖片沒有什麼區別,最後兩行,對應上面流程中的1、2步。創建紋理,綁定外部紋理,然後根據紋理ID創建SurfaceTexture作為相機預覽輸出。
使用Camera2在OpenGL方面其實是一樣的,並沒有什麼改動。所以只需要看一下Camera2的調用就好。
源碼地址
D. 《Android3D游戲開發技術寶典OpenGLES2.0》pdf下載在線閱讀,求百度網盤雲資源
《Android 3D游戲開發技術寶典》(吳亞峰)電子書網盤下載免費在線閱讀
資源鏈接:
鏈接:https://pan..com/s/1A5S0LK7aslncrVbBQAJ5Rg
書名:Android 3D游戲開發技術寶典
作者:吳亞峰
出版年份:2012-5
頁數:749
內容簡介:
《Android 3D游戲開發技術寶典:OpenGL ES 2.0》內容簡介:隨著智能手機移動嵌入式平台硬體性能的不斷提升,3D游戲應用也逐漸普及開來。《Android 3D游戲開發技術寶典:OpenGL ES 2.0》結合作者多年從事3D游戲應用開發的寶貴經驗,全面介紹了與Android平台相關的必知必會的基礎知識及大型完整3D案例,講解上由淺入深,循序漸進,起點低、終點高,既適合初學者學習,也適合有一定基礎的讀者進一步提升之用。另外,由於OpenGL ES2.0的著色語言通用於各種移動嵌入式平台,因此,《Android 3D游戲開發技術寶典:OpenGL ES 2.0》中與著色器開發相關的60%左右的內容還可供iPhone、Windows Mobile、MeeGoo等平台的開發人員參考。全書共22章,其中第1章與第2章為Android平台相關的一些基礎知識;第3章~第10章介紹了基於OpenGL ES2.0進行3D應用開發的一些必知必會的基本知識;第11章~第15章介紹了一些高級特效的實現方法;第16章~第17章介紹了3D游戲開發中相關的一些物理、碰撞檢測知識以及常用的3D物理引擎JBullet:第19章介紹了3種人機交互的高級技術;第20章~第22章給出了3個完整的大型3D游戲案例,總代碼量接近6萬行。同時為了便於讀者的學習,《Android 3D游戲開發技術寶典:OpenGL ES 2.0》附贈的光碟中包含了書中所有案例的完整源代碼,同時給出了最後3個完整大型3D游戲案例的講解視頻,最大限度地幫助讀者快速掌握相應的開發技術。