最近玩玩Android的openGL,做了点注释,有用看看,没有了无视
public class GL1 extends Activity {
private GLSurfaceView mGLSurfaceView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mGLSurfaceView = new GLSurfaceView(this);
mGLSurfaceView.setRenderer(new One());
setContentView(mGLSurfaceView);
}
@Override
protected void onResume() {
super.onResume();
mGLSurfaceView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mGLSurfaceView.onPause();
}
}
/**
* 渲染器
*
* @author yaoyuan
*
*/
class One implements Renderer {
private Square square;
public One() {
square = new Square();
}
/**
* 初始化视图
*/
public void onDrawFrame(GL10 gl) {
/*
* 清空缓冲区预设值
*
* GL_COLOR_BUFFER_BIT 颜色缓冲区
*
* GL_DEPTH_BUFFER_BIT 深度缓冲区
*
* GL_STENCIL_BUFFER_BIT 模板缓冲区
*/
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
//乘一个翻译矩阵代替当前的矩阵
gl.glTranslatef(0.0f, 0.0f, -6.0f);
//画图形
square.draw(gl);
}
/**
* 视图改变时调用
*/
public void onSurfaceChanged(GL10 gl, int width, int height) {
if (height == 0) {
height = 1;
}
gl.glViewport(0, 0, width, height);
/**
* 指定当前的矩阵模式
*
* GL_MODELVIEW 模型视图 GL_PROJECTION 投影 GL_TEXTURE 纹理
*/
gl.glMatrixMode(GL10.GL_PROJECTION);
// 替换当前矩阵矩阵的身份
gl.glLoadIdentity();
// 设置一个透视投影矩阵
GLU.gluPerspective(gl, 45.0f, (float) width / (float) height, 0.1f,
100.0f);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
}
/**
* 视图创建时调用
*/
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
/*
* 设置阴影模式 1.GL_FLAT 扁平 2.GL_SMOOTH 平滑
*/
gl.glShadeModel(GL10.GL_SMOOTH);
// 指定颜色缓冲区值
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
// 指定深度缓冲区值
gl.glClearDepthf(1.0f);
// 可用GL服务端功能
gl.glEnable(GL10.GL_DEPTH_TEST);
/*
* 深度缓存比较
*
* GL_NEVER 不通过
*
* GL_LESS 如果传入的深度值小于存储深度的值,通过
*
* GL_EQUAL 如果传入的传递深度值等于存储的深度值,通过
*
* GL_LEQUAL 如果传入的深度值小于或等于存储的深度值,通过
*
* GL_GREATER 如果传入的深度值大于存储深度值更大,通过
*
* GL_NOTEQUAL 如果传入的深度值不等于存储深度值,通过
*
* GL_GEQUAL 如果传入的深度值大于或等于存储深度值,通过
*
* GL_ALWAYS 始终通过
*/
gl.glDepthFunc(GL10.GL_LEQUAL);
// 指定特定于实现的提示
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
}
}
/**
* 图形
*
* @author yaoyuan
*
*/
class Square {
private FloatBuffer vertexBuffer;
private float vertices[] = {
-1.0f, 1.0f, 0.0f,
1.0f, 1.0f, 0.0f,
-1.0f, -1.0f, 0.0f,
1.0f, -1.0f, 0.0f
};
public Square() {
ByteBuffer byteBuf = ByteBuffer.allocateDirect(vertices.length * 4);
byteBuf.order(ByteOrder.nativeOrder());
vertexBuffer = byteBuf.asFloatBuffer();
vertexBuffer.put(vertices);
vertexBuffer.position(0);
}
public void draw(GL10 gl) {
// 定义前、后面对(GL_CW顺时针、GL_CCW逆时针)
gl.glFrontFace(GL10.GL_CW);
// 定义一个定点坐标数组
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
/*
* 启用客户端功能
*
* GL_COLOR_ARRAY 当glDrawArrays、glDrawElements被调用时,颜色数组可以被读写
*
* GL_NORMAL_ARRAY 当glDrawArrays、glDrawElements被调用时,普通数组可以被读写
*
* GL_TEXTURE_COORD_ARRAY 当glDrawArrays、glDrawElements被调用时,紋理數組可以被读写
*
* GL_VERTEX_ARRAY 当glDrawArrays、glDrawElements被调用时,矩阵数组可以被读写
*/
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
// 从数组数据中渲染图元
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, vertices.length / 3);
// 禁用客户端功能
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
}
}
分享到:
相关推荐
android openGL ES 2.0画等边三角形,正方形
使用 OpenGL 绘制正方形,包含正方形顶点、正方形边、正方形块
opengles for c++画正方形
本资源实现了使用OpenGL将正方形的图片贴到圆形上,并使用了不同的映射因子,原文见博客:https://zhyan8.blog.csdn.net/article/details/123453297
根据《Pro OpenGL ES for Android (2012)》一书第一章做成的最简单的OpenGL ES实例,上下跳动的正方形
Android OpenGL ES的简单绘制三角形和正方形的demo 。
Android平台下的全景视频播放器配套教程——1.3 用OpenGL ES 2.0显示一张图片
学习OpenGLES2-Android 学习适用于Android的OpenGLES 2是用Java语言编写的。 在有一个OpenGL ES 2.0教程。 本教程真的很棒! 如果您必须学习opengl es 2.0,则无论您是iOS开发人员还是Android开发人员,都想观看...
基本图元绘制,实现对正方形的平移,旋转,缩放
OpenGL-ES 学习示例 描述:1、GLKit 绘制图片和正方体2、GLSL 绘制金字塔、颜色纹理混合3、GLSL 滤镜集合:灰度、旋涡、正方形马赛克、六边形马赛克4 、GLSL 抖音部分特效:分屏、缩放、抖动、灵魂出窍、毛刺iOS_...
本文实例为大家分享了OpenGL ES正交投影展示的具体代码,供大家参考,具体内容如下 绘制正方形 在最开始绘制的六边形里面好像看起来挺容易的,也没有出现什么问题,接下来不妨忘记前面绘制六边形的代码,让我们按照...
具有触摸事件的2D正方形和三角形可旋转三角形API 8+ Opengl2ex1使用渲染器(来自lessonOne)和mainactivity来设置所有内容注意:此示例在仿真器中可能会失败,但可在物理设备上运行。 Opengl2ex2扩展了...
说明这是一个Android OpenGLES2.0从零开始的Demo程序,仅做个人学习OpenGLES的记录,并提供给后来初学者参考。若有相关问题,也非常乐意与大家一起讨论共同进步。关于Android OpenGLES2.0学习的博客,也相当于这个...
在GLSurfaceView上使用OpenGL ES绘制一个简单的三角形和正方形,初步介绍OpenGL ES的使用方法
002--正方形键盘控制.zip