1. 程式人生 > >零基礎開發OpenGL ES 2.0學習筆記-Android篇(一)

零基礎開發OpenGL ES 2.0學習筆記-Android篇(一)

看到蘋果應用商店的火爆,也想做點東西放在上面,現在終於有點時間,可是發現用到的技術都不會,要學的東西很多呀(真是落伍了)~

身為一個JAVA程式設計師,IOS完全不懂,Android只會一些皮毛,OpenGL更是一竅不通。
所有的東西肯定都是以JAVA思想來寫,摻雜著自己的理解,肯定有不對的地方,大家就湊合著看吧。

這次的學習打算分三步:

  ①在Android上學習使用OpenGL ES
  ②將Android做的OpenGL ES應用移植到IOS上
  ③將應用釋出到蘋果應用商店及Google應用商店上。

今天的目標是:在Android上搭建一個能夠顯示OpenGL圖形的環境

開發工具:
  ADT (Android  Development Tools)        ⇒        一個基於Eclipse的Android開發工具

除錯工具:
  一臺Android 4.0以上版本的手機  ⇒  據說ADT自帶虛擬機器無法除錯OpenGL ES應用

* Eclipse的具體使用方法,在這次的學習筆記裡不會進行詳細說明

開啟ADT後,首先新建一個Android Application Project

 

  Application Name : 應用名稱,顯示在手機圖示下的文字
  Project Name : Eclipse內部的工程名
  Package Name : 工程基礎包名

  Minimum Required SDK : 最低支援的Android版本
  Target SDK : 開發對應的Android版本
  Comile With : 編輯使用的Android版本
  Theme : Android顯示用主題

其它設定頁面均使用預設,一路Next點下去就好。
最後一個空白的Android工程就有了。

-------------------------------------------------------------------------------------------------------------------------------------------------------

* 如果你以前沒用過ADT,建議你將手機接上,執行下這個Hello world工程,確保手機可以正確被識別。
  執行時如果提示 No compatible targets were found. Do yo wish to a add new Android Virtual Device?
  點選選單欄的window->Show View->Other,開啟Android目錄下的Devices檢視,看是否有你的手機。
  如果有,請確認你的手機Android版本必須高於上面配置的「最低支援的Android版本」
  如果沒有,說明手機驅動有問題,請更換對應驅動;不過也可能是資料線有問題,請使用原裝的資料線。

-------------------------------------------------------------------------------------------------------------------------------------------------------

接下來就是寫程式碼了,首先將首頁設計成一個ListView,方便以後追加程式,和回顧以前的程式。
(具體實現方法請參照附件,會點Android基礎的人,都能看懂)

 下面說明下MainActivity01這個類裡的方法

package com.openglestest.test01;

import android.app.Activity;
import android.opengl.GLSurfaceView;
import android.os.Bundle;

public class MainActivity01 extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		GLSurfaceView glSurfaceView = new GLSurfaceView(this);
		glSurfaceView.setEGLContextClientVersion(2);  // Pick an OpenGL ES 2.0 context.
		glSurfaceView.setRenderer(new OpenGLRender());
		setContentView(glSurfaceView);
	}
}

GLSurfaceView是Android裡,專門用來負責OpenGL渲染的檢視。
第14行的處理,是設定我們要使用OpenGL ES 2.0來進行渲染。(1和2有什麼區別,目前不知道,以後再研究)
第15行是設定我們要使用的渲染器,也就是實際畫圖的類了。

 接著看下OpenGLRender這個渲染器

package com.openglestest.test01;

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

import android.opengl.GLES20;
import android.opengl.GLSurfaceView.Renderer;

public class OpenGLRender implements Renderer {

	@Override
	public void onSurfaceCreated(GL10 gl, EGLConfig config) {
		GLES20.glClearColor(0.9f, 0.2f, 0.2f, 1.0f);
		GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
	}

	@Override
	public void onSurfaceChanged(GL10 gl, int width, int height) {
		// TODO Auto-generated method stub
	}

