min3d 引擎学习笔记之一

原文链接:https://my.oschina.net/fuyajun1983cn/blog/263961

min3d是一个小巧的android 3d UI引擎, 最近想对其进行深入源码分析, 在深入学习之前, 还是先学会怎么用它吧。

min3d是基于opengl es 1.x的, 它封装了opengl 的一些基本的绘图操作以及绘图管理和渲染操作,形成了一个框架。核心类主要包括场景类(Scene), 渲染类(Render)以及场景上的对象类(Object3d)及其子类。它提供了一个活动类RenderActivity, 使用者只需要实现其中的initScene()和updateScene()方法即可。

 

下面给出一个使用的例子:

如下代码绘制一个正方形,并进行纹理贴图。

import min3d.Shared;
import min3d.Utils;
import min3d.core.Object3d;
import min3d.core.RendererActivity;
import min3d.vos.Number3d;
import min3d.vos.RenderType;
import min3d.vos.Uv;
import android.graphics.Bitmap;


public class TestAndroid8Activity extends RendererActivity {

	Object3d square;
	
	@Override
	public void initScene() {
		
		Bitmap b = Utils.makeBitmapFromResourceId(this, R.drawable.icon);
		
		/**
		 * 采用glDrawElements()方法, 一个face代表一个三角形
		 */
		
		square = new Object3d(4, 2, true, false, false);
		square.vertices().addVertex(new Number3d(-1.0f, -1.0f, 0), new Uv(0, 0), null, null);
		square.vertices().addVertex(new Number3d(1.0f, -1.0f, 0), new Uv(0, 1), null, null);
		square.vertices().addVertex(new Number3d(-1.0f, 1.0f, 0), new Uv(1, 0), null, null);
		square.vertices().addVertex(new Number3d(1.0f, 1.0f, 0), new Uv(1, 1), null, null);
		square.renderType(RenderType.TRIANGLE_STRIP);
//		square.faces().add(0, 1, 2);
//		square.faces().add(1, 3, 2);
		Utils.addQuad(square, 2, 3, 1, 0);
		square.doubleSidedEnabled(true);
		
		/**
		 * 采用glDrawArrays()方法, 忽略face
		 */
//		square = new Object3d(4, 0, false, false, false);
//		square.vertices().addVertex(new Number3d(-1.0f, -1.0f, 0), null, null, null);
//		square.vertices().addVertex(new Number3d(1.0f, -1.0f, 0), null, null, null);
//		square.vertices().addVertex(new Number3d(-1.0f, 1.0f, 0), null, null, null);
//		square.vertices().addVertex(new Number3d(1.0f, 1.0f, 0), null, null, null);
//		square.renderType(RenderType.TRIANGLE_STRIP);
//		square.ignoreFaces(true);
//		square.doubleSidedEnabled(true);
		
		Shared.textureManager().addTextureId(b, "icon", false);
		square.textures().addById("icon");
		
		b.recycle();
		
		scene.addChild(square);
		
	}

	@Override
	public void updateScene() {
		// TODO Auto-generated method stub
		square.rotation().y++;
	}

	
}


 

转载于:https://my.oschina.net/fuyajun1983cn/blog/263961

上一篇:CF1A Theatre Square


下一篇:实验六