当前位置:  编程技术>移动开发
本页文章导读:
    ▪运用GLU.gluOrtho2D画的一个可以旋转的正方形        使用GLU.gluOrtho2D画的一个可以旋转的正方形 package com.zlb.DemoRect2; import static android.opengl.GLES10.GL_CCW; import static android.opengl.GLES10.GL_FLOAT; import static android.opengl.GLES10.GL_TEXTURE_2D; import static android.ope.........
    ▪ dip, dp, px, sp差别与换算        dip, dp, px, sp区别与换算 显示单位px和dip以及sp的区别dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,.........
    ▪ 宏大的LLVM伟大Apple伟大ARC       伟大的LLVM伟大Apple伟大ARC LLVM带了了ARC,神一样的东西~梦幻般的思想。 彻底了解了GC和引用计数那个好的争论。 Automatic Reference Counting Automatic Reference Counting (ARC) for Objective-C makes memory managemen.........

[1]运用GLU.gluOrtho2D画的一个可以旋转的正方形
    来源: 互联网  发布时间: 2014-02-18
使用GLU.gluOrtho2D画的一个可以旋转的正方形
package com.zlb.DemoRect2;

import static android.opengl.GLES10.GL_CCW;
import static android.opengl.GLES10.GL_FLOAT;
import static android.opengl.GLES10.GL_TEXTURE_2D;
import static android.opengl.GLES10.GL_TRIANGLE_STRIP;
import static android.opengl.GLES10.GL_UNSIGNED_SHORT;
import static android.opengl.GLES10.glDrawElements;
import static android.opengl.GLES10.glEnable;
import static android.opengl.GLES10.glFrontFace;
import static android.opengl.GLES10.glTexCoordPointer;
import static android.opengl.GLES10.glVertexPointer;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.nio.ShortBuffer;

import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import javax.microedition.khronos.opengles.GL11;

import android.app.Activity;
import android.opengl.GLSurfaceView;
import android.opengl.GLU;
import android.opengl.GLSurfaceView.Renderer;
import android.os.Bundle;
import android.os.SystemClock;
import android.util.Log;

public class DemoRect2Activity extends Activity {
	GLSurfaceView mGLSurfaceView;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		mGLSurfaceView = new GLSurfaceView(this);
		mGLSurfaceView.setRenderer(new RectRenderer());
		setContentView(mGLSurfaceView);
	}

	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		mGLSurfaceView.onPause();
	}

	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		mGLSurfaceView.onResume();
	}
}

class RectRenderer implements Renderer {

	private Triangle mTriangle;
	private long mLastTime;

	public RectRenderer() {
		mTriangle = new Triangle();
	}

	public void onDrawFrame(GL10 gl) {
		gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
		gl.glMatrixMode(GL10.GL_MODELVIEW);
		gl.glLoadIdentity();
		
//		gl.glTranslatef(0.0f, 0.0f, -8.0f);
		GLU.gluLookAt(gl, 0f, 0f, 1f, 0f, 0f, 0f, 0f, 1f, 0f);

		long time = SystemClock.uptimeMillis() % 4000L;
		float angle = 0.090f * ((int) time);
		Log.d("zhang", "///////////////////////////////////////=======angle = "+angle);
		gl.glRotatef(angle, 0, 1f, 0);
		mTriangle.draw(gl);
	}

	public void onSurfaceChanged(GL10 gl, int width, int height) {
		if (height == 0) {
			height = 1;
		}
		gl.glViewport(0, 0, width, height);
		gl.glMatrixMode(GL10.GL_PROJECTION);
		gl.glLoadIdentity();
		Log
				.d("zhanglibin",
						">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
//		GLU.gluPerspective(gl, 45.0f, (float) width / (float) height, 0.1f,
//				100.0f);
//		gl.glFrustumf(-(float)width/height,(float)width/height, -1f, 1f, 2f, 100f);
//		 GLU.gluOrtho2D(gl, 0f, (float)width, 0f, (float)height);
//		 gl.glOrthof(-(float)width/2, (float)width/2, -(float)height/2,
//				 (float)height/2, -1, 100f);
		 GLU.gluOrtho2D(gl, -(float)width/2, (float)width/2, -(float)height/2,
		 (float)height/2);

		gl.glMatrixMode(GL10.GL_MODELVIEW);
		gl.glLoadIdentity();
	}

	public void onSurfaceCreated(GL10 gl, EGLConfig config) {
		gl.glShadeModel(GL10.GL_SMOOTH);
		gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
		gl.glClearDepthf(1.0f);
		gl.glDepthFunc(GL10.GL_LEQUAL);
		gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
	}
}

class Triangle {
	public Triangle() {

		ByteBuffer vbb = ByteBuffer.allocateDirect(VERTS * 3 * 4);
		vbb.order(ByteOrder.nativeOrder());
		mFVertexBuffer = vbb.asFloatBuffer();

		ByteBuffer tbb = ByteBuffer.allocateDirect(VERTS * 2 * 4);
		tbb.order(ByteOrder.nativeOrder());
		mTexBuffer = tbb.asFloatBuffer();

		ByteBuffer ibb = ByteBuffer.allocateDirect(VERTS * 2);
		ibb.order(ByteOrder.nativeOrder());
		mIndexBuffer = ibb.asShortBuffer();

//		float[] coords = {
//		// X, Y, Z
//				-0.5f, -0.25f, 0, 0.5f, -0.25f, 0, 0.0f, 0.559016994f, 0 };
//		float[] coords = {
//		// X, Y, Z
//				0, 0, -20, 1, 0, -20, 0.5f, 1, -20 };
		float[] coords = {
				// X, Y, Z
						 100f, -100f, 0f, -100f, -100f, 0f, 100f, 100f, 0f, -100f, 100f, 0f};
		

		for (int i = 0; i < VERTS; i++) {
			for (int j = 0; j < 3; j++) {
				mFVertexBuffer.put(coords[i * 3 + j] * 2.0f);
			}
		}

		for (int i = 0; i < VERTS; i++) {
			for (int j = 0; j < 2; j++) {
				mTexBuffer.put(coords[i * 3 + j] * 2.0f + 0.5f);
			}
		}

		for (int i = 0; i < VERTS; i++) {
			mIndexBuffer.put((short) i);
		}

		mFVertexBuffer.position(0);
		mTexBuffer.position(0);
		mIndexBuffer.position(0);
	}

