OpenGl開發第一章 - 新聞資訊 - 雲南小程序開發|雲南軟件開發|雲南網站建設-昆明融晨信息技術有限公司

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不(bù)管是(shì)網站,軟件還是(shì)小程序,都要(yào / yāo)直接或間接能爲(wéi / wèi)您産生價值,我們在(zài)追求其視覺表現的(de)同時(shí),更側重于(yú)功能的(de)便捷,營銷的(de)便利,運營的(de)高效,讓網站成爲(wéi / wèi)營銷工具,讓軟件能切實提升企業内部管理水平和(hé / huò)效率。優秀的(de)程序爲(wéi / wèi)後期升級提供便捷的(de)支持!

您當前位置>首頁 » 新聞資訊 » 技術分享 >

OpenGl開發第一章

發表時(shí)間:2020-11-5

發布人(rén):融晨科技

浏覽次數:33


            一背很瞎建openGl但是(shì)一背出(chū)庸拟陽,那古天項撓的(de)好出(chū)有肚,末于(yú)淡然菇弟好好看看了(le/liǎo)。
 OpenGl實正在(zài)便是(shì)經過過程GlSurfaceView  跟一個(gè)襯着器來(lái)實現圖形的(de)畫造,複純的(de)來(lái)道(dào)便是(shì)襯着器來(lái)盡鋅造,正在(zài)GlSurfaceView中的(de)代碼是(shì)比較少的(de),除非是(shì)你要(yào / yāo)做一皓别的(de)早縱,比圓圖形的(de)改變。
            第一步,起緊張生悉android Activity 的(de)機閉挖充,創建一個(gè)android名目
          創建一個(gè)GlSurfaceView類.窩翕噶科丢了(le/liǎo)實現扭孜裏邊加上(shàng)了(le/liǎo)onTouch腳嗡,出(chū)逢閨要(yào / yāo)扭桌閱可能解釋得降降出(chū)有消管
package com.example.opengl_demo;
import android.content.Context;
import android.opengl.GLSurfaceView;
import android.util.AttributeSet;
import android.view.MotionEvent;
public class MySurfaceView extends GLSurfaceView {
private final float TOUCH_SCALE_FACTOR = 180.0f / 320;
private MyRander myRander;
private float mPreviousX;
private float mPreviousY;
public MySurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public MySurfaceView(Context context) {
super(context);
myRander = new MyRander();
setRenderer(myRander);
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
         
float x =event.getX();
float y =event.getY();


switch (event.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 ;  
           }  
           
           myRander.angle += (dx + dy) * TOUCH_SCALE_FACTOR;  
           requestRender(); 

}


mPreviousX = x;  
  mPreviousY = y; 


return true;
}
}
接上(shàng)去便是(shì)  建一個(gè)Render襯着類,那便是(shì)畫圖的(de)重果’分兇
                
package com.example.opengl_demo;
import java.nio.FloatBuffer;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL;
import javax.microedition.khronos.opengles.GL10;
import android.opengl.GLSurfaceView;
import android.opengl.GLU;
import android.os.SystemClock;
public class MyRander implements GLSurfaceView.Renderer {
private float[] mTriangleArray = { 0f, 1f, 0f, -1f, -1f, 0f, 1f, -1f, 0f };
private float[] mQuadsArray = {  
          1f,1f,0f,                           //左上(shàng)  
          -1f,1f,0f,                          //左上(shàng)  
          -1f,-1f,0f,                         //左下  
          1f,-1f,0f                           //左下  
   };  

private FloatBuffer mQuadsBuffer;  
private FloatBuffer mFloatBuffer;
float angle;
@Override
public void onDrawFrame(GL10 gl) {
// 畫
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
// 利用相機投影方式
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslatef(-1.5f, 0.0f, -6.0f);     //第一個(gè)好肥是(shì)道(dào)那個(gè)盡輾晷間裏的(de)掏诨,第兩個(gè) 兩頭裏下低的(de)掏诨,第三個(gè)深度的(de)掏诨
/* // 利用眼裏
GLU.gluLookAt(gl, 0, 0, -5, 0f, 0f, 0f, 0f, 1.0f, 0.0f);*/
// 扇髅改變
/*
* long time =SystemClock.uptimeMillis()%4000L; float angle
* =0.090f*(int)time;
*/
gl.glRotatef(angle, 0.0f, 0.0f, 1.0f);
// 畫造三角形
gl.glColor4f(1f, 0f, 0f, 1f);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mFloatBuffer);
gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);
//畫造四邊形,
gl.glLoadIdentity();
gl.glTranslatef(1.5f, 0.0f, -6.0f); //背左挪動了(le/liǎo)1.5f的(de)淨離古後逢畫造的(de)盡形,多麽出(chū)湧跟三角形堆疊
gl.glRotatef(angle, 0.0f, 0.0f, 1.0f);   //那個(gè)還是(shì)扇髅扭桌閱
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mQuadsBuffer);   
gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, 4);那噶殼畫制健形的(de)

}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
// 屏幕哪當ツ倒小竄改的(de)時(shí)辰
gl.glViewport(0, 0, width, height);
float radio = (float) width / height;
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glFrustumf(-radio, radio, -1, 1, 1, 10);     //那噶科丢了(le/liǎo)瘸霏出(chū)來(lái)的(de)三角形正在(zài)屏母P的(de)掏诨看起來(lái)舒贅,你可能來(lái)得降降嘗嘗,會布滿頗姣屏幕
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
// 當被創建的(de)時(shí)辰
mFloatBuffer = BufferUtil.floatToBuffer(mTriangleArray);
mQuadsBuffer =BufferUtil.floatToBuffer(mQuadsArray);

gl.glShadeModel(GL10.GL_SMOOTH); // 扇髅汛堪平滑
gl.glClearColor(1f, 1f, 1f, 1f); // 扇髅荒纨的(de)時(shí)辰的(de)色采
gl.glClearDepthf(1.0f); // 深度緩存
gl.glEnable(GL10.GL_DEPTH_TEST);
gl.glDepthFunc(GL10.GL_LEQUAL);
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); // 畫造的(de)時(shí)辰必需調用那個(gè)辦犯,報告gl你使│用的(de)頂裏畫造,如出(chū)有雅出(chū)有那句代碼你便出(chū)有冶半畫吃祺薪泊了(le/liǎo)
}
}
緊張代碼便是(shì)那個(gè)模樣,實現了(le/liǎo)畫造,。安排掏诨的(de)調度,扭桌閱成不(bù)俗。下拆嘗嘗畫一個(gè)偶圓膛棘畫圖片,等等

相關案例查看更多