`
ynw520
  • 浏览: 29135 次
  • 性别: 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初探Android.doc

    Android还提供了丰富的应用程序框架和库,支持3D处理、网络等功能,为用户提供更出色的体验。 Dalvik虚拟机是Android应用程序运行的核心,不同于Sun的J2ME,它专为移动设备优化,确保应用程序在资源有限的设备上...

    入门--初探Android

    "入门--初探Android" Android是一个基于Linux核心(kernel)的开源手机操作系统平台。它于2007年11月5日由Google与其他33家手机制造商、手机晶片供应商、软件供应商、电信运营商所组成的开放手机联盟(Open Handset ...

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

    llk.zip_android

    《Android游戏开发初探——基于"llk.zip"的实践解析》 在移动应用领域,Android游戏开发无疑占据了重要的地位,吸引着众多编程爱好者投身其中。本文将基于一个名为"llk.zip"的压缩包文件,探讨如何进行Android游戏...

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

    Android Applications (1) Introduction to the Development.pdf

    ### Android应用开发初探——基于S3C6410平台 #### 一、引言 随着移动互联网的快速发展,Android作为最受欢迎的操作系统之一,在全球范围内拥有庞大的用户基础。对于开发者而言,掌握Android应用程序开发的基本原理...

    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研究院之创建第一个...

    coursera-intro-android-graphics

    《Android图形编程初探——基于Kotlin》 在Android应用开发中,图形界面的设计与实现是至关重要的一环,尤其在当今用户体验至上的时代。本课程“Coursera-intro-android-graphics”专为对Android图形编程感兴趣的...

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

    PrimaryFeather-Starling-Framework-v1.2-0-g2a42a8e

    《Starling框架初探:基于AS3的游戏开发实践》 在数字媒体和游戏开发领域,高效、跨平台的渲染框架是至关重要的。其中,Starling Framework以其轻量级、高性能的特点,深受ActionScript 3(AS3)开发者们的喜爱。本...

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

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

    XE3Installer.rar

    《Delphi编程初探——基于XE3Installer的安装体验》 在编程领域,Delphi一直以其高效、便捷的特性受到广大开发者的喜爱。本篇文章将深入探讨Delphi编程环境,特别是针对"XE3Installer.rar"这个压缩包,我们将讨论其...

    QT学习之路(适合新手)

    QT是由Qt Company开发的开源库,它支持多种操作系统,如Windows、Linux、macOS、Android等。QT使用C++语言编写,提供了丰富的图形用户界面(GUI)组件和网络编程功能,广泛应用于软件开发、嵌入式系统和物联网设备。...

    GuttaKrutt

    《GuttaKrutt:基于Java的libGDX游戏框架初探》 在IT行业中,游戏开发是一项技术密集型的工作,而Java作为一种广泛使用的编程语言,自然也被应用到了游戏开发领域。GuttaKrutt是一个名为“INF112 Maven模板”的项目...

    CanyonBunny:一个简单的2d游戏

    《CanyonBunny:基于LibGDX的2D游戏开发初探》 CanyonBunny是一款基于Java编程语言和LibGDX框架开发的2D游戏,它为初学者提供了一个良好的平台来学习和实践游戏开发技术。LibGDX是Java社区中广泛使用的开源游戏开发...

Global site tag (gtag.js) - Google Analytics