20.11.2016 Views

ANDROID APP

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

144 บทที่ 5 อีเวนต์ต่างๆ ที่เกิดขึ้นในส่วนการติดต่อกับผู้ใช้งาน<br />

}<br />

gl.glLoadIdentity();<br />

gl.glFrustumf(-ratio, ratio, -1, 1, 1, 20);<br />

public void onSurfaceCreated(GL10 gl, EGLConfig config) {<br />

gl.glDisable(GL10.GL_DITHER);<br />

/* one-time OpenGL initialization */<br />

gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT,<br />

GL10.GL_FASTEST);<br />

}<br />

if (mTranslucentBackground) {<br />

gl.glClearColor(0,0,0,0);<br />

} else {<br />

gl.glClearColor(1,1,1,1);<br />

}<br />

gl.glEnable(GL10.GL_CULL_FACE);<br />

gl.glShadeModel(GL10.GL_SMOOTH);<br />

gl.glEnable(GL10.GL_DEPTH_TEST);<br />

}<br />

private boolean mTranslucentBackground;<br />

private Pyramid mPyramid;<br />

private float mAngle, mAngleDelta=0;<br />

private float mCenter[]={0,0,-10};<br />

private float mVel[]={0.025f, 0.03535227f, 0f};<br />

การเคลื่อนไหวของรูปทรงไปทั่วจอภาพนั้นเกิดจากการทำงานของเมธอด onDrawFrame()<br />

จอภาพจะถูกลบ เพื่อสร้างภาพเฟรมถัดไป ซึ่งเรากำหนดให้จุดศูนย์กลางของปิรามิดเก็บไว้ในตัวแปร<br />

ชื่อ mCenter[] โดยที่กึ่งกลางจอจะถูกกำหนดให้เป็นจุดเริ่มต้น และเมื่อเราสั่งให้จุดเริ่มต้นมีค่าเป็น<br />

(0,0,-10) รูปทรงก็จะแสดงที่ตำแหน่งขวาบนของจอ และในระหว่างที่แสดงภาพในแต่ละเฟรมนั้น<br />

รูปทรงจะหมุนด้วยการใช้ค่าของ mAngleDelta และ mVel[] โดยตัวแปร mVel[] จะเก็บค่าของ<br />

แกน x และ y ของตำแหน่งที่รูปทรงจะเคลื่อนที่ไป และเมื่อรูปทรงเคลื่อนที่ไปจนถึงของของจอภาพ<br />

ค่าของ mVel[] ก็จะเปลี่ยนไปในทิศทางอื่นเพื่อให้สามารถแสดงรูปทรงในเฟรมถัดไปได้<br />

ในชุดคำสั่งที่ 5.19 จะแสดงการทำงานของแอคทิวิตี้หลักที่จะแปลงข้อมูลภายในวิวให้เป็น<br />

ออบเจ็กต์ของ OpenGL ES โดยการเคลื่อนไหวของรูปทรงนี้ เราสามารถสั่งให้หยุดหรือทำต่อด้วย<br />

คำสั่งเหล่านี้ได้

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!