This article is intended to record my readings on computer science in the past few years and sharp my rusty LATEX skill...
Preword
Latex was my previous blog/note/report setup, to compile it to blog post and html etc. But eventually find it much cumbersome than writing markdown.
Algorithm in C++: Part I ~IV [10]
This book is very practical. It does many experiments to show the computation complexity without much mathematics proof. I’ve learnt basic ideas like FIFO, top-down dynamic programming(memorization), step selction of shell sorting and relationship between trees , loop and recursion, relationship between Batcher’s odd-even merge sort and sorting network (remind me of butterfly or sth.) etc.
Assembly Language & Win32 Assembly [12][8]
This is an excellent Chinese book on old 80x86 machine. I learnt to understand the architecture of computer. It teaches me basic ideas like: how computer startup (load bios then handle interruption); what is the interruption (how computer use this to execute hardware program); how CPU handle basic logic like loop or if-statement; Some interesting MMX command. I completed some exercise and wrote some code using debug command under DOS shell. In Win32, assembly language is not as powerful as it is in DOS, since Win32 has much more rigorous rule about program running on it and assembly can be almost replaced by C. However, this Win32 book gives me opportunities to understand the principle behind the system, such as memory page management, memory mapping and protection.
Thinking in C++ [5]
This is my Bible and seminal books on C++. It taught me C++ from a low-level or pure C level respective. I will list some notes:
· While switch statement will not behave right with multiple and complex statement in the parenthesis.
· How to handle independent static variable.
· Enum hack and Mutable, Volatile, Register keyword.
· Stringize and Token Paste in precompilation
· Can we use exit() in destructor? And what about atexit()?
· Function call rationale explanation in Page 503(or 458?).
· Virtual function and virtual table mechanism (late binding).
· Throw and its usage
· The auto_ptr template
· Differentiate abort() exit(0) and return in main.
Programming Windows 95 [9]
It covers almost any API’s for ritual usage. I learned how to use TCHAR and unicode, windows message loop, multi-thread programming in Win32, GDI, DIB and lock behavior that also appears in DX, keyboard or mouse message handling, controls message, resouces and accelerator, DLL and its implementation, and sound operation via winmm.lib.
Beginning Introduction to DX9 [7]
This book is a good beginner book for 3d game programming. It first introduce certain simple math tool set in d3dx.lib. Then it talks about the low-level resource management in DX9, buffer. Other stuffs are quite similar to OpenGL. Tool sets in DX9 make it fair simple to load any resources. It also integrates the GDI font in Win32. Mesh class in DX is worth investigation.
Design Pattern Explained [11]
As my OOP seminal book, it teaches me every objects should be responsible for themselves. I learned how to draw UML, differences between aggregation and composition, how to conquer big projects referencing a book on architecture. The core idea is encapsulation to divide the commonality and variability. CVS (commonality and variability analysis) is the most valuable thing in this book. Of course, author also introduce certain classic pattern for us, such as Decorator, Observer, Singleton, and Factories pattern.
Interactive Computer Graphics: A Top-down Approach [3]
This is computer graphics textbook using OpenGL. Its content was more modern than any other computer graphics book I had got then. It introduces OpenGL more clearly than super bible: it help me thoroughly understand the matrix multiplication and matrix stack mechanism in OpenGL (As shown in (1), OpenGL API in matrix multiplication is not as friendly as DirectX).
(1)
There is a rotation formula in Page 194. The book explains more clear about Homogeneous Transformation. Using A-buffer to do antialiasing is also inspiring. This book covers some interesting topics like depth of field, motion blur, sampling and bump map. Later, it discuss the algorithm and data structure in the computer graphics like scan conversion, hidden-surface removal, scene organization. It recommend me [2]!
OpenGL Super Bible [13][13]
It’s classic for beginner programmer. The content organization in 4th edition is similar to DX9’s introduction book [7]. However, it is comprehensive to covers image load, obj in OpenGL (vertex, shader, and buffer), and motion blur. It is a good hand-on book for me when working on OpenGL even though you have many resources available on internet.
Introduction to Algorithm [4]
Together with OCW, you would have a top class in the world at home! This is a classic book in computer science. It is well organized and mathematical rigorous. It showed me why computer science is science. It linked my math and computer knowledge. Exercise is also interesting and inspiring. I will list some exercise here:
· P287 13.3-5
Proof. Induction: n = 2. Trivial. 1 < n ≤ k, we have at least one node. Now, we have a R-B tree. Call RB-INSERT k times and result a R-B tree that has at least one RED node! if the k+1 node is added to with color[p[Z]]=BLACK. OK. if this node Z added to color[p[Z]]=RED. Z will fall into case2/case3. and case2/3 are paired and terminates. This will not change the number of RED node. the only RB-INSERT will keep at least one RED. __
· P338 15.2-3
Proof.
given n ≤ k, P(k) ≥ c2k, according to induction hypothesis when n = k + 1, P(k + 1) = ∑ i=1kP(i)P(k + 1 - i) ≥ ck22k ≥ c2k ∴ P(n) = Ω2n __
and I’m not interest to add more...It’s involving to draw in latex.
Advanced Animation with DX9 [1]
An excellent book about animation, it almost explain every details in DX’s animation class. I learned that skininfo is used to store vertex weight and bonematrix’s reference, frame can store matrix of every part indexed by skininfo. This frame will be updated every frame. Except from basic skinned animation, the book also talks about morphing and blending. It is a handy book for programmer.
Windows Game Programming Gurus [6]
This is the genesis of all my knowledge of game development. It discusses every aspects of game, including graphics, sound, AI, and network. I still remember the dirty pixel operation in DDraw (bmp loading, locking, device lost, image rotation). It gave me a lot of basic ideas about game development.
TO BE CONTINUE...
References
[1] J. Adams. Advanced Animation with DirectX (Focus on Game Development). Course Technology Press Boston, MA, United States, 2003. ISBN 1592000371.
[2] T. Akenine-Moller and E. Haines. Real-time rendering. AK, 2002. ISBN 1568811829.
[3] E. Angel. Interactive computer graphics: A Top-down Approach.
[4] TH Cormen, CE Leiserson, and RL Rivest. Introduction to Algorithm.
[5] B. Eckel. Thinking in C++. Prentice-Hall, Inc. Upper Saddle River, NJ, USA, 1995. ISBN 0139177094.
[6] A. LaMothe. Tricks of the Windows game programming gurus. Sams Indianapolis, IN, USA, 2002. ISBN 0672323699.
[7] D.F. Luna. Introduction to 3d Game Programming with DirectX 9.0. Wordware Publishing Inc., 2003.
[8] Yunbin Luo. WINDOWS 32-bit Environment, Assembly Language Programming. Electronic Industry Press, 2002. ISBN 7505380346.
[9] C. Petzold. Programming Windows 95: The Definitive Developer’s Guide to the Windows 95 API with CDROM. Microsoft Press, 1996. ISBN 1556156766.
[10] R. Sedgewick. Algorithms in C++. 2001. ISBN 020172684X.
[11] A. Shalloway and J. Trott. Design Patterns Explained: A New Perspective on Object-Oriented Design (Software Patterns Series). Addison-Wesley Professional, 2004. ISBN 0321247140.
[12] Shuang Wang. Assembly Language. TSINGHUA UNIVERSITY PRESS, 2003. ISBN 7302071950.
[13] R.S. Wright and B. Lipchak. OpenGL superbible. Sams Indianapolis, IN, USA, 2004. ISBN 0672326019.