Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android應用開發揭秘第13章01示例,移動圖像,opengl繪制星星問題解決!

android應用開發揭秘第13章01示例,移動圖像,opengl繪制星星問題解決!

編輯:關於Android編程

根據書上教程運行代碼報錯,2.2的黑屏無效果,4.1的閃退。後研究發現,問題出在在一個物體同時啟用了顏色數組和紋理,注釋掉

gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
運行即可。


核心代碼如下

package com.xieyuan.test;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;
import java.util.Random;

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

import android.content.Intent;
import android.opengl.GLSurfaceView.Renderer;
import android.opengl.GLUtils;
import android.view.KeyEvent;
import android.view.MotionEvent;

public class GLRender implements Renderer{

	private final static int ONE=0x10000;
	
	//星星總數
	private final static int NUM=50;
	//存放星星的數組
	private Star[] stars=new Star[NUM];
	
	//閃爍的星星
	boolean twinkle=true;
	
	//離觀察者的距離
	float ZOOM=-10f;
	//星星的傾角
	float tilt=90f;
	//閃爍星星的自轉
	float spin;
	
	private boolean key;
	Random random=new Random();
	
	//紋理ID
	private int texture;
	
	IntBuffer coord=GLNioUtil.IntBufferUtil(new int[]{
			0,0,ONE,0,ONE,ONE,0,ONE
	});
	IntBuffer vertexs=GLNioUtil.IntBufferUtil(new int[]{
			-ONE-ONE,0,
			ONE,-ONE,0,
			ONE,ONE,0,
			-ONE,ONE,0
	});
	ByteBuffer indices=GLNioUtil.ByteBufferUtil(new byte[]{
			1,0,2,3
	});
	
	
	@Override
	public void onSurfaceCreated(GL10 gl, EGLConfig config) {
		//啟用陰影平滑
		gl.glShadeModel(GL10.GL_SMOOTH);
		//清除屏幕為黑色背景
		gl.glClearColor(0f, 0f, 0f, 0f);
		//透視修正
		gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
		
		//創建紋理
		IntBuffer intBuffer=IntBuffer.allocate(1);
		gl.glGenTextures(1, intBuffer);
		texture=intBuffer.get();
		gl.glBindTexture(GL10.GL_TEXTURE_2D, texture);
		gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
		gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
		GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, GLImage.mBitmap[3], 0);
		
		//啟用紋理映射
		gl.glEnable(GL10.GL_TEXTURE_2D);
		gl.glShadeModel(GL10.GL_SMOOTH);
		gl.glClearColor(0f, 0f, 0f, 0.5f);
		gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
		//設置混色函數
		gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE);
		//啟用混色
		gl.glEnable(GL10.GL_BLEND);
		
		for(int i=0;i


效果:


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved