/**
*
*/
package org.crazyit.opengl;
import java.nio.ByteBuffer;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.opengl.GLSurfaceView.Renderer;
/**
* Description:
* <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
* <br/>Copyright (C), 2001-2012, Yeeku.H.Lee
* <br/>This program is protected by copyright laws.
* <br/>Program Name:
* <br/>Date:
* @author Yeeku.H.Lee kongyeeku@163.com
* @version 1.0
*/
public class MyRenderer implements Renderer
{
// 定义三棱椎的4个顶点
float[] taperVertices = new float[] {
0.0f, 0.5f, 0.0f,
-0.5f, -0.5f, -0.2f,
0.5f, -0.5f, -0.2f,
0.0f, -0.2f, 0.2f
};
// 定义三棱椎的4个顶点的颜色
int[] taperColors = new int[]{
65535, 0, 0, 0, // 红色
0, 65535, 0, 0, // 绿色
0, 0, 65535, 0, // 蓝色
65535, 65535, 0, 0 //黄色
};
// 定义三棱椎的4个三角面
private byte[] taperFacets = new byte[]{
0, 1, 2, //0、1、2三个顶点组成一个面
0, 1, 3, //0、1、3三个顶点组成一个面
1, 2, 3, //1、2、3三个顶点组成一个面
0, 2, 3 //0、2、3三个顶点组成一个面
};
// 定义立方体的8个顶点
float[] cubeVertices = new float[] {
// 上顶面正方形的四个顶点
0.5f, 0.5f, 0.5f,
0.5f, -0.5f, 0.5f,
-0.5f, -0.5f, 0.5f,
-0.5f, 0.5f, 0.5f,
// 下底面正方形的四个顶点
0.5f, 0.5f, -0.5f,
0.5f, -0.5f, -0.5f,
-0.5f, -0.5f, -0.5f,
-0.5f, 0.5f, -0.5f
};
// 定义立方体所需要的6个面(一共是12个三角形所需的顶点)
private byte[] cubeFacets = new byte[]{
0, 1, 2,
0, 2, 3,
2, 3, 7,
2, 6, 7,
0, 3, 7,
0, 4, 7,
4, 5, 6,
4, 6, 7,
0, 1, 4,
1, 4, 5,
1, 2, 6,
1, 5, 6
};
FloatBuffer taperVerticesBuffer;
IntBuffer taperColorsBuffer;
ByteBuffer taperFacetsBuffer;
FloatBuffer cubeVerticesBuffer;
ByteBuffer cubeFacetsBuffer;
// 控制旋转的角度
private float rotate;
public MyRenderer()
{
// 将三棱椎的顶点位置数据数组包装成FloatBuffer;
taperVerticesBuffer = FloatBuffer.wrap(taperVertices);
// 将三棱椎的四个面的数组包装成ByteBuffer
taperFacetsBuffer = ByteBuffer.wrap(taperFacets);
// 将三棱椎的四个定点的颜色数组包装成IntBuffer
taperColorsBuffer = IntBuffer.wrap(taperColors);
// 将立方体的顶点位置数据数组包装成FloatBuffer;
cubeVerticesBuffer = FloatBuffer.wrap(cubeVertices);
// 将立方体的6个面(12个三角形)的数组包装成ByteBuffer
cubeFacetsBuffer = ByteBuffer.wrap(cubeFacets);
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config)
{
// 关闭抗抖动
gl.glDisable(GL10.GL_DITHER);
// 设置系统对透视进行修正
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
gl.glClearColor(0, 0, 0, 0);
// 设置阴影平滑模式
gl.glShadeModel(GL10.GL_SMOOTH);
// 启用深度测试
gl.glEnable(GL10.GL_DEPTH_TEST);
// 设置深度测试的类型
gl.glDepthFunc(GL10.GL_LEQUAL);
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height)
{
// 设置3D视窗的大小及位置
gl.glViewport(0, 0, width, height);
// 将当前矩阵模式设为投影矩阵
gl.glMatrixMode(GL10.GL_PROJECTION);
// 初始化单位矩阵
gl.glLoadIdentity();
// 计算透视视窗的宽度、高度比
float ratio = (float) width / height;
// 调用此方法设置透视视窗的空间大小。
gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
}
// 绘制图形的方法
@Override
public void onDrawFrame(GL10 gl)
{
// 清除屏幕缓存和深度缓存
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
// 启用顶点座标数据
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
// 启用顶点颜色数据
gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
// 设置当前矩阵模式为模型视图。
gl.glMatrixMode(GL10.GL_MODELVIEW);
// --------------------绘制第一个图形---------------------
// 重置当前的模型视图矩阵
gl.glLoadIdentity();
gl.glTranslatef(-0.6f, 0.0f, -1.5f);
// 沿着Y轴旋转
gl.glRotatef(rotate, 0f, 0.2f, 0f);
// 设置顶点的位置数据
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, taperVerticesBuffer);
// 设置顶点的颜色数据
gl.glColorPointer(4, GL10.GL_FIXED, 0, taperColorsBuffer);
// 按taperFacetsBuffer指定的面绘制三角形
gl.glDrawElements(GL10.GL_TRIANGLE_STRIP
, taperFacetsBuffer.remaining(),
GL10.GL_UNSIGNED_BYTE, taperFacetsBuffer);
// --------------------绘制第二个图形---------------------
// 重置当前的模型视图矩阵
gl.glLoadIdentity();
gl.glTranslatef(0.7f, 0.0f, -2.2f);
// 沿着Y轴旋转
gl.glRotatef(rotate, 0f, 0.2f, 0f);
// 沿着X轴旋转
gl.glRotatef(rotate, 1f, 0f, 0f);
// 设置顶点的位置数据
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, cubeVerticesBuffer);
// 不设置顶点的颜色数据,还用以前的颜色数据
// 按cubeFacetsBuffer指定的面绘制三角形
gl.glDrawElements(GL10.GL_TRIANGLE_STRIP
, cubeFacetsBuffer.remaining(),
GL10.GL_UNSIGNED_BYTE, cubeFacetsBuffer);
// 绘制结束
gl.glFinish();
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
// 旋转角度增加1
rotate+=1;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
android openGl绘制3d图形
共13个文件
xml:3个
java:3个
png:3个
4星 · 超过85%的资源 需积分: 50 22 下载量 106 浏览量
2013-07-17
17:08:13
上传
评论 1
收藏 21KB ZIP 举报
温馨提示
构建3D图形,OpenGl ES 绘制3D图形的放回绘制2D的图形的大致方法
资源推荐
资源详情
资源评论
收起资源包目录
Simple3D.zip (13个子文件)
Simple3D
res
drawable-ldpi
icon.png 2KB
drawable-hdpi
icon.png 6KB
values
strings.xml 170B
drawable-mdpi
icon.png 4KB
layout
main.xml 358B
assets
default.properties 362B
gen
org
crazyit
opengl
R.java 640B
proguard.cfg 1KB
src
org
crazyit
opengl
Simple3D.java 819B
MyRenderer.java 5KB
.project 844B
.classpath 280B
AndroidManifest.xml 558B
共 13 条
- 1
资源评论
- 郑荣松2014-07-03很不错的例子
q414620221
- 粉丝: 374
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功