/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.ex;
import java.io.IOException;
import java.io.InputStream;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.opengl.GLSurfaceView;
import android.opengl.GLUtils;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.widget.Toast;
/**
* Wrapper activity demonstrating the use of {@link GLSurfaceView}, a view that
* uses OpenGL drawing into a dedicated surface.
*
* Shows: + How to redraw in response to user input.
*/
public class Main extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Create our Preview view and set it as the content of our
// Activity
mGLSurfaceView = new TouchSurfaceView(this);
setContentView(mGLSurfaceView);
mGLSurfaceView.requestFocus();
mGLSurfaceView.setFocusableInTouchMode(true);
}
@Override
protected void onResume() {
// Ideally a game should implement onResume() and onPause()
// to take appropriate action when the activity looses focus
super.onResume();
mGLSurfaceView.onResume();
}
@Override
protected void onPause() {
// Ideally a game should implement onResume() and onPause()
// to take appropriate action when the activity looses focus
super.onPause();
mGLSurfaceView.onPause();
}
private GLSurfaceView mGLSurfaceView;
}
/**
* Implement a simple rotation control.
*
*/
class TouchSurfaceView extends GLSurfaceView {
private boolean axesX = true;
public void setAxesX(boolean b) {
axesX = b;
}
public TouchSurfaceView(Context context) {
super(context);
mRenderer = new CubeRenderer(context);
setRenderer(mRenderer);
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
}
@Override
public boolean onTrackballEvent(MotionEvent e) {
float dx = Math.abs(e.getX() * TRACKBALL_SCALE_FACTOR);
float dy = Math.abs(e.getY() * TRACKBALL_SCALE_FACTOR);
if (dx > dy && dx > 2.5) {
mRenderer.mAngleX += e.getX() * TRACKBALL_SCALE_FACTOR;
mRenderer.mAngleY += e.getY() * TRACKBALL_SCALE_FACTOR;
this.setAxesX(true);
} else if (dx < dy && dy > 2.5) {
mRenderer.mAngleX += e.getX() * TRACKBALL_SCALE_FACTOR;
mRenderer.mAngleY += e.getY() * TRACKBALL_SCALE_FACTOR;
this.setAxesX(false);
}
requestRender();
return true;
}
@Override
public boolean onTouchEvent(MotionEvent e) {
float x = e.getX();
float y = e.getY();
switch (e.getAction()) {
case MotionEvent.ACTION_MOVE:
float dx = x - mPreviousX;
float dy = y - mPreviousY;
if (Math.abs(dx) > Math.abs(dy) && Math.abs(dx) > 2.5) {
mRenderer.mAngleX += dx * TOUCH_SCALE_FACTOR;
mRenderer.mAngleY += dy * TOUCH_SCALE_FACTOR;
this.setAxesX(true);
} else if (Math.abs(dx) < Math.abs(dy) && Math.abs(dy) > 2.5) {
mRenderer.mAngleX += dx * TOUCH_SCALE_FACTOR;
mRenderer.mAngleY += dy * TOUCH_SCALE_FACTOR;
this.setAxesX(false);
}
requestRender();
}
mPreviousX = x;
mPreviousY = y;
return true;
}
/**
* Render a cube.
*/
private class CubeRenderer implements GLSurfaceView.Renderer {
public CubeRenderer(Context context) {
mContext = context;
mCube = new Cube();
}
public void onDrawFrame(GL10 gl) {
Log.i("=============", "this.mAngleX=" + this.mAngleX
+ ",this.mAngleY=" + this.mAngleY);
gl.glTexEnvx(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE,
GL10.GL_MODULATE);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
MyUtil.deBug("drawFrame");
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
// gl.glTranslatef(0, 0.0f, -1.0f);
if (axesX) {
gl.glRotatef(mAngleX, 0, 1, 0);
} else {
gl.glRotatef(mAngleY, 1, 0, 0);
}
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
mCube.draw(gl);
}
// 当屏幕 改变时候,比如手机横着拿,变成竖着拿,先onSurfaceCreated 在两次onSurfaceChanged 。
public void onSurfaceChanged(GL10 gl, int width, int height) {
gl.glViewport(0, 0, 320, 320);
/**
* float ratio = (float) width / height;
* gl.glMatrixMode(GL10.GL_PROJECTION); gl.glLoadIdentity();
* gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
*
* gl.glMatrixMode(GL10.GL_MODELVIEW);
**/
// Toast.makeText(mContext, "width=" + width,
// Toast.LENGTH_SHORT).show();
}
// 当屏幕 改变时候,比如手机横着拿,变成竖着拿,先onSurfaceCreated 在两次onSurfaceChanged 。
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
// 载入纹理 自己写的方法
loadTexture(gl, 1, R.drawable.cube_front);
loadTexture(gl, 2, R.drawable.cube_back);
loadTexture(gl, 3, R.drawable.cube_left);
loadTexture(gl, 4, R.drawable.cube_right);
loadTexture(gl, 5, R.drawable.cube_top);
loadTexture(gl, 6, R.drawable.cube_bottom);
gl.glDisable(GL10.GL_DITHER);
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
gl.glClearColor(1, 1, 1, 1);
gl.glEnable(GL10.GL_CULL_FACE);
gl.glShadeModel(GL10.GL_SMOOTH);
gl.glEnable(GL10.GL_DEPTH_TEST);
// 默认旋转
gl.glRotatef(10.0f, 1.0f, 1.0f, 0);
}
public void loadTexture(GL10 gl, int no, int drawableId) {
// 定义纹理
int[] textures = new int[1];
switch (no) {
// 绑定生成绑定纹理
case 1:
gl.glGenTextures(1, textures, 0);
Cube.mTextureID_front = textures[0];
gl.glBindTexture(GL10.GL_TEXTURE_2D, Cube.mTextureID_front);
break;
case 2:
gl.glGenTextures(1, textures, 0);
Cube.mTextureID__back = textures[0];
gl.glBindTexture(GL10.GL_TEXTURE_2D, Cube.mTextureID__back);
break;
case 3:
gl.glGenTextures(1, textures, 0);
Cube.mTextureID_left = textures[0];
gl.glBindTexture(GL10.GL_TEXTURE_2D, Cube.mTextureID_left);
break;
case 4:
gl.glGenTextures(1, textures, 0);
Cube.mTextureID_right = textures[0];
gl.glBindTexture(GL10.GL_TEXTURE_2D, Cube.mTextureID_right);
break;
case 5:
gl.glGenTextures(1, textures, 0);
Cube.mTextureID_top = textures[0];
gl.glBindTexture(GL10.GL_TEXTURE_2D, Cube.mTextureID_top);
break;
case 6:
gl.glGenTextures(1, textures, 0);
Cube.mTextureID_bottom = textures[0];
gl.glBindTexture(GL10.GL_TEXTURE_2D, Cube.mTextureID_bottom);
break;
}
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,
GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER,
GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S,
GL10.GL_CLAMP_TO_EDGE);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T,
GL10.GL_CLAMP_TO_EDGE);
gl.glTexEnvf(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE,
GL10.GL_REPLACE);
InputStream is = mContext.getResources()
.openRawResource(drawableId);
Bitmap bitmapTmp;
try {
bitmapTmp = BitmapFactory.decodeStream(is);
} finally {
try {
is.close();
} catch (IOException e) {
// Ignore.
}
}
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmapTmp, 0);
bitmapTmp.recycle();
}
private Cube mCube;
// private int mTextureID;
private Context mContext;
public fl
没有合适的资源?快使用搜索试试~ 我知道了~
Android应用源码之3D立方体旋转demo.zip项目安卓应用源码下载
共36个文件
class:11个
bmp:6个
java:5个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 165 浏览量
2022-03-07
19:20:02
上传
评论
收藏 2.21MB ZIP 举报
温馨提示
Android应用源码之3.第一个Android程序.zip项目安卓应用源码下载Android应用源码之3.第一个Android程序.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考
资源推荐
资源详情
资源评论
收起资源包目录
Android应用源码之3D立方体旋转demo.zip (36个子文件)
Android应用源码之3D立方体旋转demo
Android应用源码之3D立方体旋转demo
openGL-S
bin
classes.dex 13KB
res
drawable
icon.png 3KB
jarlist.cache 120B
dexedLibs
annotations-febac7f1873ea6479d9e45082ad36b45.jar 943B
classes
com
ex
BuildConfig.class 321B
Cube.class 3KB
R$layout.class 358B
TouchSurfaceView.class 2KB
MyUtil.class 852B
R$drawable.class 565B
R$attr.class 304B
R.class 417B
Main.class 973B
R$string.class 518B
TouchSurfaceView$CubeRenderer.class 4KB
resources.ap_ 747KB
AndroidManifest.xml 663B
openGL-S.apk 755KB
res
drawable
cube_right.bmp 192KB
cube_front.bmp 192KB
cube_back.bmp 192KB
cube_bottom.bmp 192KB
cube_top.bmp 192KB
icon.png 3KB
cube_left.bmp 192KB
values
strings.xml 366B
layout
main.xml 382B
assets
gen
com
ex
BuildConfig.java 148B
R.java 1KB
src
com
ex
MyUtil.java 263B
Cube.java 5KB
Main.java 8KB
.project 844B
.classpath 475B
project.properties 562B
AndroidManifest.xml 663B
共 36 条
- 1
资源评论
yxkfw
- 粉丝: 76
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功