package com.android.neweffect;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import com.android.neweffect.R;
import android.content.res.Resources;
import android.opengl.GLUtils;
import android.opengl.GLSurfaceView.Renderer;
import android.util.Log;
public class GLRender implements Renderer
{
private static Resources mResources;
public float rotateQuad;
public float Translate = 0.0f;
public float scale = 0.0f;
// Unit of Matrix
int one = 0x10000;
int half = 0x8000;
int three = 0x30000;
// Matrix buffer
private IntBuffer quaterBuffer;
private IntBuffer textureBuffer;
// Item object
private List<GLItemObject> mList = new LinkedList<GLItemObject>();
// Temp code
private GLItemObjectBase mItem;
private GLItemObjectBase mItem1;
private GLItemObjectBase mItem2;
private GLItemObjectBase mItem3;
private GLItemObjectBase mItem4;
private GLItemObjectBase mItem5;
private GLItemObjectBase mItem6;
private GLItemObjectBase mItem7;
private GLItemObjectBase mItem8;
private GLItemObjectBase mItem9;
private GLItemObjectBase mItem10;
//Temp code
private static final int mItemCount = 11;
private static float m_iTransZ = 2.0f;
//定义环境光(r,g,b,a)
private static FloatBuffer lightAmbient = FloatBuffer.wrap(new float[]{0.5f,0.5f,0.5f,1.0f});
//定义漫射光
private static FloatBuffer lightDiffuse = FloatBuffer.wrap(new float[]{1.0f,1.0f,1.0f,1.0f});
//光源的位置
private static FloatBuffer lightPosition = FloatBuffer.wrap(new float[]{0.0f,0.0f,2.0f,10.0f});
int texture = -1;
//正方形的4个顶点
int verticesMatrix[] = {
-one,-half,three,
one,-half,three,
one,half,three,
-one,half,three,
};
int textureMatrix[] = {
0,one,one,one,one,0,0,0,
// one,0,0,0,0,one,one,one,
// 0,0,0,one,one,one,one,0,
// one,one,one,0,0,0,0,one,
// 0,one,one,one,one,0,0,0,
// 0,0,0,one,one,one,one,0,
// one,0,0,0,0,one,one,one,
};
ByteBuffer indicesBuffer = ByteBuffer.wrap(new byte[]{
0,1,3,2,
// 4,5,7,6,
// 8,9,11,10,
// 12,13,15,14,
// 16,17,19,18,
// 20,21,23,22,
});
public GLRender()
{
ByteBuffer vbb = ByteBuffer.allocateDirect(verticesMatrix.length*4);
vbb.order(ByteOrder.nativeOrder());
quaterBuffer = vbb.asIntBuffer();
quaterBuffer.put(verticesMatrix);
quaterBuffer.position(0);
ByteBuffer vbbTex = ByteBuffer.allocateDirect(textureMatrix.length*4);
vbbTex.order(ByteOrder.nativeOrder());
textureBuffer = vbbTex.asIntBuffer();
textureBuffer.put(textureMatrix);
textureBuffer.position(0);
}
@Override
public void onDrawFrame(GL10 gl)
{
// 清除屏幕和深度缓存
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
//如果不启用GL_LIGHTING光就什么都看不见
gl.glEnable(GL10.GL_LIGHTING);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
// draw
{
//draw all items
drawAllItems();
}
//取消顶点数组
gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
//改变旋转的角度
// rotateQuad -= 0.5f;*/
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height)
{
// TODO Auto-generated method stub
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.glShadeModel(GL10.GL_SMOOTH);
// 背景色
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
// 设置深度缓存
gl.glClearDepthf(1.0f);
// 启用深度测试
gl.glEnable(GL10.GL_DEPTH_TEST);
// 所作深度测试的类型
gl.glDepthFunc(GL10.GL_LEQUAL);
// 告诉系统对透视进行修正
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
//允许2D贴图,纹理
gl.glEnable(GL10.GL_TEXTURE_2D);
// Init the environment
{
// set the matrix to Item
GLItemObjectBase.setBuffer(quaterBuffer, textureBuffer, indicesBuffer);
// init all items
initAllItems(gl);
}
// 线形滤波
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
//设置环境光
gl.glLightfv(GL10.GL_LIGHT1, GL10.GL_AMBIENT, lightAmbient);
//设置漫射光
gl.glLightfv(GL10.GL_LIGHT1, GL10.GL_DIFFUSE, lightDiffuse);
//设置光源的位置
gl.glLightfv(GL10.GL_LIGHT1, GL10.GL_POSITION, lightPosition);
//启用一号光源
gl.glEnable(GL10.GL_LIGHT1);
}
public void setResources(Resources resources)
{
mResources = resources;
}
public void setTranslate(float fTrans)
{
this.Translate = fTrans;
mItem.Translate = fTrans;
mItem1.Translate = fTrans;
mItem2.Translate = fTrans;
mItem3.Translate = fTrans;
mItem4.Translate = fTrans;
mItem5.Translate = fTrans;
mItem6.Translate = fTrans;
mItem7.Translate = fTrans;
mItem8.Translate = fTrans;
mItem9.Translate = fTrans;
mItem10.Translate = fTrans;
// Iterator<GLItemObject> it = mList.iterator();
// while(it.hasNext())
// {
// it.next().Translate = fTrans;
// }
// for (int i=0; i<mItemCount; i++)
// {
// mList.get(i).Translate = fTrans;
// }
}
public void initAllItems(GL10 gl)
{
// load item_bg
GLImage.load(mResources, R.drawable.item_bg);
// for (int i=0; i<mItemCount; i++)
// {
// GLItemObject Item = new GLItemObject(gl, "\nFrom: 13XXXXXXXXXX\nDate: 2010/1/1\nHello, how are you?",
// mResources, R.drawable.item_bg);
// mList.add(i, Item);
// }
// Temp code
GLItemData data = new GLItemData();
data.setBmp(null);
data.setNum("13000000000");
data.setDate("2010/1/1");
data.setCont("Hello, how are you?");
mItem = new GLItemObject(gl, data, mResources, R.drawable.item_bg);
data.setBmp(null);
data.setNum("1311111111");
data.setDate("2010/2/1");
data.setCont("2Hello, how are you?");
mItem1 = new GLItemObject(gl, data, mResources, R.drawable.item_bg);
data.setBmp(null);
data.setNum("132222");
data.setDate("2010/3/1");
data.setCont("3Hello, how are you?");
mItem2 = new GLItemObject(gl, data, mResources, R.drawable.item_bg);
data.setBmp(null);
data.setNum("1333333");
data.setDate("2010/4/1");
data.setCont("4Hello, how are you?");
mItem3 = new GLItemObject(gl, data, mResources, R.drawable.item_bg);
data.setBmp(null);
data.setNum("13444444");
data.setDate("2010/5/1");
data.setCont("5Hello, how are you?");
mItem4 = new GLItemObject(gl, data, mResources, R.drawable.item_bg);
data.setBmp(null);
data.setNum("13555555");
data.setDate("2010/6/1");
data.setCont("6Hello, how are you?");
mItem5 = new GLItemObject(gl, data, mResources, R.drawable.item_bg);
data.setBmp(null);
data.setNum("136666666");
data.setDate("2010/7/1");
data.setCont("7Hello, how are you?");
mItem6 = new GLItemObject(gl, data, mResources, R.drawable.item_bg);
data.setBmp(null);
data.setNum("137777777");
data.setDate("2010/8/1");
data.setCont("8Hello, how are you?")
没有合适的资源?快使用搜索试试~ 我知道了~
基于OpenGL实现的类似Gallery控件的滑动效果

共34个文件
class:12个
java:8个
png:5个


温馨提示
Android开发中有一个Gallery控件直接调用可以实现水平滑动效果,若需要实现垂直方向上或者比较3D效果的滑动则需要重写该类,而基于OpenGL同样可以实现该种效果,加上OpenGl控件上多了一个Z方向,更能实现3D的效果,该代码为修改过的OpenGL实现垂直方向上的类似Gallery滑动效果...
资源推荐
资源详情
资源评论




















收起资源包目录

























































共 34 条
- 1

叫我Aso
- 粉丝: 382
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 校园数据中心网络安全防范体系研究.doc
- 基于MCGS和PLC的反渗透水处理监控系统设计.doc
- 基于单片机的四路电子抢答器设计报告书.docx
- 系统集成项目管理工程师.doc
- 福师计算机体系结构在线作业一答案.doc
- 电子商务中心2023年年工作总结.docx
- 2023年物联网技术与应用考试题库完整版.doc
- pid神经元网络解耦控制.pptx
- 红孩子网站推广方案.doc
- 信息化个人年终总结.doc
- 两法衔接软件代理.ppt
- 事业单位网络工程师工作参考总结范本.docx
- 基本的算法策略.pptx
- 图的算法3.doc.pdf
- 计算机发展与应用-锐得ppt模板.pptx
- 软件需求分析说明书模板.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制

- 1
- 2
- 3
- 4
- 5
前往页