最近玩玩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 ES 绘制一个基本的正方形。 首先,我们需要理解OpenGL ES的工作原理。它是一个状态机,通过设置各种状态(如颜色、纹理、深度测试等)来控制渲染过程。然后,我们通过调用`...
opengles for c++画正方形
本教程重点讲解如何利用OpenGL ES将一个正方形的图片纹理贴到圆形表面,以实现类似圆形头像的效果。在实际应用中,这种技术常见于图像处理、游戏开发和用户界面设计。 首先,我们需要创建一个OpenGL ES上下文并设置...
在Android平台上,OpenGL ES是一种广泛使用的图形库,用于在移动设备上实现高性能的2D和3D图形渲染。本文将深入探讨如何使用OpenGL ES来绘制圆点,并介绍一种方法来优化圆点边缘的锯齿问题,提升视觉效果。 首先,...
标签“OpenGLES实例”表明这是一个实践性的教程,旨在帮助开发者了解如何在实际项目中使用OpenGL ES。通过这个简单的跳动正方形,开发者可以学习到基本的OpenGL ES编程流程,包括设置着色器、处理顶点数据、以及利用...
OpenGL ES 是一种针对嵌入式设备的图形处理接口,它基于桌面版的 OpenGL 并进行了优化,广泛应用于移动设备如智能手机和平板电脑上。在 Android 平台上,我们可以使用 OpenGL ES 进行3D图形编程,创建丰富的视觉效果...
OpenGL ES是OpenGL的一个轻量级版本,主要用于嵌入式设备,如智能手机和平板电脑。在iOS平台上,OpenGL ES被广泛用于2D和3D图形渲染,为开发者提供了强大的图形处理能力。iPhone应用开发中,使用OpenGL ES进行纹理...
本话题将深入探讨如何利用NDK和OpenGL ES在Android平台上实现正方形纹理的绘制。 OpenGL ES是OpenGL的一个轻量级版本,专门针对嵌入式设备,如智能手机和平板电脑设计。在Android系统中,我们可以使用Java的Android...
### Android OpenGL ES 3D 坐标变换详解 在Android平台进行3D图形开发时,OpenGL ES(Open Graphics Library for Embedded Systems)是一项关键的技术。它允许开发者在移动设备上创建复杂的3D图形和动画。在OpenGL ...
OpenGL ES 是一种在嵌入式设备上广泛使用的图形库,特别是在Android系统中,它用于创建复杂的3D图形和动画。Android OpenGL ES 提供了一个接口,让开发者能够利用硬件加速的图形处理能力,来绘制出立方体、球体、...
本教程将深入探讨如何利用OpenGL ES 2.0这一强大的图形处理接口来显示一张全景图片,为全景视频播放器的构建打下基础。 首先,理解OpenGL ES 2.0是至关重要的。OpenGL ES(Embedded Systems)是OpenGL的一个子集,...
Android OpenGL ES的简单绘制三角形和正方形的demo 。
### OpenGL ES 2.0编程指南关键知识点解析 #### 一、OpenGL ES 2.0简介 - **OpenGL ES(Open Graphics Library for Embedded Systems)** 是一个为移动设备设计的跨平台API,用于渲染2D和3D图形,特别适用于手机、...
### OpenGL ES for iPhone – 关键知识点详解 #### 一、OpenGL ES for iPhone 概述 OpenGL ES (OpenGL for Embedded Systems) 是一个为嵌入式设备(如智能手机和平板电脑)设计的图形渲染库。它是一种跨平台的应用...
通常,这可以通过在build.gradle文件中引入`implementation 'androidx.opengles:opengl-es-utils:1.0.0'`来完成。确保你的项目支持JNI(Java Native Interface),因为OpenGL ES是C/C++接口,需要通过JNI桥接。 接...
在Android平台上,OpenGL ES(OpenGL for Embedded Systems)是一种广泛用于创建2D和3D图形的图形库。在本文中,我们将深入探讨如何使用OpenGL ES在Android应用中实现一个贴图旋转的3D立方体。首先,我们需要理解...
在本文中,我们将深入探讨如何使用OpenGL ES在Android应用中画点,并了解如何设置点的大小。 首先,要使用OpenGL ES,你需要在Android项目中添加对应的依赖。在AndroidManifest.xml中开启硬件加速,添加以下属性到`...
学习OpenGLES2-Android 学习适用于Android的OpenGLES 2是用Java语言编写的。 在有一个OpenGL ES 2.0教程。 本教程真的很棒! 如果您必须学习opengl es 2.0,则无论您是iOS开发人员还是Android开发人员,都想观看...
OpenGL ES 是一种针对嵌入式设备的图形处理标准,它基于桌面版的OpenGL,并为移动设备如智能手机和平板电脑优化。在"罗大柚OpenGL_ES系列教程LessonTwo(Part 4)_Cube"中,我们将深入探讨如何在iOS平台上利用GLKit...