[/color]看了sdk中的3d的例子,自已写了一个棱形的例子.
[b[color=red]]Prism.java[/b]
package cn.ynw520;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.IntBuffer;
import javax.microedition.khronos.opengles.GL10;
/**
* A vertex shaded prism.
*/
class Prism
{
public Prism()
{
int one = 0x10000;
//这里是四个顶点(按顺时针方向来存储)
int vertices[] = {
0, 0, one*2,
0, one, 0,
-one, -one,0,
one, -one,0,
};
//每个顶点的颜色
int colors[] = {
0, 0, 0, one,
one, 0, 0, one,
one, one, 0, one,
0, one, 0, one,
};
//按顺时针,由点组成的4个面,一行代表一个面
byte indices[] = {
0, 1, 2,
0, 2, 3,
0, 3, 1,
1, 2, 3,
};
ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length*4);
vbb.order(ByteOrder.nativeOrder());
mVertexBuffer = vbb.asIntBuffer();
mVertexBuffer.put(vertices);
mVertexBuffer.position(0);
ByteBuffer cbb = ByteBuffer.allocateDirect(colors.length*4);
cbb.order(ByteOrder.nativeOrder());
mColorBuffer = cbb.asIntBuffer();
mColorBuffer.put(colors);
mColorBuffer.position(0);
mIndexBuffer = ByteBuffer.allocateDirect(indices.length);
mIndexBuffer.put(indices);
mIndexBuffer.position(0);
}
public void draw(GL10 gl)
{
gl.glFrontFace(gl.GL_CW); //说明按顺时针方向
gl.glVertexPointer(3, gl.GL_FIXED, 0, mVertexBuffer); //这个是画点,3代表维数,第二个参数代表值的类型,第三个好像都为0
gl.glColorPointer(4, gl.GL_FIXED, 0, mColorBuffer); //画点的颜色
gl.glDrawElements(gl.GL_TRIANGLES, 12, gl.GL_UNSIGNED_BYTE, mIndexBuffer); //开始画了,第一个代表用什么形状画(三角形),第二个参数代表组成面的点数,第三个是点数据的类型
}
private IntBuffer mVertexBuffer;
private IntBuffer mColorBuffer;
private ByteBuffer mIndexBuffer;
}
PrismRender.java
package cn.ynw520;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.opengl.GLSurfaceView.Renderer;
public class PrismRender implements Renderer {
public PrismRender(boolean useTranslucentBackground) {
mTranslucentBackground = useTranslucentBackground;
mPrism = new Prism();
}
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); //清除
gl.glMatrixMode(GL10.GL_MODELVIEW); //mode
gl.glLoadIdentity(); // 重置模型观察矩阵
gl.glTranslatef(0, 0, -3.0f); //相当于原点移动
gl.glRotatef(mAngle, 0, 1, 0); //绕y轴转动,mAngel代表角度
gl.glRotatef(mAngle*0.25f, 1, 0, 0); //绕x轴转动
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); //说明数据可以画
gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
mPrism.draw(gl);
mAngle += 1.2f;
}
public void onSurfaceChanged(GL10 gl, int width, int height) {
gl.glViewport(0, 0, width, height);
float ratio = (float) width / height;
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);
}
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
gl.glDisable(GL10.GL_DITHER);
/*
* Some one-time OpenGL initialization can be made here
* probably based on features of this particular context
*/
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT,
GL10.GL_FASTEST);
if (mTranslucentBackground) {
gl.glClearColor(0,0,0,0);
} else {
gl.glClearColor(1,1,1,1);
}
gl.glEnable(GL10.GL_CULL_FACE);
gl.glShadeModel(GL10.GL_SMOOTH);
gl.glEnable(GL10.GL_DEPTH_TEST);
}
private boolean mTranslucentBackground;
private float mAngle;
private Prism mPrism;
}
prismActivity.java
package cn.ynw520;
import android.app.Activity;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
public class PrismActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mGLSurfaceView = new GLSurfaceView(this);
mGLSurfaceView.setRenderer(new PrismRender(false));
setContentView(mGLSurfaceView);
}
@Override
protected void onResume() {
super.onResume();
mGLSurfaceView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mGLSurfaceView.onPause();
}
private GLSurfaceView mGLSurfaceView;
}
分享到:
相关推荐
6.1 Android数据存储初探 6.2 数据存储之Shared Preferences 6.3 数据存储之Files 6.4 数据存储之Network 6.5 Android数据库编程 6.5.1 SQLite简介 6.5.2 SQLite编程详解 6.5.3 SQLiteOpenHelper应用 6.6 数据共享...
6.1 Android数据存储初探 6.2 数据存储之Shared Preferences 6.3 数据存储之Files 6.4 数据存储之Network 6.5 Android数据库编程 6.5.1 SQLite简介 6.5.2 SQLite编程详解 6.5.3 SQLiteOpenHelper...
6.1 Android数据存储初探 6.2 数据存储之Shared Preferences 6.3 数据存储之Files 6.4 数据存储之Network 6.5 Android数据库编程 6.5.1 SQLite简介 6.5.2 SQLite编程详解 6.5.3 SQLiteOpenHelper应用 6.6 数据共享...
6.1 Android数据存储初探 6.2 数据存储之Shared Preferences 6.3 数据存储之Files 6.4 数据存储之Network 6.5 Android数据库编程 6.5.1 SQLite简介 6.5.2 SQLite编程详解 6.5.3 SQLiteOpenHelper...
9.86、ANDROID自动化测试初探 324 9.86.1、捕获Activity上的Element 324 9.86.2、Hierarchyviewer 捕获Element的 328 9.86.3、架构实现 330 9.86.4、模拟键盘鼠标事件(Socket+Instrumentation实现) 332 9.86.5、再...
9.86、ANDROID自动化测试初探 324 9.86.1、捕获Activity上的Element 324 9.86.2、Hierarchyviewer 捕获Element的 328 9.86.3、架构实现 330 9.86.4、模拟键盘鼠标事件(Socket+Instrumentation实现) 332 9.86.5、再...
FingerGestures研究院之初探Unity手势操作(一) iTween研究院之学习笔记Move移动篇(一) Android研究院之应用程序对话框大合集(一) Cocos2D研究院之构建游戏开发环境(一) Direct3D研究院之创建第一个...
你将学到一款十分流行的游戏制作引擎——Unity,它是一个跨平台的游戏开发软件,只要你的游戏在电脑上制作完成,便可以同时发布成Android版和iOS版,甚至发布成Web版。 在这门课程中你将学习到:游戏对象的创建、...
目录 目 录 第1 章 初探 Unity游戏引擎 1.1 Unity 热浪来袭 2 1.2 Unity 初步认识 2 平台支持 3 性化操作 3 Plug In 4 所见即所得 4 1.3 Unity 版本演进 5 Unity 4.3 — 2D、3D 分水岭 5 Unity 5 — 免费云时代来临...