- 浏览: 594085 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
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 976http://www.blogjava.net/nokiagu ... -
轻松使用xmlpull解析xml
2010-08-18 11:27 967http://www.blogjava.net/sxyx200 ... -
高焕堂的Android平台应用软体开发ppt
2010-08-05 09:11 1325http://d.download.csdn.net/down ... -
Android系统架构基本模式解析
2010-08-04 15:20 1143http://blog.csdn.net/litton_van ... -
想要在Android上实现Camera功能的实现
2010-08-01 22:41 1027想要在Android上实现Camera功能的实现 -
JNI学习资料共享_想深入一些的童鞋们快来
2010-08-01 22:39 1028JNI学习资料共享_想深入一些的童鞋们快来 -
音乐软件
2010-08-01 22:30 893android音乐软件 -
android_sdk_tools目录下工具的使用
2010-08-01 22:22 1379android 学习的一点点总结,写了一下android 常用 ... -
android布局工具DroidDraw r1b14
2010-08-01 22:20 1619android布局工具DroidDraw r1b14 -
视频播放器
2010-08-01 22:08 802在模拟器上运行可能有问题,在真机上测试是没问题的,我测试过,现 ... -
常用的Android指令和模拟器参数
2010-08-01 21:59 1568Android模擬器命令列啟動模式 在android-sdk- ... -
第一篇---Android 无线启动过程分析
2010-08-01 21:55 1003第一篇---Android 无线启动过程分析 -
Android RSS管理器
2010-08-01 21:54 1198Android RSS管理器 -
一个屏蔽SMS接收/发送,放到自己数据库里的项目
2010-08-01 21:53 1401主要功能: 1,用ContentObserver监听SMS接收 ... -
Android NDK开发入门实战示例(史上最强NDK入门项目实战)
2010-08-01 21:50 3266转载于其它社区的文档,很强悍的Android NDK开发入门实 ... -
相信你看完后会明白JNI是个什么东西,它是干什么的!
2010-08-01 21:49 1394相信你看完后会明白JNI是个什么东西,它是干什么的! 大 ... -
如何成为Android高手第一篇
2010-08-01 21:48 992若立志成为Android高手, ... -
获取Android源代码【转】
2010-08-01 15:15 1008本文转自William Hua的Blog ,原文在此 。 — ... -
Android BaseExpandableListAdapter 教程
2010-08-01 15:13 1323Android BaseExpandableListAdapt ...
相关推荐
1. `android.opengl`:这个包包含了一系列Android特有的OpenGL ES接口和类,例如`GLSurfaceView`,它是用于在Android应用中渲染OpenGL内容的视图组件。 2. `javax.microedition.khronos.egl`:这个包包含了EGL...
在这个练习中,我们将探讨如何使用OpenGL来绘制基本形状,如三角形、四边形和线段,并实现高级功能,如形状的旋转、光照效果以及动画。C++Builder是一个集成开发环境,它支持C++编程并提供对OpenGL库的接口,使得在...
在“MFC框架下OpenGL三角形,四边形,多边形建模和旋转源码”这个主题中,我们主要会涉及以下几个知识点: 1. **OpenGL在MFC中的集成**: 在MFC中使用OpenGL,我们需要创建一个`COpenGLCtrl`类,它是基于`CWnd`的...
在Android平台上,OpenGL ES(OpenGL for Embedded Systems)被广泛用于游戏开发、复杂用户界面和图形密集型应用。本主题将深入探讨如何在Android环境中利用OpenGL ES进行图形绘制。 一、Android中的OpenGL ES ...
在"opengl绘制三角形并进行混合着色工程"中,我们主要关注的是如何使用OpenGL在Visual Studio 2013环境下构建一个工程,以及如何绘制基本图形如三角形和四边形,并应用不同的着色技术。 首先,我们需要了解OpenGL的...
`triangle.cpp`和`triangle.h`文件可能包含了一个三角形绘制的基本结构,因为四边形通常由两个三角形拼接而成。在OpenGL中,基本的绘图单元是顶点,通过指定一系列顶点,然后将它们连接成多边形,比如三角形。GLSL...
绘制若干OpenGL基本体素(三角形、三角形带、四边形、四边形带)构成的球体,注意球体绘制与球体划分的区别。 可以控制改变球的数量和球的体积,来改变基本体素的数量以及顶点的数量。 可以通过改变...
OpenGL是一种强大的图形编程库,广泛应用于游戏开发、科学可视化等领域。本实验主要目的是让学生掌握OpenGL的基本使用,包括绘制基本图形(直线、三角形、四边形)以及实现光照处理。以下将详细介绍这些知识点。 ...
在Windows平台上,使用OpenGL进行图形绘制是一个常见的任务。本文将深入探讨如何利用OpenGL在Windows窗口中绘制三角形,这是学习图形编程的基础。 首先,我们需要理解Windows应用程序的基本结构。Windows应用程序...
如果我们要绘制一个3D的四棱锥只需要绘制这5个面即可,绘制的方法和前一篇文章OpenGL_Qt学习笔记之_03(平面图形的着色和旋转)的相同。只不过这里的顶点坐标是3维的,所以图像深度那一维不一定为0。因此我们可以事先...
在这个"OpenGL作业——自由画线和广角功能(菜单鼠标键盘互动)"中,学生通过编写OpenGL程序展示了如何实现用户交互,包括使用鼠标进行自由画线以及通过菜单选择不同的图形绘制功能。 程序的核心在于对OpenGL函数的...
在Android开发中,有时我们需要利用原生代码,如C++,来实现高性能或者特定功能的图形绘制,这就是Android NDK(Native Development Kit)的作用。本主题聚焦于如何使用NDK在Android平台上绘制2D四边形。NDK提供了一...
OpenGL是计算机图形学中的一种广泛应用的编程接口,用于在各种操作系统和硬件上生成二维和三维图像。本主题主要探讨如何使用OpenGL进行球体的绘制以及如何应用贴图技术为球体添加纹理,使得渲染出的球体更加真实。 ...
3. **多边形绘制**:OpenGL支持多种多边形绘制,如三角形、矩形、四边形等。多边形可以通过定义一系列顶点来创建。OpenGL中的`glBegin()`和`glEnd()`函数用于标记开始和结束绘制,而`glVertex2f()`等函数用于指定每...
在窗口中绘制三角形和四边形两个简单填充图形,要求它们能够被鼠标选中并随鼠标一起拖动,此外能够使用右键菜单分别设置两个简单图形的颜色。 利用三角形图元生成黑白相间的圆锥台,要求通过键盘或鼠标能够改变...
OpenGL是计算机图形学中的一种广泛应用的编程接口,用于在各种操作系统和硬件上创建二维和三维图形。本主题主要关注“opengl基本元素绘制”,即如何使用OpenGL来绘制点、线、三角形以及多边形等基本图形。 首先,...
这可能包括三角形或四边形,用以构建树干、树枝和树叶的基本形状。几何建模涉及将这些元素组合成一个三维模型,通过调整顶点的位置和顺序来创建复杂的形状。 2. **纹理映射**:为了让树看起来更真实,需要使用纹理...
OpenGL 是一个跨语言、跨平台的编程接口,用于渲染2D和3D图形。这个实验主要涉及使用OpenGL在VC++环境中绘制基本的几何图元,包括点、线和面。实验的目标是熟悉OpenGL的基本程序结构,并能编写程序来绘制这些基本...
OpenGL是计算机图形学中的一个重要库,用于生成2D和3D图像。在这个“opengl绘制花瓶演示”项目中,开发者使用OpenGL技术构建了一个3D花瓶模型,并且增加了阴影效果,使得展示更加逼真。这个程序允许用户从多个角度...
三角形和四边形添加2种不同类型的着色方法。使用Flat coloring(单调着色)给四边形涂上固定的一种颜色。使用Smooth coloring(平滑着色)将三角形的三个顶点的不同颜色混合在一起,创建漂亮的色彩混合。