- 浏览: 578686 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
zhjw009:
您是不是在2012年做过spark IM 的二次开发?最近公司 ...
一个相当不错的swing开源皮肤包Look&Feel(Substance) -
panghaoyu:
实现一个智能提示功能需要ajax、数据库、jsp/php、算法 ...
jquery自动补全例子 -
DEMONU:
什么鸟,看不懂
JAVA实现负载均衡 -
higherzjm:
这个跟负载均衡有什么关系啊,求解答
JAVA实现负载均衡 -
HAO_FISH:
import java.*;
JTree,将树的每个节点设置成不同的图标
OpenGL(Open Graphics Library)定义了一个跨编程语言、跨平台的编程接口的规格,是一个性能卓越的三维图形标准!
OpenGL ES与OpenGL的区别:
OpenGL ES是专为内嵌和移动设备设计的一个2D/3D轻量级图形库,它基于OpenGL API设计,是OpenGL三维图形API的子集
Android里有三个与OpenGL有关的包:
android.opengl
javax.microedition.khronos.egl
javax.microedition.khronos.opengles
今天用到的不多,只有几个类而已
首先,写一个类实现Renderer接口,并实现它的三个抽象方法,要吃饭了,直接上代码吧
package com.zjc.test;
import java.nio.IntBuffer;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.opengl.GLSurfaceView.Renderer;
public class GLReader implements Renderer{
private int one = 0x10000;
//三角形的三个顶点
private IntBuffer triggerBuffer=IntBuffer.wrap(new int[]{
0,one,0,
//上顶点
-one,-one,0,
//做顶点
one,-one,0
//右顶点
});
//四边形的四个顶点
private IntBuffer quaterBuffer = IntBuffer.wrap(new int[]{
one,one,0,
-one,one,0,
one,-one,0,
-one,-one,0});
/**
* 所有绘图的工作放到此方法里
*/
@Override
public void onDrawFrame(GL10 gl) {
//清除屏幕和深度缓存
gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT );
//重置当前的模型观察矩阵
gl.glLoadIdentity();
// 左移 1.5 单位,并移入屏幕 6.0
gl.glTranslatef(-1.5f, 0.0f, -6.0f);
//开启顶点设置功能
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
/**
* 设置顶点数据
* 参数:
* 1、顶点尺寸----这里使用的是xyz坐标系,所以是3
* 2、顶点类型----这里是固定的,所以用GL_FIXED
* 3、步长
* 4、顶点缓存----即顶点数组
*/
gl.glVertexPointer(3,GL10.GL_FIXED, 0, triggerBuffer);
/**
* 绘制顶点
* 参数:
* 1、绘制的模式----我们使用GL_TRIANGLES来表示绘制三角形
* 2、开始位置
* 3、要绘制的顶点计数
*/
gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);
//重置当前的模型观察矩阵
gl.glLoadIdentity();
//右移1.5,进入6.0
gl.glTranslatef(1.5f, 0.0f, -6.0f);
//设置四边形顶点数据
gl.glVertexPointer(3, GL10.GL_FIXED, 0, quaterBuffer);
//绘制顶点(注意参数一不同)
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);
//取消顶点设置
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
}
/**
* 当窗口大小发生改变是调用此方法
* 不管窗口大小是否已经改变,此方法至少执行一次
* 所以在此方法中设置OpenGL场景的大小
*/
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
float ratio = (float) width / height;
//设置OpenGL场景大小为屏幕大小
gl.glViewport(0, 0, width, height);
/*为屏幕设置透视图*/
//设置投影矩阵
gl.glMatrixMode(GL10.GL_PROJECTION);
//重置投影矩阵
gl.glLoadIdentity();
//设置视口大小
gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
// 选择模型观察矩阵
gl.glMatrixMode(GL10.GL_MODELVIEW);
// 重置模型观察矩阵
gl.glLoadIdentity();
}
/**
* 窗口创建时调用此方法
* 此方法内做初始化的操作
*/
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
//对透视进行修正
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
//背景:黑色
gl.glClearColor(0, 0, 0, 0);
//启动阴影平滑
gl.glShadeModel(GL10.GL_SMOOTH);
//设置深度缓存
gl.glClearDepthf(1.0f);
//启用深度测试
gl.glEnable(GL10.GL_DEPTH_TEST);
//所做深度测试的类型
gl.glDepthFunc(GL10.GL_LEQUAL);
}
}
代码注释写的很清楚,值得一提的是在onSurfaceChanged()里
// 设置视口的大小
gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
// 选择模型观察矩阵
gl.glMatrixMode(GL10.GL_MODELVIEW);
顺序不能写反,否则会出问题,至于什么问题,自己试下就知道了,我也是偶然发现的
view plaincopy to clipboardprint?
package com.zjc.test;
import android.app.Activity;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.main);
GLReader reader=new GLReader();
GLSurfaceView glview=new GLSurfaceView(this);
glview.setRenderer(reader);
setContentView(glview);
}
}
没什么好说的,基本上都是固定的,要记得 setContentView(R.layout.main)是无效的!
OpenGL ES与OpenGL的区别:
OpenGL ES是专为内嵌和移动设备设计的一个2D/3D轻量级图形库,它基于OpenGL API设计,是OpenGL三维图形API的子集
Android里有三个与OpenGL有关的包:
android.opengl
javax.microedition.khronos.egl
javax.microedition.khronos.opengles
今天用到的不多,只有几个类而已
首先,写一个类实现Renderer接口,并实现它的三个抽象方法,要吃饭了,直接上代码吧
package com.zjc.test;
import java.nio.IntBuffer;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.opengl.GLSurfaceView.Renderer;
public class GLReader implements Renderer{
private int one = 0x10000;
//三角形的三个顶点
private IntBuffer triggerBuffer=IntBuffer.wrap(new int[]{
0,one,0,
//上顶点
-one,-one,0,
//做顶点
one,-one,0
//右顶点
});
//四边形的四个顶点
private IntBuffer quaterBuffer = IntBuffer.wrap(new int[]{
one,one,0,
-one,one,0,
one,-one,0,
-one,-one,0});
/**
* 所有绘图的工作放到此方法里
*/
@Override
public void onDrawFrame(GL10 gl) {
//清除屏幕和深度缓存
gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT );
//重置当前的模型观察矩阵
gl.glLoadIdentity();
// 左移 1.5 单位,并移入屏幕 6.0
gl.glTranslatef(-1.5f, 0.0f, -6.0f);
//开启顶点设置功能
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
/**
* 设置顶点数据
* 参数:
* 1、顶点尺寸----这里使用的是xyz坐标系,所以是3
* 2、顶点类型----这里是固定的,所以用GL_FIXED
* 3、步长
* 4、顶点缓存----即顶点数组
*/
gl.glVertexPointer(3,GL10.GL_FIXED, 0, triggerBuffer);
/**
* 绘制顶点
* 参数:
* 1、绘制的模式----我们使用GL_TRIANGLES来表示绘制三角形
* 2、开始位置
* 3、要绘制的顶点计数
*/
gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);
//重置当前的模型观察矩阵
gl.glLoadIdentity();
//右移1.5,进入6.0
gl.glTranslatef(1.5f, 0.0f, -6.0f);
//设置四边形顶点数据
gl.glVertexPointer(3, GL10.GL_FIXED, 0, quaterBuffer);
//绘制顶点(注意参数一不同)
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);
//取消顶点设置
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
}
/**
* 当窗口大小发生改变是调用此方法
* 不管窗口大小是否已经改变,此方法至少执行一次
* 所以在此方法中设置OpenGL场景的大小
*/
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
float ratio = (float) width / height;
//设置OpenGL场景大小为屏幕大小
gl.glViewport(0, 0, width, height);
/*为屏幕设置透视图*/
//设置投影矩阵
gl.glMatrixMode(GL10.GL_PROJECTION);
//重置投影矩阵
gl.glLoadIdentity();
//设置视口大小
gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
// 选择模型观察矩阵
gl.glMatrixMode(GL10.GL_MODELVIEW);
// 重置模型观察矩阵
gl.glLoadIdentity();
}
/**
* 窗口创建时调用此方法
* 此方法内做初始化的操作
*/
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
//对透视进行修正
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
//背景:黑色
gl.glClearColor(0, 0, 0, 0);
//启动阴影平滑
gl.glShadeModel(GL10.GL_SMOOTH);
//设置深度缓存
gl.glClearDepthf(1.0f);
//启用深度测试
gl.glEnable(GL10.GL_DEPTH_TEST);
//所做深度测试的类型
gl.glDepthFunc(GL10.GL_LEQUAL);
}
}
代码注释写的很清楚,值得一提的是在onSurfaceChanged()里
// 设置视口的大小
gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
// 选择模型观察矩阵
gl.glMatrixMode(GL10.GL_MODELVIEW);
顺序不能写反,否则会出问题,至于什么问题,自己试下就知道了,我也是偶然发现的
view plaincopy to clipboardprint?
package com.zjc.test;
import android.app.Activity;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.main);
GLReader reader=new GLReader();
GLSurfaceView glview=new GLSurfaceView(this);
glview.setRenderer(reader);
setContentView(glview);
}
}
没什么好说的,基本上都是固定的,要记得 setContentView(R.layout.main)是无效的!
发表评论
-
《Android/OPhone 开发完全讲义》样章和目录下载
2010-08-18 11:30 935http://www.blogjava.net/nokiagu ... -
轻松使用xmlpull解析xml
2010-08-18 11:27 924http://www.blogjava.net/sxyx200 ... -
高焕堂的Android平台应用软体开发ppt
2010-08-05 09:11 1292http://d.download.csdn.net/down ... -
Android系统架构基本模式解析
2010-08-04 15:20 1098http://blog.csdn.net/litton_van ... -
想要在Android上实现Camera功能的实现
2010-08-01 22:41 983想要在Android上实现Camera功能的实现 -
JNI学习资料共享_想深入一些的童鞋们快来
2010-08-01 22:39 985JNI学习资料共享_想深入一些的童鞋们快来 -
音乐软件
2010-08-01 22:30 859android音乐软件 -
android_sdk_tools目录下工具的使用
2010-08-01 22:22 1325android 学习的一点点总结,写了一下android 常用 ... -
android布局工具DroidDraw r1b14
2010-08-01 22:20 1576android布局工具DroidDraw r1b14 -
视频播放器
2010-08-01 22:08 769在模拟器上运行可能有问题,在真机上测试是没问题的,我测试过,现 ... -
常用的Android指令和模拟器参数
2010-08-01 21:59 1536Android模擬器命令列啟動模式 在android-sdk- ... -
第一篇---Android 无线启动过程分析
2010-08-01 21:55 936第一篇---Android 无线启动过程分析 -
Android RSS管理器
2010-08-01 21:54 1137Android RSS管理器 -
一个屏蔽SMS接收/发送,放到自己数据库里的项目
2010-08-01 21:53 1348主要功能: 1,用ContentObserver监听SMS接收 ... -
Android NDK开发入门实战示例(史上最强NDK入门项目实战)
2010-08-01 21:50 3224转载于其它社区的文档,很强悍的Android NDK开发入门实 ... -
相信你看完后会明白JNI是个什么东西,它是干什么的!
2010-08-01 21:49 1349相信你看完后会明白JNI是个什么东西,它是干什么的! 大 ... -
如何成为Android高手第一篇
2010-08-01 21:48 936若立志成为Android高手, ... -
获取Android源代码【转】
2010-08-01 15:15 974本文转自William Hua的Blog ,原文在此 。 — ... -
Android BaseExpandableListAdapter 教程
2010-08-01 15:13 1269Android BaseExpandableListAdapt ...
相关推荐
AndroidOpenGL实战开发框架搭建、三角形和四边形的绘制.pdf
用OpenGL练习作图如三角形、四边形、线段等,涉及四边形旋转、光照、动画等效果。
MFC框架下OpenGL三角形,四边形,多边形建模和旋转源码和详细完整注释。摘自《Visual C++ OpenGL 应用程序开发》一书的第四章。
在屏幕绘制各种图形,了解Android中OpenGL的使用:程序实现了: 屏幕绘图的方法 Android上OpenGL的使用。 完成三角形和四边形的绘制。
绘制若干OpenGL基本体素(三角形、三角形带、四边形、四边形带)构成的球体,注意球体绘制与球体划分的区别。 可以控制改变球的数量和球的体积,来改变基本体素的数量以及顶点的数量。 可以通过改变...
vs2013工程,绘制了opengl窗口,三角形,四边形,并使用两种着色方式进行着色
如果我们要绘制一个3D的四棱锥只需要绘制这5个面即可,绘制的方法和前一篇文章OpenGL_Qt学习笔记之_03(平面图形的着色和旋转)的相同。只不过这里的顶点坐标是3维的,所以图像深度那一维不一定为0。因此我们可以事先...
创建windows窗口并结合opengl绘制三角形
在窗口中绘制三角形和四边形两个简单填充图形,要求它们能够被鼠标选中并随鼠标一起拖动,此外能够使用右键菜单分别设置两个简单图形的颜色。 利用三角形图元生成黑白相间的圆锥台,要求通过键盘或鼠标能够改变...
实验内容 1、OpenGL中实现直线,三角形,及四边形的绘制。 2、OpengGL中实现光照的处理(可以任意画一个球体,然后进行设置光照,看效果) 内含伪代码或流程图、效果截图、代码
三角形和四边形添加2种不同类型的着色方法。使用Flat coloring(单调着色)给四边形涂上固定的一种颜色。使用Smooth coloring(平滑着色)将三角形的三个顶点的不同颜色混合在一起,创建漂亮的色彩混合。
在第一个教程的基础上,我们添加了一个三角形和一个四边形。也许你认为这很简单,但你已经迈出了一大步,要知道任何在OpenGL中绘制的模型都会被分解为这两种简单的图形。
计基于opengl的计算机图形学的基本三角形,四边形,扇形画法代码
绘制若干OpenGL基本体素(三角形、三角形带、四边形、四边形带)构成的球体 可以控制改变球的数量和球的体积,来改变基本体素的数量以及顶点的数量。
android OpenGL ES学习必备书籍,从基本到三角形四边形绘制到离屏渲染应有尽有,很适合零基础入门
仿照课本的例子,绘制若干OpenGL基本体素(三角形、三角形带、四边形、四边 形带)构成的球体, 可以控制改变球的数量和球的体积,来改变基本体素的数量以及顶点的数量。 可以通过改变glPolygonMode,切换...
在第一个教程的基础上,我们添加了一个三角形和一个四边形。也许你认为这很简单,但你已经迈出了一大步,要知道任何在OpenGL中绘制的模型都会被分解为这两种简单的图形。 读完了这一课,你会学到如何在空间放置...
仿照课本2.4.3的例子,绘制若干OpenGL基本体素(三角形、三角形带、四边形、四边形带)构成的球体,注意球体绘制与球体划分的区别。 可以控制改变球的数量和球的体积,来改变基本体素的数量以及顶点的数量。...
(1)绘制四个三角形面;(2)绘制一个四边形面;(3)最后指定绕y轴旋转。 (1)绘制六个四边形面;(2)最后指定绕x/y/z轴旋转。
仿照课本的例子,绘制若干OpenGL基本体素(三角形、三角形带、四边形、四边 形带)构成的球体, 可以控制改变球的数量和球的体积,来改变基本体素的数量以及顶点的数量。 可以通过改变glPolygonMode,切换是否...