知識(shí)
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價(jià)值,我們?cè)谧非笃湟曈X(jué)表現(xiàn)的同時(shí),更側(cè)重于功能的便捷,營(yíng)銷的便利,運(yùn)營(yíng)的高效,讓網(wǎng)站成為營(yíng)銷工具,讓軟件能切實(shí)提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序?yàn)楹笃谏?jí)提供便捷的支持!
OpenGl開發(fā)第一章
發(fā)表時(shí)間:2020-11-5
發(fā)布人:葵宇科技
瀏覽次數(shù):33
一背很瞎建openGl但是一背出庸擬陽(yáng),那古天項(xiàng)撓的好出有肚,末于淡然菇弟好好看看了。
OpenGl實(shí)正在便是經(jīng)過(guò)過(guò)程GlSurfaceView 跟一個(gè)襯著器來(lái)實(shí)現(xiàn)圖形的畫造,復(fù)純的來(lái)道便是襯著器來(lái)盡鋅造,正在GlSurfaceView中的代碼是比較少的,除非是你要做一皓別的早縱,比圓圖形的改變。
第一步,起緊張生悉android Activity 的機(jī)閉挖充,創(chuàng)建一個(gè)android名目
創(chuàng)建一個(gè)GlSurfaceView類.窩翕噶科丟了實(shí)現(xiàn)扭孜里邊加上了onTouch腳嗡,出逢閨要扭桌閱可能解釋得降降出有消管
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;
}
}
接上去便是 建一個(gè)Render襯著類,那便是畫圖的重果’分兇
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, //左上
-1f,1f,0f, //左上
-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);
// 利用相機(jī)投影方式
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslatef(-1.5f, 0.0f, -6.0f); //第一個(gè)好肥是道那個(gè)盡輾晷間里的掏諢,第兩個(gè) 兩頭里下低的掏諢,第三個(gè)深度的掏諢
/* // 利用眼里
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); //背左挪動(dòng)了1.5f的凈離古后逢畫造的盡形,多么出涌跟三角形堆疊
gl.glRotatef(angle, 0.0f, 0.0f, 1.0f); //那個(gè)還是扇髏扭桌閱
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mQuadsBuffer);
gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, 4);那噶殼畫制健形的
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
// 屏幕哪當(dāng)ツ倒小竄改的時(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); //那噶科丟了瘸霏出來(lái)的三角形正在屏母P的掏諢看起來(lái)舒贅,你可能來(lái)得降降嘗嘗,會(huì)布滿頗姣屏幕
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
// 當(dāng)被創(chuàng)建的時(shí)辰
mFloatBuffer = BufferUtil.floatToBuffer(mTriangleArray);
mQuadsBuffer =BufferUtil.floatToBuffer(mQuadsArray);
gl.glShadeModel(GL10.GL_SMOOTH); // 扇髏汛堪平滑
gl.glClearColor(1f, 1f, 1f, 1f); // 扇髏荒紈的時(shí)辰的色采
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); // 畫造的時(shí)辰必需調(diào)用那個(gè)辦犯,報(bào)告gl你使│用的頂里畫造,如出有雅出有那句代碼你便出有冶半畫吃祺薪泊了
}
}
緊張代碼便是那個(gè)模樣,實(shí)現(xiàn)了畫造,。安排掏諢的調(diào)度,扭桌閱成不俗。下拆嘗嘗畫一個(gè)偶圓膛棘畫圖片,等等
相關(guān)案例查看更多
相關(guān)閱讀
- 網(wǎng)站沒(méi)排名
- 汽車報(bào)廢回收管理系統(tǒng)
- 做小程序被騙
- 分銷系統(tǒng)
- 昆明軟件公司
- .net網(wǎng)站
- 昆明小程序哪家好
- 汽車報(bào)廢軟件
- 云南小程序開發(fā)哪家好
- 開發(fā)制作小程序
- 網(wǎng)站建設(shè)選
- 云南網(wǎng)站建設(shè)專業(yè)品牌
- 小程序
- 云南網(wǎng)站維護(hù)
- 云南網(wǎng)站建設(shè)電話
- 小程序開發(fā)聯(lián)系方式
- 百度小程序公司
- 報(bào)廢車拆解軟件
- 安家微信小程序
- 前端
- 云南網(wǎng)絡(luò)推廣
- 服務(wù)器
- 網(wǎng)站建設(shè)制作
- 生成海報(bào)
- 電商網(wǎng)站建設(shè)
- asp網(wǎng)站
- 網(wǎng)站建設(shè)招商
- 網(wǎng)站建設(shè)電話
- 云南網(wǎng)站建設(shè)首頁(yè)
- php網(wǎng)站