您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)如何分析OpenGL ES中的響應(yīng)觸屏事件,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
像旋轉(zhuǎn)三角形那樣,讓對(duì)象根據(jù)預(yù)設(shè)的程序來(lái)移動(dòng),以便有助于獲取人們的關(guān)注,但是如 果想要讓你的OpenGL ES圖形跟用戶交互,應(yīng)該怎樣做呢?要讓你的OpenGL ES應(yīng)用程序能夠觸碰交互的關(guān)鍵是擴(kuò)展你的GLSurfaceView實(shí)現(xiàn),重寫(xiě)它的onTouchEvent()方法來(lái)監(jiān)聽(tīng)觸碰事件。
小編將介紹如何監(jiān)聽(tīng)觸碰事件,讓用戶可以旋轉(zhuǎn)OpenGL ES對(duì)象。
設(shè)置觸碰監(jiān)聽(tīng)器
為了讓你的OpenGL ES應(yīng)用程序響應(yīng)觸碰事件,你必須在你GLSurfaceView類中實(shí)現(xiàn)onTouchEvent()事件。以下實(shí)現(xiàn)的示例顯示如何監(jiān)聽(tīng)MotionEvent.ACTION_MOVE事件,并把它們轉(zhuǎn)換成圖形旋轉(zhuǎn)的角度。
@Override public boolean onTouchEvent(MotionEvent e) { // MotionEvent reportsinput details from the touch screen // and other inputcontrols. In this case, you are only // interested in eventswhere the touch position changed. float x = e.getX(); float y = e.getY(); switch (e.getAction()) { case MotionEvent.ACTION_MOVE: float dx = x - mPreviousX; float dy = y - mPreviousY; // reverse direction of rotation above the mid-line if (y > getHeight() / 2) { dx = dx * -1 ; } // reverse direction of rotation to left of the mid-line if (x < getWidth() / 2) { dy = dy * -1 ; } mRenderer.mAngle += (dx + dy) * TOUCH_SCALE_FACTOR; // = 180.0f /320 requestRender(); } mPreviousX = x; mPreviousY = y; return true; }
注意,計(jì)算旋轉(zhuǎn)的角度之后,這個(gè)方法調(diào)用了requestRender()方法來(lái)告訴渲 染器,到了渲染幀的時(shí)候了。上例中所使用的方法是最有效的,只有在有旋轉(zhuǎn)變化時(shí),幀才會(huì)被重繪。但是要想只在數(shù)據(jù)變化的時(shí)候,才請(qǐng)求渲染器重繪,就要使用 setRenderMode()方法來(lái)設(shè)置繪制模式。
publicMyGLSurfaceView(Context context){ ... // Render the view onlywhen there is a change in the drawing data setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); }
暴露旋轉(zhuǎn)的角度
上例代碼要求你通過(guò)添加一個(gè)公共的成員變量,通過(guò)渲染器把旋轉(zhuǎn)的角度暴露出來(lái)。因?yàn)殇秩酒鞔a運(yùn)行在一個(gè)獨(dú)立于主用戶界面線程之外的線程中,所以你必須聲明一個(gè)公共變量,代碼如下:
publicclassMyGLRendererimplementsGLSurfaceView.Renderer{ ... public volatile float mAngle;
應(yīng)用旋轉(zhuǎn)
以下代碼完成由觸碰輸入所產(chǎn)生的旋轉(zhuǎn):
publicvoidonDrawFrame(GL10 gl){ ... // Create a rotation forthe triangle // long time =SystemClock.uptimeMillis() % 4000L; // float angle = 0.090f *((int) time); Matrix.setRotateM(mRotationMatrix, 0, mAngle, 0, 0, -1.0f); // Combine the rotationmatrix with the projection and camera view Matrix.multiplyMM(mMVPMatrix, 0, mRotationMatrix, 0, mMVPMatrix, 0); // Draw triangle mTriangle.draw(mMVPMatrix); }
關(guān)于如何分析OpenGL ES中的響應(yīng)觸屏事件就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。