	public float getWidth() {
		return 0f;
	}

	public void draw(GL10 gl) {
		glFrontFace(GL_CCW);
		gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
		glVertexPointer(3, GL_FLOAT, 0, mFVertexBuffer);
		glEnable(GL_TEXTURE_2D);
		glDrawElements(GL_TRIANGLE_STRIP, VERTS, GL_UNSIGNED_SHORT,
				mIndexBuffer);
	}

	private final static int VERTS = 4;

	private FloatBuffer mFVertexBuffer;
	private FloatBuffer mTexBuffer;
	private ShortBuffer mIndexBuffer;
}


旋转效果不咋滴,和GLU.gluOrtho2D这个方法有关,因为这个方法是正投影,如果把这个方法替换为GLU.gluPerspective或者gl.glFrustumf则效果正常。

    
[2] dip, dp, px, sp差别与换算
    来源: 互联网  发布时间: 2014-02-18
dip, dp, px, sp区别与换算

显示单位px和dip以及sp的区别

dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。 

px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多。 

pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用; 

sp: scaled pixels(放大像素). 主要用于字体显示best for textsize。 

由此,根据 google 的建议,TextView 的字号最好使用 sp 做单位,而且查看 
TextView 
的源码可知 Android 默认使用 sp 作为字号单位。 

################################################################### 

关于换算(以 sp 和 pt 为例) 
查看 TextView 等类的源码,可知: 

case COMPLEX_UNIT_PX: 
      return value; 
case COMPLEX_UNIT_SP: 
      return value * metrics.scaledDensity; 
case COMPLEX_UNIT_PT: 
      return value * metrics.xdpi * (1.0f/72); 

-------------------------- 
scaledDensity = DENSITY_DEVICE / (float) DENSITY_DEFAULT; 
xdpi = DENSITY_DEVICE; 

-------------------------- 
DENSITY_DEFAULT = DENSITY_MEDIUM = 160; 

============================================ 
所以: 假设 pt 和 sp 取相同的值 1,则可设 1pt 和 1sp 之间系数为 x, 

1 * DENSITY_DEVICE / 72 = x * 1 * DENSITY_DEVICE / 160  =&gt; 
x = 160 / 72 = 2.2222 

也就是说在 Android 中,  1pt 大概等于 2.22sp 

以上供参考,如果 UI 能够以 sp 为单位提供设计是最好的,如果设计中没有 sp 
的概念,则开发人员也可以通过适当的换算取近似值。 



转载内容: http://hi.baidu.com/lfcaolibin/blog/item/f3f60d1e438deefee0fe0bae.html 
什么是Dip和Sp 

过去,程序员通常以像素为单位设计计算机用户界面。例如,定义一个宽度为300像素的表单字段,列之间的间距为5个像素,图标大小为16×16像素 等。这样处理的问题在于,如果在一个每英寸点数(dpi)更高的新显示器上运行该程序,则用户界面会显得很小。在有些情况下,用户界面可能会小到难以看清 内容。 

与分辨率无关的度量单位可以解决这一问题。Android支持下列所有单位。 

px(像素):屏幕上的点。 

in(英寸):长度单位。 

mm(毫米):长度单位。 

pt(磅):1/72英寸。 

dp(与密度无关的像素):一种基于屏幕密度的抽象单位。在每英寸160点的显示器上,1dp = 1px。 

dip:与dp相同,多用于android/ophone示例中。 

sp(与刻度无关的像素):与dp类似,但是可以根据用户的字体大小首选项进行缩放。 

为了使用户界面能够在现在和将来的显示器类型上正常显示,建议大家始终使用sp作为文字大小的单位,将dip作为其他元素的单位。当然,也可以考虑使用矢量图形,而不是用位图

 

来源:

 

http://sifutian.iteye.com/blog/680935

 


    
[3] 宏大的LLVM伟大Apple伟大ARC
    来源: 互联网  发布时间: 2014-02-18
伟大的LLVM伟大Apple伟大ARC

LLVM带了了ARC,神一样的东西~梦幻般的思想。

彻底了解了GC和引用计数那个好的争论。

Automatic Reference Counting

Automatic Reference Counting (ARC) for Objective-C makes memory management the job of the compiler. By enabling ARC with the new Apple LLVM compiler, you will never need to type retain or release again, dramatically simplifying the development process, while reducing crashes and memory leaks. The compiler has a complete understanding of your objects, and releases each object the instant it is no longer used, so apps run as fast as ever, with predictable, smooth performance.

1 楼 doylecnn 2011-06-27  
说的好像引用计数不是一种GC似的

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3