Professional Documents
Culture Documents
1
______________________________________________________________________
............................................................................................................................. .............................................................................
................................................................................................................................................................................... .......................
............................................................................................................ ..............................................................................................
............................................................................................................................. .............................................................................
............................................................................................................................. .............................................................................
........................................................................................................................................... ...............................................................
................................................................................................................................................................................................. .........
.......................................................................................................................... ................................................................................
............................................................................................................................. .............................................................................
............................................................................................................................. .............................................................................
......................................................................................................................................................... .................................................
..........................................................................................................................................................................................................
............................................................................................................................. .............................................................................
............................................................................................................................. .............................................................................
............................................................................................................................. .............................................................................
....................................................................................................................................................................... ...................................
..........................................................................................................................................................................................................
............................................................................................................................. .............................................................................
............................................................................................................................. .............................................................................
............................................................................................................................... ...........................................................................
..................................................................................................................................................................................... .....................
.............................................................................................................. ............................................................................................
............................................................................................................................. .............................................................................
............................................................................................................................. .............................................................................
......................................................................................................................................... .................................................................
................................................................................................................................................................................................... .......
............................................................................................................................ ..............................................................................
............................................................................................................................. .............................................................................
............................................................................................................................. .............................................................................
........................................................................................................................................................... ...............................................
..........................................................................................................................................................................................................
Ngy
Thng
Nm
(K v ghi r h tn)
............................................................................................................................. .............................................................................
................................................................................................................................................................................... .......................
............................................................................................................ ..............................................................................................
............................................................................................................................. .............................................................................
............................................................................................................................. .............................................................................
........................................................................................................................................... ...............................................................
................................................................................................................................................................................................. .........
.......................................................................................................................... ................................................................................
............................................................................................................................. .............................................................................
............................................................................................................................. .............................................................................
......................................................................................................................................................... .................................................
..........................................................................................................................................................................................................
............................................................................................................................. .............................................................................
............................................................................................................................. .............................................................................
............................................................................................................................. .............................................................................
....................................................................................................................................................................... ...................................
..........................................................................................................................................................................................................
............................................................................................................................. .............................................................................
............................................................................................................................. .............................................................................
............................................................................................................................... ...........................................................................
..................................................................................................................................................................................... .....................
.............................................................................................................. ............................................................................................
............................................................................................................................. .............................................................................
.......................................................................................................... ................................................................................................
............................................................................................................................................. .............................................................
................................................................................................................................................................................................... .......
............................................................................................................................ ..............................................................................
............................................................................................................................. .............................................................................
............................................................................................................................. .............................................................................
........................................................................................................................................................... ...............................................
..........................................................................................................................................................................................................
Ngy
Thng
Nm
(K v ghi r h tn)
LI CM N
Chng em xin chn thnh cm n cc thy c trong khoa Cng Ngh Thng Tin
cng ton th cc thy c trng i Hc S Phm K Thut Tp.HCM truyn t
cho chng em nhng kin thc qu gi trong sut nhng nm hc va qua.
Chng em xin chn thnh cm n Thy Nguyn Minh o tn tnh hng dn,
ch bo chng em trong sut qu trnh thc hin ti.
Cui cng ti xin cm n cc bn trong khoa Cng Ngh Thng Tin, nhng ngi
gip , chia s kin thc, ti liu... trong sut qu trnh thc hin nghin cu ti.
Trong phm vi kh nng cho php, chng em rt c gng hon thnh ti
mt cch tt nht. Song, chc chn s khng trnh khi nhng thiu st. Chng em
knh mong nhn c s cm thng v nhng kin ng gp ca qu thy c v cc
bn.
M u ....................................................................................................................... 10
PHN A: XY DNG NG DNG 3D VI ANDROID _____________________ 12
Chng 1: Tng quan v ng dng trn android ____________________________ 12
1.1
Lc s v Android:....................................................................................... 12
1.2
1.3
2.1.1 To mt Activity:............................................................................................ 25
2.1.2 Vng i ca Activity: .................................................................................. 27
Dch v (Service):............................................................................................ 31
Handler: ........................................................................................................... 64
4.3
4.4
M u
Hin nay ngnh cng nghip phn mm ang rt pht trin v ngnh cng nghip
phn mm trn in thoi di ng cng khng nm ngoi xu th . Tuy cn nhiu hn
ch trong phn cng ca in thoi di ng nhng n th hin c sc mnh ca
mnh trong rt nhiu cc lnh vc khc nhau nh gii tr, cc tin ch, thanh ton in
t v.v Ngnh cng ngh phn mm di ng vn cn kh non tr Vit Nam v vy
vic nghin cu v pht trin cc ng dng trn di ng l rt cn thit.
Cc h iu hnh nh Window Mobile, Symbian phn no cng gy t nhiu
kh khn cho nhng ai c nh xy dng cc ng dng trn n. i vi Window
Mobile l mt cng ngh ca Microsoft v hon ton ng i vi ngi dng, nh
pht trin ng dng ch da hon ton vo cng ngh m Microsoft cung cp, cn
Symbian th vic cu hnh c th lp trnh trn n cng v vn kh khn, c bit l
n s dng ngn ng C/C++ lm nn tng lp trnh r rng l khng thun tin
trong vic pht trin ng dng.
Xut pht t nhu cu thc t , Google mnh dn nghin cu v a ra mt
nn tng h iu hnh mi, chnh l Android. Mt nn tng h iu hnh m ngun
m hon ton v da vo mt ngn ng lp trnh rt mnh l Java pht trin ng
dng. Chnh v Android h tr Java ngay t trong nn tng ca n, nn vic vit ng
dng, ngay c s dng cc chc nng ca phn cng l hon ton d dng thng qua
vic s dng b cng c h tr lp trnh c cung cp hon ton min ph, l Android
SDK.
Nhm thc hin nhn thy nhu cu ca con ngi trong lnh vc gii tr trn di
ng ngy cng cao v Android chnh l nn tng ng dng c th pht trin trong
tng lai. Chnh v vy nhm thc hin chn ti Xy dng ng dng 3D vi
1.1 Lc s v Android:
Android c pht hnh phin bn u tin 11/11/2007, l mt mi trng h
iu hnh hon chnh da trn h iu hnh nhn Linux V2.6. Lc u, ch trin khai
i vi Android l lnh vc in thoi di ng, gm cc loi in thoi thng minh v
cc loi thit b in thoi kiu gp chi ph thp. Tuy nhin, phm vi y cc dch
v in ton ca Android v s h tr chc nng phong ph ca n c tim nng m
rng ra ngoi th trng in thoi di ng. Android cn c th hu ch i vi cc nn
tng v ng dng khc.
Nn Android l sn phm ca Open Handset Alliance (Lin minh thit b cm
tay m), mt tp on cc t chc cng hp tc vi nhau xy dng nn mt loi
in thoi di ng tt hn. Tp on do Google ng u ny gm cc nh vn hnh
(in thoi) di ng, cc nh sn xut thit b cm tay, sn xut linh kin, cc nh cung
cp nn v gii php phn mm v cc cng ty tip th. T mt quan im pht trin
phn mm, Android tr thnh trung tm ca th gii m ngun m v rt c tim nng
pht trin.
Thit b cm tay c kh nng Android u tin trn th trng l thit b G1 do
HTC sn xut v c bn trn T-Mobile. N tr nn sn c sau gn mt nm n i,
khi m cc cng c pht trin phn mm sn c duy nht ch l mt s bn pht hnh
B cng c pht trin phn mm (SDK) c ci tin dn tng bc. Khi ngy pht
hnh G1 gn n, nhm Android pht hnh SDK V1.0 v cc ng dng bt u
vt ln nhm hng ti nn tng mi ny.
kch thch i mi v pht trin cc ng dng ca Android, Google ti tr
hai vng cuc thi Cc thch thc nh pht trin Android, v hng triu la c
Hnh 2 My o Dalvik
Hnh 3 To mt AVD
- Mc Name: t tn cho thit b, tn g cng c, ct l d nh v phn
bit, khng cha khon trng v cc k t c bit.
- Mc Target: chn phin bn h iu hnh Android.
- Mc SD Card: in kch thc b nh ca thit b hoc ly mt file SD Card
c sn.
- Nhn nt Create AVD.
File th vin.
2.1.1 To mt Activity:
to mt Activity mi, cn tha k t lp Activity, s dng cc View cung
cp cc tng tc vi ngi dng, khai bo cc thnh phn giao din v thc thi cc
chc nng ca ng dng.
package com.paad.myapplication;
import android.app.Activity;
import android.os.Bundle;
public class MyActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
}
}
2.2.3 Hm onReceive():
Phng thc ny c gi khi c s kin tng ng c pht i. trong
phng thc ny, ta truyn vo context (ng cnh) v intent (ni nhn).
o context: v lp Receiver khng k tha t lp Context nn cn truyn
context m receiver ny ang chy vo. Th nht l c th x l cc
phng thc yu cu truyn thm Context, th hai l s dng cc
phng thc ca lp Context.
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class MyService extends Service {
@Override
@Override
public void onCreate() {
// TODO: Actions to perform when service is created.
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Replace with service binding implementation.
return null;
}
}
bt u mt Service, s dng phng thc startService. Nu Service yu cu
quyn truy cp khng tn ti trong ng dng th mt ngoi l SecurityException s
c a ra. C 2 cch bt u mt Service mi.
+ Cch 1: khi ng ngm. V d:
startService(new Intent(MyService.MY_ACTION));
+ Cch 2: khi ng tng minh. V d:
startService(new Intent(this, MyService.class));
dng mt Serivce, s dng phng thc stopService, truyn vo Intent xc
nh Service cn ngng hot ng. V d:
// kt ni dch v
Intent bindIntent = new Intent(MyActivity.this, MyService.class);
V d:
content://com.paad.provider.myapp/items
Content URI c th 2 dng th hin. V d trn l URI dng request tt c cc
gi tr. Vic thm vo cui /<rownumber>, s request mt record n.
content://com.paad.provider.myapp/items/5
Cc n gin nht lm
UriMatcher phn tch hnh thc ca n khi provider ang c truy xut n thng
qua mt Content Resolver. Xt v d sau:
static
final
String
content://com.paad.provider.myapp/items;
public static final Uri CONTENT_URI = Uri.parse(myURI);
@Override
public boolean onCreate() {
// TODO: Construct the underlying database.
return true;
}
myURI
// nu l truy vn 1 hng th hn ch kt qu
switch (uriMatcher.match(uri)) {
case SINGLE_ROW :
// TODO: Modify selection based on row id, where:
// rowNumber = uri.getPathSegments().get(1));
}
return null;
}
@Override
public Uri insert(Uri _uri, ContentValues _initialValues) {
long rowID = [ ... Add a new item ... ]
@Override
public int delete(Uri uri, String where, String[] whereArgs) {
switch (uriMatcher.match(uri)) {
case ALLROWS:
case SINGLE_ROW:
default: throw new IllegalArgumentException(Unsupported
throw
new
IllegalArgumentException(Unsupported
URI:
+ uri);
}
}
Bc cui cng trong qu trnh to mt Content Provider l nh ngha kiu
MIME l kiu d liu m Provider tr v, override phng thc getType tr v mt
kiu String m t cho kiu d liu. Kiu tr v bao gm c 2 hnh thc: trng n v
tt c d liu.
Trng n
vnd.<companyname>.cursor.item/<contenttype>
Tt c
vnd.<companyName>.cursor.dir/<contenttype>
V d:
@Override
ALLROWS:
return
vnd.paad.cursor.dir/myprovidercontent;
case SINGLE_ROW: return
vnd.paad.cursor.item/myprovidercontent;
default: throw new IllegalArgumentException(Unsupported
URI:
+ _uri);
}
}
2.4.2.3 ng k Provider:
Thm Content Provider va to vo trong manifest.xml. S dng th authorities
ch nh a ch ca n:
<provider android:name=MyProvider
android:authorities=com.paad.provider.myapp/>
2.4.3.2 Thm:
Content Resolver cung cp 2 phng thc chn mt record mi vo trong
Content Provider, l insert v bulkInsert. Phng thc insert tr v mt URI n
record mi c thm vo, trong khi bulkInsert tr v s thnh phn thm vo thnh
cng.
on code sau m t cch s dng 2 phng thc trn:
// to mt dng mi cho cc gi tr mun chn.
ContentValues newValues = new ContentValues();
// gn gi tr cho mi hng
newValues.put(COLUMN_NAME, newValue);
[ ... lp li cho mi ct ... ]
Uri myRowUri = getContentResolver().insert(MyProvider.CONTENT_URI,
newValues);
2.4.3.4 Cp nht:
Vic cp nht cho mt Content Provider c iu khin bi phng thc update
ca Content Resolver. Phng thc update nhn URI ca Content Provider ch, mt
i tng ContentValues cha tp gi tr c nh x n cc ct cn cp nht, v mt
mnh where ch nh dng no c cp nht.
Khi thc thi, mi dng ph hp vi iu kin trong mnh where s c cp
nht v tr v s dng c cp nht gi tr thnh cng.
V d:
// to mt dng mi cho cc gi tr mun chn.
ContentValues newValues = new ContentValues();
// to nh x thay th cc ct mun cp nht v nhng gi tr g gn cho mi
ct
newValues.put(COLUMN_NAME, newValue);
// p dng cho 5 hng u tin
String where = _id < 5;
setContentView(ll);
3.4 To cc View:
3.4.1 Chnh sa cc View c sn:
Chnh sa hoc k tha mt control sn c nu n cung cp cc chc nng cn
thit, bng cch ghi cc handler v onDraw ca n. nh ngha li giao din cng
nh cc ng x ca control mi to, cn phi ghi v tha k cc iu khin s kin
(event handler) kt hp vi cc hnh vi mun thay i.
V d: tinh chnh mt TextView hin th mt tp cc s h thp phn.
@Override
public boolean onKeyDown(int keyCode, KeyEvent keyEvent) {
[ ... thc hin mt x l khi bm 1 phm c th... ]
// s dng cc chc nng hin c bi lp co s p ng s kin
// nhn phm
return super.onKeyDown(keyCode, keyEvent);
}
}
3.6 Menu:
3.6.1 Menu trong Android:
Menu a ra mt gii php tng tnh tin dng ca ng dng m khng chim
dng khng gian trn mn hnh. Mi mt Activity c ring cho n mt menu, c
hin th khi ngi dng nhn nt Menu.
Android cng h tr menu ng cnh, n c gn vo bt k View no bn trong
mt Activity. Mt menu ng cnh c hin th khi ngi dng nhn nt D-pad,
trackball, hoc nhn vo mn hnh cm ng khong 3 giy. menu ng cnh h tr
submenu, checkbox, radio button, shortcut key, v icon.
Cc loi menu trong android:
Icon Menu: c kt vi menu, xut hin phn di ca mn hnh thit b khi
nt Menu c nhn. N hin th icon v text cho cc menu item hoc cc submenu.
Icon menu h tr to ti a 6 menu item, v cc menu item ny khng th hin th
checkbox, radio button, hay shortcut key.
Hnh 13 - Submenu
CHECKBOX_ITEM,
Menu.NONE,
CheckBox).setCheckable(true);
// to radio button group.
menu.add(RB_GROUP, RADIOBUTTON_1, Menu.NONE, Radiobutton 1);
menu.add(RB_GROUP, RADIOBUTTON_2, Menu.NONE, Radiobutton 2);
menu.add(RB_GROUP, RADIOBUTTON_3, Menu.NONE,
Radiobutton 3).setChecked(true);
menu.setGroupCheckable(RB_GROUP, true, true);
Shorcut Key: ch nh mt keypad shortcut cho mt Menu Item s dng
phng thc setShortcut. Phng thc ny yu cu truyn vo 2 tham s, mt l phm
s v mt l bn phm y .
menuItem.setShortcut(0, b);
Condensed Title: dng mt text hin th menu.
menuItem.setTitleCondensed(Short Title);
Icon: biu tng ch c hin th trn Icon Menu
3.6.3 To mt Menu:
to mt menu, trong Activity override phng thc onCreateOptionsMenu,
phng thc ny c thc thin ln u tin khi menu c hin th.
onCreateOptionsMenu nhn mt tham s kiu Menu. Dng phng thc add trn
i tng Menu ny thm vo cc item. Mi menu item cn phi ch nh cc thuc
tnh sau:
Nhm m item c thm vo.
ID, mi item c mt ID duy nht, bi v chng c x l chung trong phng
thc onOptionsItemSelected nn vic xc nh item no c chn l ph thuc vo ID
c ch nh cho n.
Cch sp xp th t m item c hin th.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
// nhm
I
int groupId = 0;
// ID
int menuItemId = MENU_ITEM;
// cch sp xp
int menuItemOrder = Menu.NONE;
// Texthin th
int menuItemText = R.string.menu_item;
Chng 4: X l bt ng b
4.1 Thread:
Thng thng lp trnh vin dng Thread x l cc code x l nng, hoc
mt thi gian c th gy chm chng trnh hoc giao din b block. Thread kh thng
dng v trong Android dng lp Thread ca Java.
Theo mc nh, mi ng dng chy trong mt tin trnh v code c thc thi
trong thread chnh ca tin trnh . Nu code x l qu lu, khng kp phn hi li cc
s kin ngi dng trong 5 giy th s xut hin dialog Application is not responding
v ngi dng c th ng ng dng ngay lp tc. Nu khng b ng th ng dng s
b lag, iu ny l kh chp nhn.
Thread thread = new Thread() {
@Override
public synchronized void start() {
// Khi to cc i tng cn thit ti y
super.start();
}
@Override
public void run() {
// code x l chnh ca thread trong ny
super.run();
}
};
thread.start(); //bt u thread
Lu :
Thread ln u thc thi gi phng thc start(), nhng ln sau ch gi
phng thc run(), khng gi start() na.
Cc code x l lin quan n giao din ch c x l trong thread chnh
ca ng dng (v d load nh t mng v th dng thread, nhng hin th
nh ln ImageView th x l trong thread chnh)
Sau khi thc thi xong phng thc run(), thread khng cn hot ng
na.
4.2 Handler:
Trong Android, tin vic giao tip gia 2 thread ta dng i tng Handler.
C th dng Handler nh b m giy khi chi nhc, hoc chc nng tng t . Ngoi
ra, c th dng Handler t x l mt yu cu no sau mt khong thi gian xc
nh.
Giao tip gia 2 Thread:
Gi s trong phng thc run() ly xong i tng Bitmap v. Mun
truyn i tng Bitmap cho Thread chnh hin th ln mn hnh:
Message msg = mHandler.obtainMessage(1, bitmap);
mHandler.sendMessage(msg);
Trong code ca Activity (mc nh l thread chnh), ta khai bo mt i
tng Handler tng tng nh sau:
Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 1) {
Lu :
Handler c to trong thread no th s s dng hng i message ca
thread .
Nu trong hng i message vn cn message th vn cn thc thi d
thot khi ng dng.
Gii thch:
Khi to mt i tng AlarmManager lm vic vi Alarm.
To mt intent tn broadcastIntent, intent ny c dng gi
broadcast khi n thi im nh sn.
PendingIntent c khi to gm context, broadcastIntent trn v mt
c bo rng nu c mt Alarm tng t th b n i v dng ci mi
ny.
Sau cng, set alarm vi 3 thng s:
+ B m thi gian.
+ Thi gian chnh xc bt alarm ln.
+ PendingIntent gi i (dng xc nh ti thi im bt alarm ln
th cn pht intent no).
expandedText,
ca
NotificationManager:
int notificationRef = 1;
notificationManager.notify(notificationRef, notification);
cp nht mt thng bo c s dng, gi li v truyn li gi tr
reference ID. Cng c th s dng ID ny hy thng bo bng cch gi phng
thc cancel ca NotificationManager.
notificationManager.cancel(notificationRef);
Vic hy thng bo s xa thanh icon trng thi v ca s trng thi m rng.
Description
GL_POINTS
Cc im
GL_LINES
on thng
GL_LINE_STRIP
GL_LINE_LOOP
ng gp khc khp kn
GL_TRIANGLES
Tam gic
GL_TRIANGLE_FAN
n gi thit lp xong php chiu trc giao, tip n s v hnh bng cch s
dng chc nng glVertexPointer, chc nng ny c 4 tham s:
+ GLint size: Xc nh s lng ta cho mi nh
+ GLenum type: Xc nh kiu d liu ca mi nh trong mng vi d nh
GL_BYTE, GL_SHORT, GL_FLOAT v.v
+ GLsizei stride: Xc nh khong cch byte gia cc nh lin tip, Nu
+ stride bng 0 cc nh c hiu l c ng gi cht ch trong mng
, gi tr ban u bng 0
+ const GLvoid *pointer: Xc nh v tr b nh ca gi tr u tin trong
mng, n tr ti mng.
gl.glVertexPointer(3, GL10.GL_FIXED, 0, coords);
Kt qu hin th:
if (height==0)
height=1;
gl.glMatrixMode (GL10.GL_PROJECTION);
gl.glLoadIdentity ();
gl.glViewport(0, 0, width, height);
gl.glFlush();
gl.glFinish();
}
gl.glEnableClientState (GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState (GL10.GL_COLOR_ARRAY);
V tam gic:
gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);
Tip theo s khng s dng mng mu cho hnh nn s kha chc nng ny li:
gl.glDisableClientState(GL10.GL_COLOR_ARRAY);
Ch rng khi khi to con tr nh, s dng 2 tham s u tin i din cho
mi nh:
gl.glVertexPointer(2, GL10.GL_FLOAT, 0, square);
gl.glFlush();
gl.glFinish();
cho php to ra hnh nh ng, s dng chc nng idle, chc nng ny c
gi l vng lp chnh.
tng gc quay ca i tng trn trc x v truc y cng nh v li mn hnh
sau khi thay i, gi hm glutPostRedisplay hoc ugPostRedisplay:
private void idle()
{
xrot += 2.0f;
yrot += 3.0f;
GLU.gluPostRedisplay();
}
Kt qu:
M t
GL_NEVER
GL_LESS
i qua nu gi tr chiu su a vo nh hn gi tr c lu
tr
GL_GEQUAL
GL_ALWAYS
Cui cng l tam gic t cng vi trc z vi tam gic u tin, y l hnh tam
gic nh nm pha bn phi.
gl.glPushMatrix();
gl.glTranslatef(0.5f, 0.0f, 0.0f);
gl.glScalef(0.5f, 0.5f, 0.5f);
gl.glDrawArrays(GL10.GL_TRIANGLES, 0,3);
gl.glPopMatrix();
gl.glFlush ();
gl.glFinish ();
}
Kt qu:
Hnh 20 Kt qu chiu su
Hnh 21 Kt qu mu sc v t bng
gl.glFlush ();
gl.glFinish ();
Kt qu:
gl.glEnable (GL10.GL_CULL_FACE);
gl.glShadeModel(GL10.GL_SMOOTH);
}
gl.glFlush ();
gl.glFinish ();
}
Kt qu:
Normal Lighting
Color Tracking
Hnh 23 Kt qu nh sng
5.11 nh hng nh sng (Directional Lighting):
Trong phn trc ta thm nh sng vo cnh, nhng nh sng khng n t
mt hng c th. Trong phn ny ta s gii quyt vic nh hng ngun sng, iu
ny s cho php ta s dng li ch ca khuch tn v phn chiu nh sng.
Thc hin: to cc mng nh sng cho cc c tnh nh sng:
float[] lightAmbient = {0.2f, 0.0f, 0.0f, 1.0f};
float[] lightDiffuse = {0.5f, 0.0f, 0.0f, 1.0f};
float[] lightSpecular = {1.0f, 1.0f, 1.0f, 1.0f};
GL_CONSTANT_ATTENUATION(1),
GL_LINEAR_ATTENUATION(0) v GL_QUADRATIC_ATTENUATION vi cc
gi tr hin th mc nh trong du (). Cng nh sng b suy yu khi di chuyn
mng ra xa khi ngun sng.
gl.glEnable (GL10.GL_DEPTH_TEST);
gl.glDepthFunc(GL10.GL_LEQUAL);
gl.glEnable (GL10.GL_CULL_FACE);
gl.glShadeModel(GL10.GL_SMOOTH);
}
gl.glFlush ();
gl.glFinish ();
}
Sau khi ti cht liu vo chng ta phi ch r cht liu s xut hin nh th no
trn i tng. iu ny c thc hin bng li gi hm texture coordinates.
Texture coordinates c ta trong khong t 0 n 1, ta (0. 0) l pha di
bn tri ca cht liu v (0, 1) l pha trn bn phi.
on code di y to ra 1 mng c s dng lu tr texture coordinates:
float[] texCoords = {
// front
0.0f, 0.0f,
1.0f, 0.0f,
0.0f, 1.0f,
1.0f, 1.0f,
// back
1.0f, 0.0f,
1.0f, 1.0f,
0.0f, 0.0f,
1.0f, 1.0f,
// left
1.0f, 0.0f,
1.0f, 1.0f,
0.0f, 0.0f,
0.0f, 1.0f,
// right
1.0f, 0.0f,
1.0f, 1.0f,
0.0f, 0.0f,
0.0f, 1.0f,
// top
0.0f, 0.0f,
Sau khi la chn cht liu, chng ta phi thit lp cc thuc tnh cho n.
Chng ta cn phi xc nh cht liu l cc kt cu 2D v cc thuc tnh n c. iu
ny c thc hin qua hm glTexImage2D hm ny c mt s cc tham s:
+ GLenum
target:
iu
ny
xc
nh
ch
ca
cht
liu
thit lp cc thuc tnh khc cho cht liu, chc nng glTexParameterf
c s dng. N cn 3 tham s, tham s u tin l GL_TEXTURE_2D, tham s th
hai GL_TEXTURE_MIN_FILTER hoc GL_TEXTURE_MAG_FILTER, tham s th
ba xc nh thuc tnh - GL_LINEAR.
gl.glTexParameterf(GL10.GL_TEXTURE_2D,
GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D,
GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
gl.glFlush ();
gl.glFinish ();
}
gl.glTexImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGBA,
bmp.getWidth(), bmp.getHeight(), 0, GL10.GL_RGBA,
GL10.GL_UNSIGNED_BYTE, bb);
gl.glTexParameterf(GL10.GL_TEXTURE_2D,
GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D,
GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_NEAREST);
Trong cht liu th hai s dng GL_LINEAR to ra cht liu nhn tt hn.
// texture 2
gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[1]);
gl.glTexImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGBA,
bmp.getWidth(), bmp.getHeight(), 0, GL10.GL_RGBA,
GL10.GL_UNSIGNED_BYTE, bb);
gl.glTexParameterf(GL10.GL_TEXTURE_2D,
GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D,
GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
Cht liu th ba cng ging nh cht liu th hai ngoi tr hai thuc tnh mi
c
thit
lp.
thuc
tnh
GL_TEXTURE_WRAP_S
gl.glTexImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGBA,
bmp.getWidth(), bmp.getHeight(), 0, GL10.GL_RGBA,
GL10.GL_UNSIGNED_BYTE, bb);
gl.glTexParameterf(GL10.GL_TEXTURE_2D,
GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D,
GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D,
GL10.GL_TEXTURE_WRAP_S, GL10.GL_REPEAT);
gl.glTexParameterf(GL10.GL_TEXTURE_2D,
GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE);
gl.glTexImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGBA,
bmp.getWidth(), bmp.getHeight(), 0, GL10.GL_RGBA,
GL10.GL_UNSIGNED_BYTE, bb);
gl.glTexParameterf(GL10.GL_TEXTURE_2D,
GL10.GL_TEXTURE_MIN_FILTER,
GL10.GL_LINEAR_MIPMAP_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D,
GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D,
GL10.GL_GENERATE_MIPMAP, GL10.GL_TRUE);
gl.glBindTexture(GL10.GL_TEXTURE_2D, texture[filter]);
Kt qu:
GL_ZERO
GL_ONE
GL_SRC_COLOR
GL_ONE_MINUS_SRC_COLOR
GL_DST_COLOR
GL_ONE_MINUS_DST_COLOR
GL_SRC_ALPHA
GL_ONE_MINUS_SRC_ALPHA
GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA
gl.glPushMatrix();
gl.glTranslatef(1.5f, 2.0f, 0.0f);
gl.glColor4f(1.0f, 0.0f, 0.0f, 0.5f);
gl.glDrawArrays(GL10.GL_TRIANGLES_STRIP, 0,4);
gl.glPopMatrix();
gl.glPushMatrix();
gl.glTranslatef(0.7f, 2.0f, 0.0f);
gl.glRotatef(90.0f, 0.0f, 0.0f, 1.0f);
gl.glColor4f(0.0f, 1.0f, 0.0f, 0.5f);
gl.glDrawArrays(GL10.GL_TRIANGLES_STRIP, 0,4);
gl.glPopMatrix();
gl.glPushMatrix();
gl.glTranslatef(1.7f, 1.5f, 0.0f);
gl.glRotatef(90.0f, 0.0f, 0.0f, 1.0f);
gl.glColor4f(0.0f, 0.0f, 1.0f, 0.25f);
gl.glDrawArrays(GL10.GL_TRIANGLES_STRIP, 0,4);
gl.glPopMatrix();
gl.glPushMatrix();
gl.glTranslatef(1.5f, 1.0f, 0.0f);
gl.glColor4f(1.0f, 1.0f, 0.0f, 0.75f);
gl.glDrawArrays(GL10.GL_TRIANGLES_STRIP, 0,4);
gl.glPopMatrix();
gl.glFlush ();
gl.glFinish ();
}
Sau khi chy chng trnh, c th thay i ch chn mu. Chc nng trn
mu (GL_ONE, GL_ZERO) lm cho mu sc khng b pha trn.
Trong hm menu:
if (gl.glIsEnable(GL10.GL_BLEND)){
gl.glDisable(GL10.GL_BLEND);
gl.glEnable(GL10.GL_DEPTH_TEST);
}
else{
gl.glEnable(GL10.GL_BLEND);
gl.glDisable(GL10.GL_DEPTH_TEST);
}
break;
C 3 ch sng m:
C
M t
GL_EXP
GL_EXP2
Gi tr float
GL_FOG_MODE
GL_EXP,
GL_FOG_DENSITY
Miu t
GL_EXP2 Xc nh ch sng m nh
hoc GL_LINEAR
iu ny ch ra lp sng m
nh th no gi l dy c. Gi
tr cng cao th lp sng m
cng dy c
GL_FOG_START
GL_FOG_END
ca sng m
ca sng m
Mt chc nng khc khng dnh ring cho Fog l hm glHint, chc nng ny
cho php xc nh nhng th quan trng nh hnh/tc . Tham s u tin c th l
mt
gi
tr
nh
GL_FOG_HINT,
GL_LINE_SMOOTH_HINT,
th s dng c GL_FASTEST. Gi tr mc nh l
Nh tt c cc phn khc ca OpenGL ES, phi kch hot chc nng sng m
thng qua c GL_FOG ca hm glEnable.
gl.glEnable (GL10.GL_FOG);
Phn cui cng l dng menu la chn ch Fog, bng cch s dng mng
fogTypes.
++fogType %=3;
gl.glFogf(GL10.GL_FOG_MODE, fogTypes[fogType]);
Kt qu:
<item android:id="@+id/phamau"
android:icon="@drawable/icon"
android:title="@string/phamau" >
<menu>
<item android:id="@+id/phamau0"
android:title="@string/phamau0"
<item android:id="@+id/phamau1"
android:title="@string/phamau1"
<item android:id="@+id/phamau2"
android:title="@string/phamau2"
<item android:id="@+id/phamau3"
android:title="@string/phamau3"
<item android:id="@+id/phamau4"
android:title="@string/phamau4"
</menu>
</item>
/>
/>
/>
/>
/>
<item android:id="@+id/phepbiendoi"
android:icon="@drawable/icon"
android:title="@string/phepbiendoi" >
<menu>
<item android:id="@+id/tinhtien"
android:title="@string/tinhtien" />
<item android:id="@+id/quay"
android:title="@string/quay" />
<item android:id="@+id/tile"
android:title="@string/tile" />
<item android:id="@+id/kethop"
android:title="@string/kethop" />
</menu>
</item>
<item android:id="@+id/phepchieu"
android:icon="@drawable/icon"
android:title="@string/phepchieu" >
<menu>
<item android:id="@+id/trucgiao"
android:title="@string/trucgiao" />
<item android:id="@+id/phoicanh"
android:title="@string/phoicanh" />
</menu>
</item>
<item android:id="@+id/anhsang"
android:icon="@drawable/icon"
android:title="@string/anhsang" />
<item android:id="@+id/chieusau"
android:icon="@drawable/icon"
android:title="@string/chieusau" />
<item android:id="@+id/duongham"
android:icon="@drawable/icon"
android:title="@string/duongham" />
</menu>
File strings.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Nguyen Chi Tam - Nguyen Phi
Cuong</string>
<string name="app_name">DemoOpenglES</string>
<string name="chatlieu">Chat lieu</string>
<string name="suongmu">Suong mu</string>
<string name="phepchieu">Phep chieu</string>
<string name="trucgiao">Truc giao</string>
<string name="phoicanh">Phoi canh</string>
<string name="phepbiendoi">Phep bien doi</string>
<string name="tinhtien">Tinh tien</string>
<string name="quay">Quay</string>
<string name="tile">Ti le</string>
<string name="anhsang">Anh sang</string>
<string name="chieusau">Chieu sau</string>
<string name="phamau">Pha mau</string>
<string name="kethop">Ket hop</string>
<string name="phamau0">ONE - ZERO</string>
<string name="phamau1">ONE - ONE</string>
<string name="phamau2">ONE - ONE_MINUS_DST_ALPHA</string>
<string name="phamau3">SRC_ALPHA - ONE</string>
<string name="phamau4">SRC_ALPHA ONE_MINUS_SRC_ALPHA</string>
<string name="vehinh">Ve hinh</string>
<string name="mattru">Mat tru</string>
<string name="matnon">Mat non</string>
<string name="matnoncut">Mat non cut</string>
<string name="matcau">Mat cau</string>
<string name="duongham">Duong ham</string>
</resources>
Hnh 40 Demo v mt tr
Hnh 41 Demo v mt nn
Hnh 41 Demo v mt nn ct
Hnh 42 Demo v mt cu
Hnh 43 M phng ng hm 3D
1. Kt qu t c:
ng trc s pht trin ca cc thit b di ng v nhng i hi ca con
ngi trong lnh vc gii tr, ng dng trn cc thit b di ng ngy cng cao. Vi
ti Xy dng ng dng 3D vi Android, kha lun ny trnh by c tng
quan v lp trnh trn Android v cc k thut v lp trnh ha da trn b th vin
OpenGL ES. Qua xy dng mt m hnh 3D trn Android lm nn tng cho vic
thit k cc games 3D trn di ng.
Tuy nhin do hn ch v iu kin v thi gian cng nh nng lc ca nhm,
kho lun s khng th trnh khi nhng thiu st. Knh mong c s ng gp
kin ca thy c v cc bn nhm thc hin c th hon thin hn ti nghin cu
ca mnh trong t lm kha lun tt nghip ny.
2. Hng pht trin:
Hin ti, h iu hnh Android ang pht trin rc r, v tnh nng m ca n.
V n cng ang c cng ng cc lp trnh vin trn khp th gii quan tm v tm
hiu, ng thi tr gip cho Google pht trin v hon thin tnh nng cho h iu
hnh ny. ng thi, cc ng dng 3D th s hp dn hn i vi ngi dng.
Do , trong tng lai nhm thc hin s tip tc tm hiu, i su hn v cc k
thut 3D cho ng dng Android, hng n pht trin cc demo trn thnh mt game
3D hon chnh.
Hng dn ci t:
1. Ci t ng dng cho Emulator:
a. Khi ng emulator mun install ng dng. (Vo Eclipse>Window/Android SDK and AVD manager -> chn AVD ri Start).
b. .a file ImageEditor.apk vo trong folder tools ca folder cha sdk. VD:
C:\android-sdk-windows\tools.
c. M Command shell ln v di chuyn ti folder ny. VD: Trong Window vo
Run g cmd, ri dng lnh cd ti c folder tools.
d. G vo command shell lnh adb install <tn_file.apk>. VD: adb install
ImageEditor.apk
e. Vo emulator -> chn ng dng v chy.
2. Ci t ng dng cho in thoi tht:
a. Kt ni in thoi vi my tnh qua cng usb.
b. Thay i ci t ng dng, vo MENU > Settings > Applications >
Unknown Sources.
c. Bt Usb debugging trn in thoi, vo MENU > Settings > Applications >
Development, sau enable USB debugging.
d. M Command shell ln v di chuyn ti folder ny. VD: Trong Window vo
Run g cmd, ri dng lnh cd ti c folder tools.
e. G vo command shell lnh adb install <tn_file.apk>. VD: adb install
ImageEditor.apk
f. Vo emulator -> chn ng dng v chy.