openGL——在Android中使用openGL来画一个三角形
2014-04-21 20:30
309 查看
package com.example.opengl1; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; import android.opengl.GLSurfaceView; import android.opengl.GLU; import android.os.Bundle; import android.app.Activity; import android.content.Context; import android.util.AttributeSet; import android.view.Menu; /** * 以下这个demo实现了画一个红色的三角形 * @author pc * */ public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MyGLSurfaceView view = new MyGLSurfaceView(this); //renderer: 渲染器.. view.setRenderer(new MyRenderer()); setContentView(view); } class MyGLSurfaceView extends GLSurfaceView{ public MyGLSurfaceView(Context context) { super(context); } public MyGLSurfaceView(Context context,AttributeSet attrs) { super(context, attrs); } } //自定义渲染器 class MyRenderer implements GLSurfaceView.Renderer{ //表层创建时 @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { //设置清屏色 gl.glClearColor(0, 0, 0, 1); //启用顶点缓冲区 gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); } //表层size时 @Override public void onSurfaceChanged(GL10 gl, int width, int height) { //红色纸视口,输出画面的区域 gl.glViewport(0, 0, width, height); float ratio = (float)width/(float)height; //矩阵模式,投影矩阵,openGL基于状态机 gl.glMatrixMode(GL10.GL_PROJECTION); //加载单位矩阵 gl.glLoadIdentity(); //平截头体(最后一个f表示他是浮点数的类型) gl.glFrustumf(-1f, 1f, -ratio, ratio, 3, 7); } //绘图 @Override public void onDrawFrame(GL10 gl) { gl.glClear(GL10.GL_COLOR_BUFFER_BIT);//清除颜色缓冲区 //模型视图矩阵 gl.glMatrixMode(gl.GL_MODELVIEW); gl.glLoadIdentity(); // eyeX, eyeY, eyeZ: 放置眼球的坐标 // centerX, centerY, centerZ,: 眼球的观察点.(在这里只要比5小就行了,如果大于5的话,就会看到的是黑屏) // upX, upY, upZ: 指定眼球向上的向量 // GLU.gluLookAt(gl, eyeX, eyeY, eyeZ, centerX, centerY, centerZ, upX, upY, upZ) GLU.gluLookAt(gl, 0, 0, 5, 0, 0, 0, 0,1,0); /** * 画三角形 * 绘制数组 * 三角形坐标 */ float[] coords = { 0f,0.5f,0f, -0.5f,-0.5f,0f, 0.5f,-0.5f,0f, }; //分配字节缓冲区控件,存放顶点坐标数据 ByteBuffer ibb = ByteBuffer.allocateDirect(coords.length * 4); ibb.order(ByteOrder.nativeOrder());//设置顺序(本地顺序) FloatBuffer fbb = ibb.asFloatBuffer();//放置顶点坐标数组 fbb.put(coords); ibb.position(0);//定位指针的位置,从该位置开始读取顶点数据 gl.glColor4f(1f, 0f, 0f, 1f);//设置绘图时的颜色 /** * 3: 3维坐标,使用3个坐标值表示一个点 * type: 每个点的数据类型 * stride: 0,跨度 * ibb: 指定定点缓冲区 */ gl.glVertexPointer(3, GL10.GL_FLOAT, 0, ibb); gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);//绘制三角形.这3个参数分别为:需要画的数据的类型,从哪一个点开始画,需要画的点的个数 } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
相关文章推荐
- 【OpenGL4.0】GLSL渲染语言入门与VBO、VAO使用:绘制一个三角形
- 【OpenGL4.0】GLSL渲染语言入门与VBO、VAO使用:绘制一个三角形
- 一个使用openGL渲染的炫丽Android动画库
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——2.1 使用GLSurfaceView和MediaPlayer播放一个平面视频(上)
- 【OpenGL4.0】GLSL渲染语言入门与VBO、VAO使用:绘制一个三角形
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——5.7 使用OpenGL ES接口保存屏幕截图
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——2.2 使用GLSurfaceView和MediaPlayer播放一个平面视频(中)
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——2.3 使用GLSurfaceView和MediaPlayer播放一个平面视频(下)
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——5.2 使用旋转矢量传感器改变球的朝向
- 【OpenGL4.0】GLSL渲染语言入门与VBO、VAO使用:绘制一个三角形 【转】
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——3.2 使用OpenGL ES 2.0绘制一个球
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——5.8 使用MediaPlayer播放在线视频
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——1.2 用OpenGL ES 2.0画一个三角形
- 在VC中,使用OpenGL绘制一个矩形、三角形、三个点和三条直线,由直线组成新的三角形
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——2.2 使用GLSurfaceView和MediaPlayer播放一个平面视频(中)
- android平台使用Opengl实现点、线、三角形的绘制
- OpenGL学习笔记(八):进一步理解VAO、VBO和SHADER,并使用VAO、VBO和SHADER绘制一个三角形
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——2.3 使用GLSurfaceView和MediaPlayer播放一个平面视频(下)
- Android基于OpenGL在GLSurfaceView上绘制三角形及使用投影和相机视图方法示例
- 基于Android的OpenGL—使用GLSurfaceView创建一个Activity