`
ynw520
  • 浏览: 28630 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

andriod 3d 初探

阅读更多
[/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;
}
1
1
分享到:
评论

相关推荐

    android开发揭秘PDF

    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 数据共享...

    《Android应用开发揭秘》附带光盘代码.

     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...

    Android应用开发揭秘pdf高清版

    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 数据共享...

    《Android应用开发揭秘》源码

     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...

    Android开发资料合集-World版!

    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、再...

    Android 开发技巧

    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、再...

    雨松MOMO程序研究院

    FingerGestures研究院之初探Unity手势操作(一) iTween研究院之学习笔记Move移动篇(一) Android研究院之应用程序对话框大合集(一) Cocos2D研究院之构建游戏开发环境(一) Direct3D研究院之创建第一个...

    老孙的游戏课:第1篇 Unity入门

    你将学到一款十分流行的游戏制作引擎——Unity,它是一个跨平台的游戏开发软件,只要你的游戏在电脑上制作完成,便可以同时发布成Android版和iOS版,甚至发布成Web版。 在这门课程中你将学习到:游戏对象的创建、...

    unity2d 游戏开发资源 unity2d 游戏开发资源

    目录 目 录 第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 — 免费云时代来临...

Global site tag (gtag.js) - Google Analytics