Beginning DirectX9 D ị ch b ở i TransTeam di ễ n đ àn Gamedev VN 2 © 2004 by Premier Press, a division of Course Technology All rights reserved No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording, or by any information storage or retrieval system without written permission from Course PTR, except for the inclusion of brief quotations in a review The Premier Press logo and related trade dress are trademarks of Premier Press and may not be used without written permission DirectX is a registered trademark of Microsoft Corporation in the U S and/or other countries © Microsoft Corporation, 2002 All rights reserved All other trademarks are the property of their respective owners Important: Course PTR cannot provide software support Please contact the appropriate software manufacturer’s technical support line or Web site for assistance Course PTR and the author have attempted throughout this book to distinguish proprietary trademarks from descriptive terms by following the capitalization style used by the manufacturer Information contained in this book has been obtained by Course PTR from sources believed to be reliable However, because of the possibility of human or mechanical error by our sources, Course PTR, or others, the Publisher does not guarantee the accuracy, adequacy, or completeness of any information and is not responsible for any errors or omissions or the results obtained from use of such information Readers should be particularly aware of the fact that the Internet is an ever-changing entity Some facts may have changed since this book went to press Educational facilities, companies, and organizations interested in multiple copies or licensing of this book should contact the publisher for quantity discount information Training manuals, CD-ROMs, and portions of this book are also available individually or can be tailored for specific needs ISBN: 1-59200-349-4 Library of Congress Catalog Card Number: 2004090736 Printed in the United States of America 04 05 06 07 08 BH 10 9 8 7 6 5 4 3 2 1 Course PTR, a division of Course Technology 25 Thomson Place Boston, MA 02210 http://www courseptr com Senior Vice President, Course PTR Group: Andy Shafran Publisher: Stacy L Hiquet Senior Marketing Manager: Sarah O’Donnell Marketing Manager: Heather Hurley Manager of Editorial Services: Heather Talbot Senior Acquisitions Editor: Emi Smith Associate Marketing Manager: Kristin Eisenzopf Project/Copy Editor: Karen A Gill Technical Reviewer: Joseph Hall Retail Market Coordinator: Sarah Dubois Interior Layout: Marian Hartsough Cover Designer: Steve Deschene CD-ROM Producer: Brandon Penticuff Indexer: Sharon Shock Proofreader: Sean Medlock Beginning DirectX9 D ị ch b ở i TransTeam di ễ n đ àn Gamedev VN 3 Thông tin v ề tác gi ả W ENDY J ONES là ng ườ i đ ã dành tr ọ n ni ề m đ am mê c ủ a cô ấ y cho máy tính ngay t ừ l ầ n đầ u tiên cô đượ c nhìn th ấ y chi ế c máy Apple IIe khi còn h ọ c ở tr ườ ng ph ổ thông K ể t ừ khi ti ế p c ậ n v ớ i nó, cô ấ y đ ã dành m ọ i kho ả ng th ờ i gian r ả nh r ỗ i vào công vi ệ c h ọ c l ậ p trình BASIC và k ỹ thu ậ t đồ ho ạ , v ẽ nh ữ ng ý t ưở ng c ủ a mình lên gi ấ y v ẽ và th ự c hi ệ n nó trên máy tính Ngoài BASIC thì cô c ũ ng đ ã l ầ n l ượ t ti ế p c ậ n v ớ i các ngôn ng ữ khác nh ư Pascal, C, Java và C++ Ngh ề nghi ệ p c ủ a Wendy là m ộ t chu ỗ i thay đổ i nh ư chính s ự phát tri ể n c ủ a máy tính v ậ y, t ừ b ỏ môi tr ườ ng l ậ p trình DOS, cô t ự trang b ị cho mình nh ữ ng ki ế n th ứ c v ề l ậ p trình Window và sao đ ó r ấ t nhanh chóng nh ả y sang th ế gi ớ i NET M ặ c dù các công ty Internet đ em l ạ i r ấ t nhi ề u ti ề n, nh ư ng đ ó không ph ả i là t ấ t c ả , chính vì th ế Wendy đ ã m ở r ộ ng k ỹ n ă ng l ậ p trình c ủ a mình sang l ĩ nh v ự c l ậ p trình games và d ồ n t ấ t c ả s ứ c l ự c c ủ a mình cho ni ề m đ am mê đ ó Wendy đ ã hi ệ n th ự c hoá đượ c ni ề m đ am mê này khi cô nh ậ n đượ c m ộ t đề ngh ị làm vi ệ c cho công ty Atari’s Humongous Entertainment v ớ i t ư cách là m ộ t l ậ p trình viên Trong xu ố t quá trình làm vi ệ c ở Atari, cô ấ y đ ã làm vi ệ c trên c ả hai môi tr ườ ng PC và máy ch ơ i game cá nhân, b ị qu ấ n theo hàng lo ạ t nh ữ ng thách th ứ c mà công vi ệ c đ ó đ em đế n Hi ệ n t ạ i Wendy đ ang làm vi ệ c các ph ầ n m ề m dành cho PocketPC và trên nh ữ ng thi ế t b ị ch ơ i game c ầ m tay N ế u b ạ n có b ấ t c ứ góp ý hay nh ữ ng câu h ỏ i v ề quy ể n sách này, b ạ n có th ể liên h ệ v ớ i cô theo đị a ch ỉ mail: gadget2032@yahoo com Beginning DirectX9 D ị ch b ở i TransTeam di ễ n đ àn Gamedev VN 4 B ố c ụ c c ủ a sách L ờ i gi ớ i thi ệ u P H Ầ N I N H Ữ NG K I Ế N T H Ứ C N Ề N T Ả NG Ch ươ ng 1 DirectX là gì, t ạ i sao và làm th ế nào để s ử d ụ ng nó Ch ươ ng 2 Ví d ụ đầ u tiên s ử d ụ ng DirectX Ch ươ ng 3 Phông n ề n, khung hình, ho ạ t c ả nh P H Ầ N II N H Ữ NG T HÀNH P H Ầ N C Ơ B Ả N C Ủ A M Ộ T T H Ế G I Ớ I 3D Ch ươ ng 4 Nh ữ ng ki ế n th ứ c c ơ b ả n v ề 3D Ch ươ ng 5 Ma tr ậ n, các phép bi ế n đổ i và phép xoay trong không gian Ch ươ ng 6 B ả ng m ầ u, v ậ t li ệ u ph ủ và ánh sáng trong không gian Ch ươ ng 7 Chia nh ỏ và làm m ị n đố i t ượ ng Ch ươ ng 8 V ậ t th ể , đ i ể m chèn và các hi ệ u ứ ng P H Ầ N III N H Ữ NG K I Ế N T H Ứ C B Ổ X UNG Ch ươ ng 9 S ử d ụ ng DirectInput Ch ươ ng 10 Hi ệ u ứ ng âm thanh b ằ ng DirectSound Ch ươ ng 11 Xây d ự ng m ộ t d ự án m ẫ u P H Ầ N IV P H Ụ L Ụ C Ph ụ l ụ c A Gi ả i đ áp các bài t ậ p cu ố i các ch ươ ng Ph ụ l ụ c B Cách s ử d ụ ng CD-ROM Gi ả i thích các thu ậ t ng ữ Ch ỉ m ụ c các t ừ khoá Beginning DirectX9 D ị ch b ở i TransTeam di ễ n đ àn Gamedev VN 5 L Ờ I GI Ớ I THI Ệ U ậ p trình game có th ể nói là m ộ t công vi ệ c c ự c k ỳ thú v ị trong th ế gi ớ i l ậ p trình b ở i nó đ em l ạ i cho b ạ n c ơ h ộ i đượ c t ạ o ra m ộ t th ế gi ớ i ả o n ơ i mà nh ữ ng sinh v ậ t huy ề n bí, nh ữ ng vùng đấ t ch ư a h ề đượ c bi ế t đế n ngay c ả trong nh ữ ng gi ấ c m ơ Li ệ u b ạ n có th ể tìm th ấ y đ i ề u này ở m ộ t n ơ i nào khác? V ớ i nó, b ạ n có th ể đ em đế n cho m ọ i ng ườ i kh ả n ă ng tr ở thành b ấ t c ứ m ộ t nhân v ậ t nào, m ộ t con ng ườ i nào mà h ọ mong mu ố n và h ơ n c ả là m ộ t môi tr ườ ng để h ọ có th ể s ố ng theo đ úng s ở thích C ũ ng chính b ở i th ế mà ngành công nghi ệ p Game đ ã phát tri ể n không ng ừ ng, v ượ t qua m ọ i gi ớ i h ạ n và kéo theo nó là phát tri ể n c ủ a công ngh ệ ph ụ c v ụ cho nó Ch ỉ vài n ă m tr ướ c đ ây, có l ẽ ở c ấ p độ ng ườ i s ử d ụ ng còn ch ư a h ề bi ế t đế n các thi ế t b ị th ể hi ệ n hình ả nh 3D ngo ạ i tr ừ các máy tr ạ m đắ t ti ề n SGI d ự a trên n ề n t ả ng OpenGL T ạ i th ờ i đ i ể m đ ó có th ể nói OpenGL m ớ i ch ỉ đ ang ở th ờ i k ỳ phôi thai Đế n khi các máy tính cá nhân PC đ ã đượ c ph ổ bi ế n h ơ n, OpenGL đ ã m ở r ộ ng n ề n t ả ng c ủ a mình và đ i ề u đ ó th ự c s ự đ ã đ em đế n m ộ t cú huých m ạ nh đầ u tiên trong l ị ch s ử phát tri ể n game c ũ ng nh ư nh ữ ng ứ ng d ụ ng mô ph ỏ ng không gian 3D T ạ i th ờ i đ i ể m đ ó, Windows v ẫ n ch ư a ph ả i là n ề n t ả ng t ố t nh ấ t để phát tri ể n games, tuy nhiên h ọ c ũ ng r ấ t nhanh chóng nh ậ n ra nh ữ ng l ợ i nhu ậ n t ừ ngành công nghi ệ p này Chính vì th ế phiên b ả n DirectX đầ u tiên c ũ ng s ớ m đượ c Microsoft tung ra Tuy nhiên trong th ờ i gian đầ u này thì s ự ph ổ bi ế n c ủ a n ề n t ả ng này v ẫ n còn r ấ t h ạ n ch ế do OpenGL đ ã đượ c th ừ a nh ậ n là ph ươ ng th ứ c chu ẩ n để phát tri ể n đồ ho ạ 3D trên môi tr ườ ng Windows Ngày nay, h ầ u h ế t các game phát tri ể n trên PC bán trên th ị tr ườ ng đề u đượ c xây d ự ng trên n ề n t ả ng DirectX, nó đ ã giúp cho nh ữ ng game th ủ có th ể t ậ n h ưở ng đượ c m ộ t công ngh ệ đồ ho ạ tiên ti ế n và hi ệ n th ự c nh ấ t v ề th ế gi ớ i Nh ữ ng c ầ n ph ả i có nh ữ ng gì để ti ế p c ậ n công ngh ệ này? Nh ữ ng kinh nghi ệ m và ki ế n th ứ c v ề l ậ p trình C++ c ũ ng nh ư lý thuy ế t l ậ p trình h ướ ng đố i t ượ ng (OOP) s ẽ giúp b ạ n có th ể hi ể u đượ c t ấ t c ả nh ữ ng bài gi ả ng đượ c trình bày trong quy ể n sách này Ngoài ra b ạ n c ũ ng nên trang b ị thêm cho mình m ộ t vài k ỹ n ă ng v ề toán h ọ c và hình ho ạ , tuy nhiên h ầ u h ế t nh ữ ng khái ni ệ m toán h ọ c s ử d ụ ng c ũ ng s ẽ đượ c gi ả i thích chi ti ế t Nh ữ ng hi ể u bi ế t v ề Visual Studio NET hay b ấ t k ỳ s ả n ph ẩ m nào trong b ộ Visual Studio c ũ ng s ẽ r ấ t là h ữ u ích L Beginning DirectX9 D ị ch b ở i TransTeam di ễ n đ àn Gamedev VN 6 Làm th ế nào để s ử d ụ ng quy ể n sách này hi ệ u qu ả ? Quy ể n sách này đượ c chia làm 3 ph ầ n chính Ph ầ n đầ u tiên s ẽ mô t ả c ở b ả n v ề DirectX, làm th ế nào để thi ế t l ậ p và ch ạ y m ộ t ứ ng d ụ ng s ử d ụ ng n ề n t ả ng này Ph ầ n th ứ hai s ẽ cung c ấ p cho b ạ n nh ữ ng khái ni ệ m c ơ b ả n ph ụ c v ụ quá trình thi ế t k ế và xây d ự ng m ộ t môi tr ườ ng 3D, kèm theo đ ó là gi ớ i thi ệ u nh ữ ng khái ni ệ m v ề 3D và Direct3D Ph ầ n 3 và ph ầ n cu ố i s ẽ xoay quanh các ki ế n th ứ c khác c ủ a n ề n t ả ng DirectX nh ư x ử lý âm thanh thông qua DirectSound, l ấ y các thông tin đầ u vào t ừ ng ườ i dùng thông qua DirectInput Quy ể n sách k ế t thúc b ằ ng m ộ t d ự án minh ho ạ nh ỏ v ớ i hi v ọ ng đ em đế n cho b ạ n m ộ t cái nhìn toàn c ả nh h ơ n v ề t ấ t các các ki ế n th ứ c chúng ta đ ã h ọ c và áp d ụ ng c ụ th ể chúng nh ư th ế nào N ế u b ạ n đ ã t ừ ng làm quen v ớ i môi tr ườ ng DirectX và c ũ ng đ ã t ừ ng vi ế t m ộ t vài ứ ng d ụ ng s ử d ụ ng n ề n t ả ng này, b ạ n có th ể b ỏ qua ph ầ n m ộ t Tôi ngh ĩ r ằ ng b ấ t k ỳ ai khi m ớ i ti ế p c ậ n v ớ i môi tr ườ ng l ậ p trình game và DirectX nên đọ c quy ể n sách này m ộ t cách tu ầ n t ự để có th ể hi ể u h ế t đượ c nh ữ ng kh ả n ă ng mà DirectX có th ể đ em l ạ i Beginning DirectX9 D ị ch b ở i TransTeam di ễ n đ àn Gamedev VN 7 Ch ươ ng 1 DirectX là gì, t ạ i sao và làm th ế nào để s ử d ụ ng nó Ch ươ ng 2 Ví d ụ đầ u tiên s ử d ụ ng DirectX Ch ươ ng 3 Phông n ề n, khung hình, ho ạ t c ả nh PH Ầ N I KI Ế N TH Ứ C N Ề N T Ả NG Beginning DirectX9 D ị ch b ở i TransTeam di ễ n đ àn Gamedev VN 8 DirectX là gì, T ạ i sao và Làm th ế nào để s ử d ụ ng nó irectX v ề th ự c ch ấ t là m ộ t h ệ th ố ng các giao di ệ n l ậ p trình ứ ng d ụ ng (API) ph ụ c v ụ cho quá trình phát tri ể n các game trên n ề n t ả ng h ệ đ i ề u hành Windows N ế u nh ư t ạ i th ờ i đ i ể m m ộ t vài n ă m tr ướ c, nh ữ ng ng ườ i phát tri ể n game th ườ ng ph ả i v ậ t l ộ n v ớ i nh ữ ng v ấ n đề n ả y sinh t ừ s ự không t ươ ng thích c ủ a ph ầ n c ứ ng - không th ể phát tri ể n nh ữ ng s ả n ph ẩ m game để t ấ t c ả m ọ i ng ườ i đề u có th ể t ậ n h ưở ng đượ c nh ữ ng tính n ă ng c ủ a game đ ó Thì ngày nay, Microsoft đ ã đ em t ớ i m ộ t n ề n t ả ng DirectX Nó cung c ấ p cho nh ữ ng ng ườ i phát tri ể n game m ộ t ph ươ ng th ứ c đơ n nh ấ t, m ộ t n ề n t ả ng th ư vi ệ n API “s ạ ch” ( đ ã đượ c chu ẩ n hoá) để h ọ có th ể vi ế t và ch ạ y trên h ầ u h ế t các n ề n t ả ng mà không c ầ n ph ả i lo ng ạ i nhi ề u v ề ph ầ n c ứ ng c ủ a PC Ch ỉ m ộ t vài n ă m sau khi phiên b ả n DirectX đượ c đề xu ấ t, s ố l ượ ng game đượ c phát tri ể n trên n ề n t ả ng Windows đ ã t ă ng lên m ộ t cách nhanh chóng Trong ch ươ ng này, chúng ta s ẽ đề c ậ p t ớ i các v ấ n đề : DirectX là gì v ậ y T ạ i sao nó l ạ i h ữ u d ụ ng đế n th ế Thành ph ầ n nào đ ã xây d ự ng nên n ề n t ả ng DirectX API DirectX là gì? DirectX là m ộ t t ậ p h ợ p th ư vi ệ n các hàm API đượ c Microsoft thi ế t k ế để cung c ấ p cho nh ữ ng ng ườ i phát tri ể n game m ộ t giao di ệ n l ậ p trình c ấ p th ấ p để liên k ế t t ớ i các ph ầ n c ứ ng c ủ a PC ch ạ y trên h ệ đ i ề u hành Windows Phiên b ả n hi ệ n t ạ i c ủ a nó là 9 0(c), m ỗ i m ộ t đố i t ượ ng API c ủ a DirectX cung c ấ p m ộ t kh ả n ă ng truy c ậ p khác nhau t ớ i t ừ ng lo ạ i ph ầ n c ứ ng c ủ a h ệ th ố ng, nó bao g ồ m h ệ th ố ng đồ ho ạ , âm thanh và k ế t n ố i m ạ ng, t ấ t c ả chúng đề u đượ c xây d ự ng trên m ộ t giao di ệ n chu ẩ n Giao di ệ n này cho phép nh ữ ng ng ườ i phát tri ể n có th ể vi ế t nh ữ ng game c ủ a h ọ b ằ ng cách s ử d ụ ng t ậ p h ợ p cách hàm này l ạ i v ớ i nhau mà không c ầ n ph ả i quan tâm nhi ề u t ớ i ph ầ n c ứ ng mà nó s ẽ đượ c s ử d ụ ng D CH ƯƠ NG 1 Beginning DirectX9 D ị ch b ở i TransTeam di ễ n đ àn Gamedev VN 9 Nh ữ ng thành ph ầ n t ạ o nên DirectX H ệ th ố ng th ư vi ệ n API c ủ a DirectX đượ c phân chia ra làm nhi ề u thành ph ầ n nh ỏ , m ỗ i thành ph ầ n này đả m nhi ệ m nh ữ ng nhi ệ m v ụ khác nhau c ủ a h ệ th ố ng Chúng có th ể đượ c s ử d ụ ng hoàn toàn độ c l ậ p v ớ i nhau, b ạ n có th ể ch ỉ c ầ n thêm nh ữ ng thành ph ầ n nào mà game c ủ a b ạ n c ầ n t ớ i mà thôi Sau đ ây là danh sách các thành ph ầ n đ ó: DirectX Graphic Thành ph ầ n này đả m nhi ệ m t ấ t c ả các ch ứ c n ă ng k ế t xu ấ t đồ ho ạ c ủ a h ệ th ố ng Nó cung c ấ p nh ữ ng hàm API để ng ườ i dùng có th ể qu ả n lý quá trình v ẽ 2D c ũ ng nh ư 3D, ngoài ra nó c ũ ng h ỗ tr ợ c ả quá trình kh ở i t ạ o và xác l ậ p độ phân gi ả i cho game c ủ a b ạ n DirectInput T ấ t c ả nh ữ ng gì ng ườ i dùng nh ậ p vào s ẽ đượ c qu ả n lý b ở i các hàm API trong thành ph ầ n này Nó bao g ồ m kh ả n ă ng h ỗ tr ợ các thi ế t b ị nh ư bàn phím, chu ộ t, gamepad, joystick V ớ i phiên b ả n m ớ i nh ấ t hi ệ n nay c ũ ng đ ã h ỗ tr ợ c ả các thi ế t b ị t ươ ng tác th ự c (force-feedback) nh ư c ầ n lái, chân ga cho các game đ ua t ố c độ DirectPlay Kh ả n ă ng k ế t n ố i m ạ ng đượ c cung c ấ p cho nh ữ ng h ệ th ố ng game c ủ a b ạ n thông qua thành ph ầ n DirectPlay này Nh ữ ng hàm ph ụ c v ụ k ế t n ố i này đ em đế n cho b ạ n kh ả n ă ng phát tri ể n ứ ng d ụ ng có th ể giao ti ế p v ớ i b ấ t k ỳ m ộ t máy nào khác, cho phép không ch ỉ m ộ t ng ườ i có th ể ch ơ i game đ ó DirectPlay đ em đế n cho b ạ n m ộ t giao di ệ n l ậ p trình c ấ p cao nh ằ m giúp b ạ n tránh kh ỏ i nh ữ ng v ấ n đề khó kh ă n trong quá trình l ậ p trình ứ ng d ụ ng liên k ế t m ạ ng DirectSound N ế u b ạ n mu ố n chèn thêm các hi ệ u ứ ng âm thanh ho ặ c nh ạ c n ề n, b ạ n s ẽ c ầ n ph ả i s ử d ụ ng t ớ i nh ữ ng hàm API do thành ph ầ n này cung c ấ p Ch ứ c n ă ng c ủ a DirectSound là cho phép b ạ n có th ể t ả i và ch ơ i m ộ t ho ặ c nhi ề u file nh ạ c d ạ ng WAV c ũ ng nh ư toàn b ộ kh ả n ă ng đ i ề u khi ể n quá trình ch ơ i nh ạ c đ ó DirectMusic Thành ph ầ n này mang đế n cho b ạ n kh ả n ă ng t ạ o các b ả n nh ạ c “ độ ng” (t ạ i th ờ i đ i ể m ch ươ ng trình ch ạ y, không c ầ n ph ả i l ư u tr ữ trong c ơ s ở d ữ li ệ u c ủ a game) Nó có kh ả n ă ng h ỗ tr ợ h ầ u h ế t các ch ứ c n ă ng chính c ủ a m ộ t ph ầ n m ề m ch ơ i nh ạ c midi nh ư t ự ch ạ y l ạ i theo m ộ t qui trình đ ã xác l ậ p, bi ế n đổ i âm l ượ ng để phù h ợ p v ớ i ho ạ t c ả nh trong game, thay đổ i nh ị p c ủ a giai đ i ệ u và nhi ề u ch ứ c n ă ng cao c ấ p khác DirectShow B ạ n có th ể c ắ t m ộ t ho ạ t c ả nh phim ho ặ c l ồ ng ghép âm thanh và game c ủ a mình thông qua thành ph ầ n này AVI, MP3, MPEG và ANF ch ỉ là m ộ t trong s ố r ấ t nhi ề u các lo ạ i đị nh d ạ ng file mà DirectShow h ỗ tr ợ V ớ i DirectShow, b ạ n s ẽ không ph ả i t ả i t ấ t c ả các đố i t ượ ng file này lên b ộ nh ớ , thay vào đ ó là truy c ậ p tr ự c ti ế p d ữ li ệ u trên ổ c ứ ng ho ặ c CD-ROM DirectSetup Sau khi game c ủ a b ạ n đ ã hoàn thành, b ạ n s ẽ mu ố n phát hành DirectSetup cung c ấ p cho b ạ n nh ữ ng ch ứ c n ă ng giúp ứ ng d ụ ng có th ể t ự độ ng cài đặ t nh ữ ng phiên b ả n DirectX m ớ i nh ấ t lên h ệ th ố ng c ủ a ng ườ i s ử d ụ ng Chú ý: H ệ th ố ng đồ ho ạ DirectX bao g ồ m toàn b ộ các ch ứ c n ă ng c ủ a c ả DirectDraw và Direct3D Phiên b ả n DirectX 7 0 là phiên b ả n cu ố i cùng phân tách hai thành ph ầ n này thành hai đố i t ượ ng độ c l ậ p Beginning DirectX9 D ị ch b ở i TransTeam di ễ n đ àn Gamedev VN 10 T ạ i sao DirectX l ạ i c ầ n thi ế t? Tr ướ c khi h ệ đ i ề u hành Windows đượ c phát hành, các l ậ p trình viên ch ủ y ế u phát tri ể n các game trên n ề n t ả ng h ệ đ i ề u hành DOS Đấ y là m ộ t h ệ đ i ề u hành đơ n nhi ệ m, không h ỗ tr ợ giao di ệ n đồ ho ạ (non-GUI) và cách duy nh ấ t để th ự c hi ệ n các thao tác đồ ho ạ này là truy c ậ p tr ự c ti ế p vào ph ầ n c ứ ng và th ự c thi chúng Đ i ề u này đ em đế n c ả nh ữ ng l ợ i ích c ũ ng nh ư nh ữ ng v ấ n đề khó kh ă n c ầ n gi ả i quy ế t Ta có th ể ví d ụ ra, b ở i vì s ử d ụ ng cách truy c ậ p tr ự c ti ế p gi ữ a mã game và ph ầ n c ứ ng, l ậ p trình viên có th ể có đượ c toàn b ộ s ứ c m ạ nh c ũ ng nh ư quy ề n đ i ề u khi ể n c ủ a h ệ th ố ng, đ i ề u nay đ em đế n kh ả n ă ng ho ạ t độ ng v ớ i hi ệ u su ấ t và ch ấ t l ượ ng cao c ủ a h ệ th ố ng game Tuy nhiên, m ặ t trái c ủ a v ấ n đề là nh ữ ng nhà phát tri ể n game này s ẽ ph ả i t ự xây d ự ng cho mình nh ữ ng th ư vi ệ n h ỗ tr ợ cho t ừ ng lo ạ i thi ế t b ị ph ầ n c ứ ng n ế u h ọ mu ố n game có kh ả n ă ng h ỗ tr ợ Nó bao g ồ m ngay c ả nh ữ ng thi ế t b ị r ấ t ph ổ thông nh ư card âm thanh và đồ ho ạ T ạ i th ờ i đ i ể m đ ó, không ph ả i t ấ t c ả các thi ế t b ị đề u tuân theo m ộ t chu ẩ n nh ấ t đị nh Chính đ i ề u này đ ã làm cho quá trình thao tác trên màn hình đồ ho ạ c ự c k ỳ khó kh ă n đặ c bi ệ t khi b ạ n mu ố n phát triên các game có độ phân gi ả i trên 320 x 240 pixel Ch ỉ vi ệ c vi ế t các game s ử d ụ ng độ phân gi ả i 640 x 480 c ũ ng đ ã khi ế n các l ậ p trình viên ph ả i truy c ậ p tr ự c ti ế p vào b ộ nh ớ video và t ự mình qu ả n lý toàn b ộ quá trình c ậ p nh ậ t các thanh ghi s ử lý c ủ a card đồ ho ạ đ ó Và h ọ đ ã ngh ĩ r ằ ng đ ã đế n lúc c ầ n ph ả i tìm ki ế m m ộ t cách đ i khác đơ n gi ả n và hi ệ u qu ả h ơ n Khi mà phiên b ả n Windows 3 1 chính th ứ c phát hành, nh ữ ng v ấ n đề đ ó v ẫ n ch ư a h ề đượ c gi ả i quy ế t H ơ n th ế , b ở i vì Windows ch ạ y trên n ề n DOS nên chính nó vô tình đ ã làm gi ả m đ i tài nguyên h ệ th ố ng giành cho các game và nó c ũ ng đ ã lo ạ i b ỏ toàn b ộ kh ả n ă ng truy c ậ p tr ự c ti ế p mà nh ữ ng nhà phát tri ể n game v ẫ n hay dùng tr ướ c đ ó t ừ r ấ t lâu r ồ i V ậ y là h ầ u h ế t các game h ỗ tr ợ Window t ạ i th ờ i đ i ể m đ ó ch ủ y ế u là nh ữ ng game đ ánh bài và các game đơ n gi ả n khác Trong khi đ ó các game hành độ ng v ẫ n ti ế p t ụ c đượ c phát tri ể n trên n ề n t ả ng DOS M ặ c dù tr ướ c đ ó, Microsoft đ ã c ố g ắ ng cung c ấ p cho ng ườ i phát tri ể n m ộ t cách cách truy c ậ p nhanh h ơ n t ớ i các thi ế t b ị đồ ho ạ thông qua h ệ th ố ng th ư vi ệ n có tên WinG Nó là ti ề n thân c ủ a DirectX và ch ỉ h ỗ tr ợ r ấ t ít ch ứ c n ă ng WinG th ự c s ự là m ộ t ý t ưở ng hay, tuy nhiên nó v ẫ n ch ư a th ể đ em t ớ i cho nh ữ ng ng ườ i phát tri ể n kh ả n ă ng truy c ậ p h ệ th ố ng t ố t h ơ n so v ớ i nh ữ ng cách mà h ọ v ẫ n thích làm trên n ề n h ệ đ i ề u hành DOS Chính vì th ế , Microsoft đ ã có nh ữ ng c ả i ti ế n và b ổ xung thêm khá nhi ề u ch ứ c n ă ng trong phiên b ả n đầ u tiên DirectX, hay còn đượ c bi ế t t ớ i v ớ i cái tên GameSDK (b ộ công c ụ phát tri ể n game) DirectX đ ã cung c ấ p cho các l ậ p trình viên m ộ t th ư vi ệ n độ c l ậ p để phát tri ể n, nó là l ớ p trung gian gi ữ a game và các ph ầ n c ứ ng c ủ a PC Lúc này thì quá trình thao tác đồ ho ạ đ ã tr ở nên d ễ dàng h ơ n r ấ t nhi ề u Tuy nhiên phiên b ả n đầ u tiên c ủ a DirectX v ẫ n ch ư a h ỗ tr ợ đượ c nhi ề u d ạ ng ph ầ n c ứ ng khác nhau, nh ư ng đ ó th ự c s ự đ ã là m ộ t thay đổ i r ấ t có ý ngh ĩ a và th ự c s ự đ áp ứ ng đượ c mong mu ố n c ủ a nh ữ ng ng ườ i phát tri ể n game Ch ỉ m ộ t vài n ă m sau, h ọ đ ã phát hành phiên b ả n DirectX 9, m ỗ i m ộ t phiên b ả n đề u đ ã đượ c b ổ xung và t ă ng kh ả n ă ng h ỗ tr ợ nh ữ ng công ngh ệ m ớ i nh ư k ế t n ố i m ạ ng, k ế t xu ấ t âm thanh, hình ả nh và h ỗ tr ợ r ấ t nhi ề u d ạ ng thi ế t b ị đầ u vào m ớ i
Beginning DirectX9 Dịch TransTeam diễn đàn Gamedev.VN © 2004 by Premier Press, a division of Course Technology All rights Senior Vice President, reserved Course PTR Group: No part of this book may be reproduced or transmitted in any form or by any Andy Shafran means, electronic or mechanical, including photocopying, recording, or by Publisher: any information storage or retrieval system without written permission from Stacy L Hiquet Course PTR, except for the inclusion of brief quotations in a review Senior Marketing Manager: The Premier Press logo and related trade dress are trademarks of Premier Sarah O’Donnell Press and may not be used without written permission Marketing Manager: DirectX is a registered trademark of Microsoft Corporation in the U.S and/or Heather Hurley other countries Manager of Editorial © Microsoft Corporation, 2002 All rights reserved Services: All other trademarks are the property of their respective owners Heather Talbot Important: Course PTR cannot provide software support Please contact the Senior Acquisitions Editor: appropriate software manufacturer’s technical support line or Web site for Emi Smith assistance Associate Marketing Course PTR and the author have attempted throughout this book to Manager: distinguish proprietary trademarks from descriptive terms by following the Kristin Eisenzopf capitalization style used by the manufacturer Project/Copy Editor: Information contained in this book has been obtained by Course PTR from Karen A Gill sources believed to be reliable However, because of the possibility of human Technical Reviewer: or mechanical error by our sources, Course PTR, or others, the Publisher Joseph Hall does not guarantee the accuracy, adequacy, or completeness of any Retail Market Coordinator: information and is not responsible for any errors or omissions or the results Sarah Dubois obtained from use of such information Readers should be particularly aware Interior Layout: of the fact that the Internet is an ever-changing entity Some facts may have Marian Hartsough changed since this book went to press Cover Designer: Educational facilities, companies, and organizations interested in multiple Steve Deschene copies or licensing of this book should contact the publisher for quantity CD-ROM Producer: discount information Training manuals, CD-ROMs, and portions of this book Brandon Penticuff are also available individually or can be tailored for specific needs Indexer: ISBN: 1-59200-349-4 Sharon Shock Library of Congress Catalog Card Number: 2004090736 Proofreader: Printed in the United States of America Sean Medlock 04 05 06 07 08 BH 10 Course PTR, a division of Course Technology 25 Thomson Place Boston, MA 02210 http://www.courseptr.com Beginning DirectX9 Dịch TransTeam diễn đàn Gamedev.VN Thông tin tác giả WENDY JONES người dành trọn niềm đam mê cho máy tính từ lần nhìn thấy máy Apple IIe cịn học trường phổ thơng Kể từ tiếp cận với nó, dành khoảng thời gian rảnh rỗi vào cơng việc học lập trình BASIC kỹ thuật đồ hoạ, vẽ ý tưởng lên giấy vẽ thực máy tính Ngồi BASIC tiếp cận với ngôn ngữ khác Pascal, C, Java C++ Nghề nghiệp Wendy chuỗi thay đổi phát triển máy tính vậy, từ bỏ mơi trường lập trình DOS, tự trang bị cho kiến thức lập trình Window nhanh chóng nhảy sang giới NET Mặc dù công ty Internet đem lại nhiều tiền, khơng phải tất cả, Wendy mở rộng kỹ lập trình sang lĩnh vực lập trình games dồn tất sức lực cho niềm đam mê Wendy thực hố niềm đam mê cô nhận đề nghị làm việc cho công ty Atari’s Humongous Entertainment với tư cách lập trình viên Trong xuốt trình làm việc Atari, cô làm việc hai môi trường PC máy chơi game cá nhân, bị quấn theo hàng loạt thách thức mà công việc đem đến Hiện Wendy làm việc phần mềm dành cho PocketPC thiết bị chơi game cầm tay Nếu bạn có góp ý hay câu hỏi sách này, bạn liên hệ với theo địa mail: gadget2032@yahoo.com Beginning DirectX9 Dịch TransTeam diễn đàn Gamedev.VN Bố cục sách Lời giới thiệu PHẦN I NHỮNG KIẾN THỨC NỀN TẢNG Chương DirectX gì, làm để sử dụng Chương Ví dụ sử dụng DirectX Chương Phơng nền, khung hình, hoạt cảnh PHẦN II NHỮNG THÀNH PHẦN CƠ BẢN CỦA MỘT THẾ GIỚI 3D Chương Những kiến thức 3D Chương Ma trận, phép biến đổi phép xoay không gian Chương Bảng mầu, vật liệu phủ ánh sáng không gian Chương Chia nhỏ làm mịn đối tượng Chương Vật thể, điểm chèn hiệu ứng PHẦN III NHỮNG KIẾN THỨC BỔ XUNG Chương Sử dụng DirectInput Chương 10 Hiệu ứng âm DirectSound Chương 11 Xây dựng dự án mẫu PHẦN IV PHỤ LỤC Phụ lục A Giải đáp tập cuối chương Phụ lục B Cách sử dụng CD-ROM Giải thích thuật ngữ Chỉ mục từ khoá Beginning DirectX9 Dịch TransTeam diễn đàn Gamedev.VN LỜI GIỚI THIỆU Lập trình game nói cơng việc thú vị giới lập trình đem lại cho bạn hội tạo giới ảo nơi mà sinh vật huyền bí, vùng đất chưa biết đến giấc mơ Liệu bạn tìm thấy điều nơi khác? Với nó, bạn đem đến cho người khả trở thành nhân vật nào, người mà họ mong muốn mơi trường để họ sống theo sở thích Cũng mà ngành công nghiệp Game phát triển không ngừng, vượt qua giới hạn kéo theo phát triển cơng nghệ phục vụ cho Chỉ vài năm trước đây, có lẽ cấp độ người sử dụng chưa biết đến thiết bị thể hình ảnh 3D ngoại trừ máy trạm đắt tiền SGI dựa tảng OpenGL Tại thời điểm nói OpenGL thời kỳ phơi thai Đến máy tính cá nhân PC phổ biến hơn, OpenGL mở rộng tảng điều thực đem đến cú huých mạnh lịch sử phát triển game ứng dụng mơ khơng gian 3D Tại thời điểm đó, Windows chưa phải tảng tốt để phát triển games, nhiên họ nhanh chóng nhận lợi nhuận từ ngành cơng nghiệp Chính phiên DirectX sớm Microsoft tung Tuy nhiên thời gian đầu phổ biến tảng cịn hạn chế OpenGL thừa nhận phương thức chuẩn để phát triển đồ hoạ 3D môi trường Windows Ngày nay, hầu hết game phát triển PC bán thị trường xây dựng tảng DirectX, giúp cho game thủ tận hưởng cơng nghệ đồ hoạ tiên tiến thực giới Những cần phải có để tiếp cận công nghệ này? Những kinh nghiệm kiến thức lập trình C++ lý thuyết lập trình hướng đối tượng (OOP) giúp bạn hiểu tất giảng trình bày sách Ngoài bạn nên trang bị thêm cho vài kỹ tốn học hình hoạ, nhiên hầu hết khái niệm tốn học sử dụng giải thích chi tiết Những hiểu biết Visual Studio NET hay sản phẩm Visual Studio hữu ích Beginning DirectX9 Dịch TransTeam diễn đàn Gamedev.VN Làm để sử dụng sách hiệu quả? Quyển sách chia làm phần Phần mơ tả cở DirectX, làm để thiết lập chạy ứng dụng sử dụng tảng Phần thứ hai cung cấp cho bạn khái niệm phục vụ trình thiết kế xây dựng mơi trường 3D, kèm theo giới thiệu khái niệm 3D Direct3D Phần phần cuối xoay quanh kiến thức khác tảng DirectX xử lý âm thông qua DirectSound, lấy thông tin đầu vào từ người dùng thông qua DirectInput Quyển sách kết thúc dự án minh hoạ nhỏ với hi vọng đem đến cho bạn nhìn tồn cảnh tất các kiến thức học áp dụng cụ thể chúng Nếu bạn làm quen với môi trường DirectX viết vài ứng dụng sử dụng tảng này, bạn bỏ qua phần Tơi nghĩ tiếp cận với môi trường lập trình game DirectX nên đọc sách cách để hiểu hết khả mà DirectX đem lại Beginning DirectX9 Dịch TransTeam diễn đàn Gamedev.VN PHẦN I KIẾN THỨC NỀN TẢNG Chương DirectX gì, làm để sử dụng Chương Ví dụ sử dụng DirectX Chương Phơng nền, khung hình, hoạt cảnh Beginning DirectX9 Dịch TransTeam diễn đàn Gamedev.VN CHƯƠNG DirectX gì, Tại Làm để sử dụng DirectX thực chất hệ thống giao diện lập trình ứng dụng (API) phục vụ cho trình phát triển game tảng hệ điều hành Windows Nếu thời điểm vài năm trước, người phát triển game thường phải vật lộn với vấn đề nảy sinh từ khơng tương thích phần cứng - khơng thể phát triển sản phẩm game để tất người tận hưởng tính game Thì ngày nay, Microsoft đem tới tảng DirectX Nó cung cấp cho người phát triển game phương thức đơn nhất, tảng thư viện API “sạch” (đã chuẩn hoá) để họ viết chạy hầu hết tảng mà không cần phải lo ngại nhiều phần cứng PC Chỉ vài năm sau phiên DirectX đề xuất, số lượng game phát triển tảng Windows tăng lên cách nhanh chóng Trong chương này, đề cập tới vấn đề: DirectX Tại lại hữu dụng đến Thành phần xây dựng nên tảng DirectX API DirectX gì? DirectX tập hợp thư viện hàm API Microsoft thiết kế để cung cấp cho người phát triển game giao diện lập trình cấp thấp để liên kết tới phần cứng PC chạy hệ điều hành Windows Phiên 9.0(c), đối tượng API DirectX cung cấp khả truy cập khác tới loại phần cứng hệ thống, bao gồm hệ thống đồ hoạ, âm kết nối mạng, tất chúng xây dựng giao diện chuẩn Giao diện cho phép người phát triển viết game họ cách sử dụng tập hợp cách hàm lại với mà không cần phải quan tâm nhiều tới phần cứng mà sử dụng Beginning DirectX9 Dịch TransTeam diễn đàn Gamedev.VN Những thành phần tạo nên DirectX Hệ thống thư viện API DirectX phân chia làm nhiều thành phần nhỏ, thành phần đảm nhiệm nhiệm vụ khác hệ thống Chúng sử dụng hồn tồn độc lập với nhau, bạn cần thêm thành phần mà game bạn cần tới mà Sau danh sách thành phần đó: DirectX Graphic Thành phần đảm nhiệm tất chức kết xuất đồ hoạ hệ thống Nó cung cấp hàm API để người dùng quản lý q trình vẽ 2D 3D, ngồi hỗ trợ trình khởi tạo xác lập độ phân giải cho game bạn DirectInput Tất người dùng nhập vào quản lý hàm API thành phần Nó bao gồm khả hỗ trợ thiết bị bàn phím, chuột, gamepad, joystick Với phiên hỗ trợ thiết bị tương tác thực (force-feedback) cần lái, chân ga cho game đua tốc độ DirectPlay Khả kết nối mạng cung cấp cho hệ thống game bạn thông qua thành phần DirectPlay Những hàm phục vụ kết nối đem đến cho bạn khả phát triển ứng dụng giao tiếp với máy khác, cho phép khơng người chơi game DirectPlay đem đến cho bạn giao diện lập trình cấp cao nhằm giúp bạn tránh khỏi vấn đề khó khăn trình lập trình ứng dụng liên kết mạng DirectSound Nếu bạn muốn chèn thêm hiệu ứng âm nhạc nền, bạn cần phải sử dụng tới hàm API thành phần cung cấp Chức DirectSound cho phép bạn tải chơi nhiều file nhạc dạng WAV toàn khả điều khiển q trình chơi nhạc DirectMusic Thành phần mang đến cho bạn khả tạo nhạc “động” (tại thời điểm chương trình chạy, khơng cần phải lưu trữ sở liệu game) Nó có khả hỗ trợ hầu hết chức phần mềm chơi nhạc midi tự chạy lại theo qui trình xác lập, biến đổi âm lượng để phù hợp với hoạt cảnh game, thay đổi nhịp giai điệu nhiều chức cao cấp khác DirectShow Bạn cắt hoạt cảnh phim lồng ghép âm game thơng qua thành phần AVI, MP3, MPEG ANF số nhiều loại định dạng file mà DirectShow hỗ trợ Với DirectShow, bạn tải tất đối tượng file lên nhớ, thay vào truy cập trực tiếp liệu ổ cứng CD-ROM DirectSetup Sau game bạn hoàn thành, bạn muốn phát hành DirectSetup cung cấp cho bạn chức giúp ứng dụng tự động cài đặt phiên DirectX lên hệ thống người sử dụng Chú ý: Hệ thống đồ hoạ DirectX bao gồm toàn chức DirectDraw Direct3D Phiên DirectX 7.0 phiên cuối phân tách hai thành phần thành hai đối tượng độc lập Beginning DirectX9 Dịch TransTeam diễn đàn Gamedev.VN Tại DirectX lại cần thiết? Trước hệ điều hành Windows phát hành, lập trình viên chủ yếu phát triển game tảng hệ điều hành DOS Đấy hệ điều hành đơn nhiệm, không hỗ trợ giao diện đồ hoạ (non-GUI) cách để thực thao tác đồ hoạ truy cập trực tiếp vào phần cứng thực thi chúng Điều đem đến lợi ích vấn đề khó khăn cần giải Ta ví dụ ra, sử dụng cách truy cập trực tiếp mã game phần cứng, lập trình viên có tồn sức mạnh quyền điều khiển hệ thống, điều đem đến khả hoạt động với hiệu suất chất lượng cao hệ thống game Tuy nhiên, mặt trái vấn đề nhà phát triển game phải tự xây dựng cho thư viện hỗ trợ cho loại thiết bị phần cứng họ muốn game có khả hỗ trợ Nó bao gồm thiết bị phổ thông card âm đồ hoạ Tại thời điểm đó, khơng phải tất thiết bị tuân theo chuẩn định Chính điều làm cho trình thao tác hình đồ hoạ khó khăn đặc biệt bạn muốn phát triên game có độ phân giải 320 x 240 pixel Chỉ việc viết game sử dụng độ phân giải 640 x 480 khiến lập trình viên phải truy cập trực tiếp vào nhớ video tự quản lý tồn q trình cập nhật ghi sử lý card đồ hoạ Và họ nghĩ đến lúc cần phải tìm kiếm cách khác đơn giản hiệu Khi mà phiên Windows 3.1 thức phát hành, vấn đề chưa giải Hơn thế, Windows chạy DOS nên vơ tình làm giảm tài nguyên hệ thống giành cho game loại bỏ tồn khả truy cập trực tiếp mà nhà phát triển game hay dùng trước từ lâu Vậy hầu hết game hỗ trợ Window thời điểm chủ yếu game đánh game đơn giản khác Trong game hành động tiếp tục phát triển tảng DOS Mặc dù trước đó, Microsoft cố gắng cung cấp cho người phát triển cách cách truy cập nhanh tới thiết bị đồ hoạ thơng qua hệ thống thư viện có tên WinG Nó tiền thân DirectX hỗ trợ chức WinG thực ý tưởng hay, nhiên chưa thể đem tới cho người phát triển khả truy cập hệ thống tốt so với cách mà họ thích làm hệ điều hành DOS Chính thế, Microsoft có cải tiến bổ xung thêm nhiều chức phiên DirectX, hay biết tới với tên GameSDK (bộ công cụ phát triển game) DirectX cung cấp cho lập trình viên thư viện độc lập để phát triển, lớp trung gian game phần cứng PC Lúc trình thao tác đồ hoạ trở nên dễ dàng nhiều Tuy nhiên phiên DirectX chưa hỗ trợ nhiều dạng phần cứng khác nhau, thực thay đổi có ý nghĩa thực đáp ứng mong muốn người phát triển game Chỉ vài năm sau, họ phát hành phiên DirectX 9, phiên bổ xung tăng khả hỗ trợ công nghệ kết nối mạng, kết xuất âm thanh, hình ảnh hỗ trợ nhiều dạng thiết bị đầu vào 10