	@Override
	public void onDrawFrame(GL10 gl) {
		// TODO Auto-generated method stub
	}
}

該類是通過實現Android裡Renderer介面而生成的。
從方法名來看,這三個方法會分別在畫面建立,畫面變化和繪製框架裡呼叫(具體的以後在研究)
程式碼13與14行,是從別的地方copy來的,據說是清空畫面用的,以後在研究。

特別要說明的是,程式碼13與14行使用的是GLES20物件,而不是引數的GL10物件。
為什麼呢?很簡單GLES20是2.0用的,GL10是1.0用的。(有什麼區別?還是那句話,以後再研究)

接著插上手機,執行程式,得到以下效果。
今天的目標順利完成。

相關推薦

基礎開發OpenGL ES 2.0學習筆記Android

看到蘋果應用商店的火爆,也想做點東西放在上面,現在終於有點時間,可是發現用到的技術都不會,要學的東西很多呀(真是落伍了)~ 身為一個JAVA程式設計師,IOS完全不懂,Android只會一些皮毛,OpenGL更是一竅不通。 所有的東西肯定都是以JAVA思想來寫,摻雜著自己的

Vue 2.0學習筆記:事件匯流排EventBus

許多現代JavaScript框架和庫的核心概念是能夠將資料和UI封裝在模組化、可重用的元件中。這對於開發人員可以在開發整個應用程式時避免使用編寫大量重複的程式碼。雖然這樣做非常有用,但也涉及到元件之間的資料通訊。在Vue中同樣有這樣的概念存在。通過前面一段時間的學習,Vue元件資料通訊常常會有父子元

持續整合學習筆記入門7成果管理自動化:版本號的管理

經過自動化持續整合工作之後,一般會產生兩類重要成果: 1、提供給使用者使用的軟體產品 2、軟體設計、開發時產生的文件 毋庸置疑,軟體產品本來就是我們工作的目標物。在實際工作中,尤其是在給企業做定製化的MIS系統時,很難說只給使用者一次性提供產品,往往需要不斷升級,從而向客戶

開始之OpenGL ES 2.0【1】

這一節主要內容是矩陣的使用,投影和相機相關知識。一、矩陣相關        由於OpenGL ES使用的是列向量,所以向量與矩陣計算方式為 矩陣乘向量;在DirectX中使用的是行向量計算方式為 向量乘矩陣。二、投影相關        在OpenGL ES中投影方式有兩種,分

【C++ OpenGL ES 2.0程式設計筆記】5: mipmap

作者是現在對相關知識理解還不是很深入,後續會不斷完善。因此文中內容僅供參考,具體的知識點請以OpenGL的官方文件為準 前言 本文介紹了OpenGL ES 2.0 中常用的多級紋理貼圖技術,mipmap, 給出了一個使用mipmap的3D場景示例。

動手做ASP.NET 2.0伺服器端控制元件——AutoCheckTreeView功能討論

感謝譚振林先生所著《道不遠人——深入解析ASP.NET 2.0控制元件開發》  ASP.NET現在使用的朋友是越來越多了,而其中一些很“方便”的控制元件事實上在實際使用過程中卻不是那麼方便。還好,我們有辦法改善它們,或者是繼承現有控制元件後擴充套件,或者是繼承Control

《阿裏巴巴Java開發手冊1.4.0》閱讀總結與心得

更新 java開發手冊 new 開發者 由於 阿裏巴巴 itl 一個bug 項目庫 前言   下面是阿裏對《阿裏巴巴 Java 開發手冊》(下稱《手冊》)的介紹:   凝聚了阿裏集團很多同學的知識智慧和經驗,這些經驗甚至是用血淋淋的故障換來的,希望前車之鑒,後車之師,能

Salesforce學習之路-developer利用VS Code結合Git開發Salesforce

Part 1: 從Git中克隆程式碼到本地 git clone https://github.com/git/git Part 2: 在VS Code中安裝Salesforce和Git外掛 在VS Code中開啟程式碼工程 安裝Salesforce Extension Pack 安裝

JavaSE 學習筆記之Java概述

environ 電子 6.0 run javase 有一點 架構 spa form 一、Java的三種技術架構: JAVAEE:Java Platform Enterprise Edition,開發企業環境下的應用程序,主要針對web程序開發; JAVASE:Java P

設計模式學習筆記 C#代碼

內容 編程 繼承 color 模式 c# 派生類 ive spa 《深入淺出設計模式》學習筆記第一章 原始需求和設計 事情是這樣開始的,公司需要做一套程序,鴨子,設計如下: 一個鴨子父類,多個派生類,三個可override的方法。 第一次需求變更 我們要會飛的鴨子!!!!

多線程編程學習筆記——線程同步

als 執行 homepage auto using 發的 進行 read 函數 接上文 多線程編程學習筆記-基礎(一) 接上文 多線程編程學習筆記-基礎(二) 接上文 多線程編程學習筆記-基礎(三) 就如上一篇文章(多線程編程學習筆記-基礎(三))

matlab學習筆記之常用命令

plot 我們 all 查看 學習 ear tla clear 但是 一.清除命令。   1.clear all;%清除所有變量,通常在matlab的工作區;另外斷點也會被清除掉   2.close all;%關閉所有窗口(除了編輯器窗口、命令窗口、幫助窗口)   3.cl

Python3學習筆記元組tuple

小括號 方括號 初始 clas 需要 -- 信息 數量 erro 元組:tuple 是一種有序列表。tuple和list非常類似,但是tuple一旦初始化就不能修改 元組使用小括號,列表使用方括號。 元組創建很簡單,只需要在括號中添加元素,並使用逗號隔開即可。 eg:

python學習筆記 day44 mysql練習題

習題來自: http://www.cnblogs.com/wangfengming/articles/7944029.html   1. 習題內容: 1.建立留言資料庫: liuyandb; 2.在liuyandb資料庫中建立留言表liuyan,結構如下: 3.在留言表最後新

Elam的caffe筆記之配置:CentOS6.5編譯安裝gcc4.8.2

Elam的caffe筆記之配置篇(一):CentOS6.5編譯安裝gcc4.8.2 配置要求: 系統:centos6.5 目標:基於CUDA8.0+Opencv3.1+Cudnnv5.1+python3.6介面的caffe框架 任何對linux處於入門級別的小白都應

JavaScript學習之小白

好好學習 ,天天向上。Are you ready? 一、JS概述 1. 什麼是JS? Javascript是(基於物件)和(事件驅動)的(客戶端指令碼)語言。 2. 哪一年?哪家公司?誰?第一個名字? 1995 網景 布蘭登 livescript 3. W3C第一套標準:ECMA-262

J2SE學習筆記1.11Java介面

一、基本概念 介面(Interface),在JAVA程式語言中是一個抽象型別,是抽象方法的集合。介面通常以interface來宣告。一個類通過繼承介面的方式,從而來繼承介面的抽象方法。 如果一個類只由抽象方法和全域性常量組成,那麼這種情況下不會將其定義為一個抽象類。只會定

linux學習筆記之shell程式設計

shell程式設計 基礎正則表示式 正則和萬用字元的區別:正則是包含匹配,匹配檔案內容,grep,awk等支援正則表示式。萬用字元是完全匹配,匹配檔名,例如find,ls不認識正則表示式 ####正則

linux學習筆記之流程控制if分支語句

流程控制 if語句 單分支if語句 程式 fi``` ```if [ 判斷 ] then 程式 fi``` 例項程式碼指令碼: #!/bin/bash

linux學習筆記之shell程式設計正則表示式與字元處理

shell程式設計 基礎正則表示式 正則和萬用字元的區別:正則是包含匹配,匹配檔案內容,grep,awk等支援正則表示式。萬用字元是完全匹配,匹配檔名,例如find,ls不認識正則表示式 ####正則表示式常用的字元(注意區別於萬用字元裡面的符號)#### -*