国产精品久久久久影院嫩草,日本精品久久久久中文字幕,国产精品无码久久久久http://www.shnenglu.com/bneliao/category/8088.htmlzh-cnMon, 01 Sep 2008 00:45:30 GMTMon, 01 Sep 2008 00:45:30 GMT60數(shù)學(xué)在計(jì)算機(jī)圖形學(xué)中的應(yīng)用 zzhttp://www.shnenglu.com/bneliao/articles/60482.htmlbneliaobneliaoSat, 30 Aug 2008 20:22:00 GMThttp://www.shnenglu.com/bneliao/articles/60482.htmlhttp://www.shnenglu.com/bneliao/comments/60482.htmlhttp://www.shnenglu.com/bneliao/articles/60482.html#Feedback0http://www.shnenglu.com/bneliao/comments/commentRss/60482.htmlhttp://www.shnenglu.com/bneliao/services/trackbacks/60482.html

Mathematics for Computer Graphics

Greg Turk, August 1997

"What math should I learn in order to study computer graphics?" This is perhaps the most common general question that students ask me about computer graphics. The answer depends on how deeply you wish to go into the field. If you wish to begin to use off-the-shelf graphics programs then the answer is that you probably do not need to know very much math at all. If you wish to take an introductory course in computer graphics, then you should read the first two sections below for my recommendations (algebra, trigonometry and linear algebra). If you want some day to be a researcher in graphics then I believe that you should consider your mathematics education to be an ongoing process throughout your career.

If you do not particularly care for mathematics, is there still a chance of working in the field? Yes, a few areas within computer graphics are not much concerned with mathematical ideas. You should not give up on graphics just because you are not a math wizard. It is likely, however, that you will have more freedom in choosing research topics if you have a willingness to learn about new mathematical ideas.

There is no absolute answer to what mathematics is important in computer graphics. Different areas within the field require different mathematical techniques, and your own interests will likely lead you towards some topics and may never touch others. Below are descriptions of a number of areas in mathematics that I believe are useful in computer graphics. Do not feel that you need to be an expert in each of these areas to become a graphics researcher! I deliberately included many areas below to give a fairly broad view of the mathematical ideas used in graphics. Many researchers, however, will never find the need to look at some of the topics that I mention below.

Finally, although it should be clear from reading this, the opinions given within this document are entirely my own. It is likely that you would get a different list of topics or at least different emphases from other people who work in computer graphics. Now on to the list of topics.

Algebra and Trigonometry

High-school level algebra and trigonometry are probably the most important areas to know in order to begin to learn about computer graphics. Just about every day I need to determine one or more unknowns from a simple set of equations. Almost as often I need to perform simple trigonometry such as finding the length of the edge of some geometric figure based on other lengths and angles. Algebra and trigonometry are the subjects that will solve such day-to-day tasks in computer graphics.

What about the geometry that we learn in high school? It may come as a surprise, but our high school geometry is not very often needed for most tasks in computer graphics. The reason for this is that geometry as it is taught in many schools actually is a course in how to construct mathematical proofs. While proof construction is definitely a valuable intellectual tool, the actual theorems and proofs from your geometry class are not often used in computer graphics. If you go to graduate school in a mathematics related field (including computer graphics) then you may well find yourself proving theorems, but this is not necessary in order to start out in graphics.

If you have a good understanding of algebra and trigonometry then you are quite prepared to begin reading an introductory book in computer graphics. Most such books contain at least an abbreviated introduction to the next important area of mathematics for computer graphics, namely linear algebra.

Book recommendation:

Computer Graphics: Principles and Practice
James Foley, Andries van Dam, Steven Feiner, John Hughes
Addison-Wesley
[a huge book, but still my favorite]

Linear Algebra

The ideas of linear algebra are used throughout computer graphics. In fact, any area that concerns itself with numerical representations of geometry often will collect together numbers such as x,y,z positions into mathematical objects called vectors. Vectors and a related mathematical object called a matrix are used all the time in graphics. The language of vectors and matrices is an elegant way to describe (among other things) the way in which an object may be rotated, shifted (translated), or made larger or smaller (scaled). Linear algebra is usually offered either in an advanced high school class or in college. Anyone who wishes to work in computer graphics should eventually get a solid grounding in this subject. As I mentioned before, however, many textbooks in graphics give a reasonable introduction to this topic-- often enough to get you through a first course in graphics.

Book recommendation:

Linear Algebra and Its Applications
Gilbert Strang
Academic Press

Calculus

Knowledge of calculus is an important part of advanced computer graphics. If you plan to do research in graphics, I strongly recommend getting a basic grounding in calculus. This is true not just because it is a collection of tools that are often used in the field, but also because many researchers describe their problems and solutions in the language of calculus. In addition, a number of important mathematical areas require calculus as a prerequisite. This is the one area in mathematics in addition to basic algebra that can open the most doors for you in computer graphics in terms of your future mathematical understanding.

Calculus is the last of the topics that I will mention that is often introduced in high school. The topics to follow are almost always found in college courses.

Differential Geometry

This area of mathematics studies equations that govern the geometry of smooth curves and surfaces. If you are trying to figure out what direction is perpendicular to (points directly away from) a smooth surface (the "normal vector") then you are using differential geometry. Making a vehicle travel at a particular speed along a curved path is also differential geometry. There is a common technique in graphics for making a smooth surface appear rough known as "bump mapping", and this method draws on differential geometry. If you plan to do work with curves and surfaces for shape creation (called "modeling" in the graphics field) then you should learn at least the basics of differential geometry. Multivariable calculus is the prerequisite for this area.

Book recommendation:

Elementary Differential Geometry
Barrett O'Neill
Academic Press

Numerical Methods

Almost every time we represent and manipulate numbers in the computer we use approximate instead of exact values, and because of this there is always the possibility for errors to creep in. Moreover, there are often many different approaches to solving a given numerical problem, and some methods will be faster, more accurate or require less memory than others. The study of these issues goes by a number of names including "numerical methods" and "scientific computing". This is a very broad area, and several of the other areas of mathematics that I will mention can be considered sub-areas underneath this umbrella. These sub-areas include sampling theory, matrix equations, numerical solution of differential equations, and optimization.

Book recommendation:

Numerical Recipes in C: The Art of Scientific Computing
William Press, Saul Teukolsky, William Vetterling and Brian Flannery
Cambridge University Press
[this is a very valuable reference but is not normally used as a textbook]

Sampling Theory and Signal Processing

Over and over in computer graphics we represent some object such as an image or a surface as a collection of numbers that are stored in a regular two-dimensional array. Whenever we do this we are creating a "sampled" representation of the object. A good understanding of sampling theory is important if we are to use and to control the quality of such representations. A common issue in sampling as it applies to graphics is the jagged edges that can appear on the silhouette of an object when it is drawn on a computer screen. The appearance of such jagged edges (one form of a phenomenon known as "aliasing") is very distracting, and this can be minimized by using well-understood techniques from sampling theory. At the heart of sampling theory are concepts such as convolution, the Fourier transform, and spatial and frequency representations of functions. These ideas are also important in the fields of image and audio processing.

Book recommendation:

The Fourier Transform and Its Applications
Ronald N. Bracewell
McGraw Hill

Matrix Equations

There are a wide variety of problems that come up in computer graphics that require the numerical solution of matrix equations. Some problems that need matrix techniques include: finding the best position and orientation to match one object to another (one example of a "least squares" problem), creating a surface that drapes over a given collection of points with minimal creases (thin-plate splines), and simulation of materials such as water or cloth. Matrix formulations of problems come up often enough in graphics that I rank this area very high on my list of topics to know.

Book recommendation:

Matrix Computations
Gene Golub and Charles Van Loan
Johns Hopkins University Press

Physics

Physics is obviously a field of study in its own right and not a sub-category of mathematics. Nevertheless, physics and mathematics are closely tied to one another in several areas within computer graphics. Examples of graphics problems that involve physics include how light interacts with the surfaces of objects, how light bounces around in a complex environment, the way people and animals move, and the motion of water and wind. Knowledge of physics is important for simulating all of these phenomena. This is closely tied to solving differential equations, which I shall discuss next.

Numerical Solutions of Differential Equations

It is my belief that techniques for solving differential equations are extremely important to computer graphics. As we just discussed, much of computer graphics is devoted to simulating physical systems from the real world. How waves form in water and how an animal walks across the ground are two examples of physical simulation. Simulation of physical systems very often leads to numerical solutions of differential equations. Note that this is actually very different than symbolic solutions to differential equations. Symbolic solutions are exact answers, and usually can be found only for extremely simple sets of equations. Sometimes a college course called "Differential Equations" will only examine symbolic solutions, and this will not help much for most computer graphics problems.

In physical simulation, one breaks the world down into little pieces that are represented as large vectors. Then the relations between the parts of the world are captured in the entries in matrices. Solving the matrix equations that arise is not usually done exactly, but is instead performed by carrying out a long series of calculations that yields an approximate solution as a list of numbers. This is what numerical solutions of differential equations are about. Note that the solution of matrix equations is an intimate part of numerical solutions to differential equations.

Optimization

Quite often in computer graphics we are looking for a description of an object or a collection of objects that satisfies some desired goal. Examples include looking for the positions of lights that give a certain "feeling" to how a room is lit, figuring out how an animated character can move its limbs to carry out a particular action, and positioning shapes and text on a page so that the result does not look cluttered. Each of these examples can be stated as an optimization problem. Ten years ago there was little in the graphics literature that made use of optimization techniques, but the field is using optimization more and more in recent work. I think that optimization will continue to play an increasingly important role in computer graphics.

Probability and Statistics

There are a number of areas within computer graphics that make use of probability and/or statistics. Certainly when researchers carry out studies using human subject, they require statistical methods in order to perform the analysis of the data. Graphics related areas that often make use of human subjects include Virtual Reality and Human-Computer Interaction (HCI). In addition, many computer descriptions of the real world involve using various probabilities that a given action will occur. The probability that a tree limb will branch during growth or that a synthetic animal will decide to walk in a particular direction are two examples of this. Finally, some techniques for solving difficult equations make use of random numbers to estimate their solutions. An important example of this is a class of techniques known as Monte Carlo methods that are often used to determine how light propagates in an environment. These are just a few of the ways that probability and statistics are used in computer graphics.

Computational Geometry

Computational geometry is the study of efficient ways to represent and manipulate geometry within the computer. Typical problems include testing whether two objects collide, deciding how to break up a polygon into triangles, and finding the nearest point in a group to a given location. This area is a blend of algorithms, data structures and mathematics. Researchers in graphics who work on creating shapes (modeling) draw heavily upon this area.

Book recommendations:

Computational Geometry in C
Joseph O'Rourke
Cambridge University Press
[undergraduate text]
Computational Geometry: An Introduction
Franco Preparata and Michael Shamos
Springer-Verlag
[the classic text, somewhat dated]

Concluding Words: Applied and Pure Mathematics

One common thread to many of the mathematical topics that are associate with graphics is that they are from the applied side instead of the theoretical side of mathematics. This should not come as a surprise. Many of the problems in computer graphics are closely tied to problems that physicists and engineers have studied, and the mathematical tools of the physicist and of the engineer are overwhelmingly the tools that graphics researchers use. Most of the topics that make up theoretical ("pure") mathematics are seldom put to use in computer graphics. This should not be taken as an absolute truth, however. We should pay attention to examples from other fields: molecular biology is now drawing upon knot theory for the study of DNA dynamics, and subatomic physics makes use of abstract group theory. Who can tell when a "pure" mathematics topic will be put to use in computer graphics?

There are a few areas of mathematics that seem as though they ought to be important and yet never really play a large part in computer graphics. Perhaps the most interesting of these areas is topology. The usual one-sentence description of topology is the study of why a doughnut and a coffee cup are the same. The answer is that they are both surfaces with one hole. Here we are talking about ideas from topology. Aren't surfaces a big part of computer graphics? Yes, but it turns out that most of the ideas in topology that are useful to graphics can be learned in a first course in differential geometry. Differential geometry studies the *shapes* of surfaces, whereas topology studies things such as which parts of a surface are next to which other parts. I have seen very little topology that is put to use in graphics, and I believe that this is because much of topology is concerned with rather abstract sets, and that much of topology is far removed from the concepts in three dimensional Euclidean space that is so central to most of graphics. There are times when the formalism of topology (the symbolic notation) is a convenient way to express ideas in graphics, but the actual tools from abstract topology so seldom play a role in graphics. Study this beautiful subject for its own sake, but don't expect an immediate payoff for graphics!

I have been asked a few times whether either abstract algebra (group theory, rings, etc.) or number theory play a role in computer graphics. Not much that I have seen. These subjects, like topology, are areas that are full of beautiful ideas. Unfortunately these ideas seldom find their way into computer graphics.

Mathematics for Computer Graphics
數(shù)學(xué)在計(jì)算機(jī)圖形學(xué)中的應(yīng)用
Greg Turk, August 1997
 “學(xué)習(xí)計(jì)算機(jī)圖形學(xué)需要多少的數(shù)學(xué)?”這是初學(xué)者最經(jīng)常問的問題。答案取決于你想在計(jì)算機(jī)圖形學(xué)領(lǐng)域鉆研多深。如果僅僅使用周圍唾手可得的圖形軟件,你不需要知道多少數(shù)學(xué)知識(shí)。如果想學(xué)習(xí)計(jì)算機(jī)圖形學(xué)的入門知識(shí),我建議你讀一讀下面所寫的前兩章(代數(shù),三角學(xué)和線性代數(shù))。如果想成為一名圖形學(xué)的研究者,那么對(duì)數(shù)學(xué)的學(xué)習(xí)將是活到老,學(xué)到老。
如果你并不特別喜歡數(shù)學(xué),是否仍有在計(jì)算機(jī)圖形學(xué)領(lǐng)域工作的機(jī)會(huì)?是的,計(jì)算機(jī)圖形學(xué)的確有一些方面不需要考慮太多的數(shù)學(xué)問題。你不應(yīng)該因?yàn)閿?shù)學(xué)成績(jī)不好而放棄它。不過,如果學(xué)習(xí)了更多的數(shù)學(xué)知識(shí),似乎你將在研究課題上有更多的選擇余地。
對(duì)于在計(jì)算機(jī)圖形學(xué)中哪些數(shù)學(xué)才是重要的還沒有明確的答案。這領(lǐng)域里不同的方面要求掌握不同的數(shù)學(xué)知識(shí),也許興趣將會(huì)決定了你的方向。以下介紹我認(rèn)為對(duì)于計(jì)算機(jī)圖形學(xué)有用的數(shù)學(xué)。別以為想成為一名圖形學(xué)的研究者就必須精通各門數(shù)學(xué)!為了對(duì)用于圖形學(xué)的數(shù)學(xué)有一個(gè)全面的看法,我特地列出了很多方面。但是許多研究者從不需要考慮下面提到的數(shù)學(xué)。
最后,雖然讀了這篇文章后,你應(yīng)該會(huì)對(duì)數(shù)學(xué)在計(jì)算機(jī)圖形學(xué)中的應(yīng)用有所了解,不過這些觀點(diǎn)完全是我自己的。也許你應(yīng)該閱讀更多的此類文章,或者至少?gòu)钠渌麖氖掠?jì)算機(jī)圖形學(xué)工作的人那里了解不同的學(xué)習(xí)重點(diǎn)。現(xiàn)在開始切入正題。

代數(shù)和三角學(xué)
對(duì)于計(jì)算機(jī)圖形學(xué)的初學(xué)者來說,高中的代數(shù)和三角學(xué)可能是最重要的數(shù)學(xué)。日復(fù)一日,我從簡(jiǎn)單的方程解出一個(gè)或更多的根。我時(shí)常還要解決類似求一些幾何圖形邊長(zhǎng)的簡(jiǎn)單三角學(xué)問題。代數(shù)和三角學(xué)是計(jì)算機(jī)圖形學(xué)的最基礎(chǔ)的知識(shí)。
那么高中的幾何學(xué)怎么樣呢?可能讓人驚訝,不過在多數(shù)計(jì)算機(jī)圖形學(xué)里,高中的幾何學(xué)并不經(jīng)常被用到。原因是許多學(xué)校教的幾何學(xué)實(shí)際上是如何建立數(shù)學(xué)證明的課程。雖然證明題對(duì)提高智力顯然是有效的,但對(duì)于計(jì)算機(jī)圖形學(xué)來說,那些與幾何課有關(guān)的定理和證明并不常被用到。如果你畢業(yè)于數(shù)學(xué)相關(guān)領(lǐng)域(包括計(jì)算機(jī)圖形學(xué)),就會(huì)發(fā)現(xiàn)雖然你在證明定理,不過這對(duì)開始學(xué)習(xí)圖形學(xué)不是必要的。
如果精通代數(shù)和三角學(xué),就可以開始讀一本計(jì)算機(jī)圖形學(xué)的入門書了。下一個(gè)重要的用于計(jì)算機(jī)圖形學(xué)的數(shù)學(xué)——線性代數(shù),多數(shù)此類書籍至少包含了一個(gè)對(duì)線性代數(shù)的簡(jiǎn)要介紹。
推薦的參考書: 
Computer Graphics: Principles and Practice 
James Foley, Andries van Dam, Steven Feiner, John Hughes 
Addison-Wesley 
[雖然厚重,可是我很喜歡]

線性代數(shù)
線性代數(shù)的思想貫穿于計(jì)算機(jī)圖形學(xué)。事實(shí)上,只要牽涉到幾何數(shù)值表示法,就常常抽象出例如x,y,z坐標(biāo)之類的數(shù)值,我們稱之為矢量。圖形學(xué)自始至終離不開矢量和矩陣。用矢量和矩陣來描述旋轉(zhuǎn),平移,或者縮放是再好不過了。高中和大學(xué)都有線性代數(shù)的課程。只要想在計(jì)算機(jī)圖形學(xué)領(lǐng)域工作,就應(yīng)該打下堅(jiān)實(shí)的線性代數(shù)基礎(chǔ)。我剛才提到,許多圖形學(xué)的書都有關(guān)于線性代數(shù)的簡(jiǎn)要介紹——足夠教給你圖形學(xué)的第一門課。
推薦的參考書: 
Linear Algebra and Its Applications 
Gilbert Strang 
Academic Press

微積分學(xué) 
微積分學(xué)是高級(jí)計(jì)算機(jī)圖形學(xué)的重要成分。如果打算研究圖形學(xué),我強(qiáng)烈建議你應(yīng)該對(duì)微積分學(xué)有初步認(rèn)識(shí)。理由不僅僅是微積分學(xué)是一種很有用的工具,還有許多研究者用微積分學(xué)的術(shù)語來描述他們的問題和解決辦法。另外,在許多重要的數(shù)學(xué)領(lǐng)域,微積分學(xué)被作為進(jìn)一步學(xué)習(xí)的前提。學(xué)習(xí)了基本代數(shù)之后,微積分學(xué)又是一種能為你打開多數(shù)計(jì)算機(jī)圖形學(xué)與后繼的數(shù)學(xué)學(xué)習(xí)之門的課程。
微積分學(xué)是我介紹的最后一個(gè)中學(xué)課程,以下提及的科目幾乎全部是大學(xué)的課程。

微分幾何學(xué)
微分幾何學(xué)研究支配光滑曲線,曲面的方程組。如果你要計(jì)算出經(jīng)過某個(gè)遠(yuǎn)離曲面的點(diǎn)并垂直于曲面的矢量(法向矢量)就會(huì)用到微分幾何學(xué)。讓一輛汽車以特定速度在曲線上行駛也牽涉到微分幾何學(xué)。有一種通用的繪制光滑曲面的圖形學(xué)技術(shù),叫做“凹凸帖圖”,這個(gè)技術(shù)用到了微分幾何學(xué)。如果要著手于用曲線和曲面來創(chuàng)造形體(在圖形學(xué)里稱之為建模)你至少應(yīng)該學(xué)習(xí)微分幾何學(xué)的基礎(chǔ)。
推薦的參考書: 
Elementary Differential Geometry 
Barrett O'Neill 
Academic Press 

數(shù)值方法
幾乎任何時(shí)候,我們?cè)谟?jì)算機(jī)里用近似值代替精確值來表示和操作數(shù)值,所以計(jì)算過程總是會(huì)有誤差。而且對(duì)于給定的數(shù)值問題,常常有多種解決的方法,一些方法會(huì)更塊,更精確或者對(duì)內(nèi)存的需求更少。數(shù)值方法研究的對(duì)象包括“計(jì)算方法”和“科學(xué)計(jì)算”等等。這是一個(gè)很廣闊的領(lǐng)域,而且我將提及的其他幾門數(shù)學(xué)其實(shí)是數(shù)值方法的一些分支。這些分支包括抽樣法理論,矩陣方程組,數(shù)值微分方程組和最優(yōu)化。
推薦的參考書: 
Numerical Recipes in C: The Art of Scientific Computing 
William Press, Saul Teukolsky, William Vetterling and Brian Flannery 
Cambridge University Press 
[這本參考書很有價(jià)值可是很少作為教材使用]

抽樣法理論和信號(hào)處理
在計(jì)算機(jī)圖形學(xué)里我們反復(fù)使用儲(chǔ)存在正規(guī)二維數(shù)組里的數(shù)字集合來表示一些對(duì)象,例如圖片和曲面。這時(shí),我們就要用抽樣法來表示這些對(duì)象。如果要控制這些對(duì)象的品質(zhì),抽樣法理論就變得尤為重要。抽樣法應(yīng)用于圖形學(xué)的常見例子是當(dāng)物體被繪制在屏幕上時(shí),它的輪廓呈現(xiàn)鋸齒狀的邊緣。這鋸齒狀的邊緣(被認(rèn)為是“混淆”現(xiàn)象)是非常讓人分散注意力的,用抽樣法中著名的技術(shù)例如回旋,傅立葉變換,空間和頻率的函數(shù)表示就能把這個(gè)現(xiàn)象減少到最小。這些思想在圖像和音頻處理領(lǐng)域是同樣重要的。
推薦的參考書: 
The Fourier Transform and Its Applications 
Ronald N. Bracewell 
McGraw Hill

矩陣方程組
計(jì)算機(jī)圖形學(xué)的許多問題要用到矩陣方程組的數(shù)值解法。一些涉及矩陣的問題包括:找出最好的位置與方向以使對(duì)象們互相匹配(最小二乘法),創(chuàng)建一個(gè)覆蓋所給點(diǎn)集的曲面,并使皺折程度最?。ū“鍢訔l算法),還有材質(zhì)模擬,例如水和衣服等。在圖形學(xué)里矩陣表述相當(dāng)流行,因此在用于圖形學(xué)的數(shù)學(xué)中我對(duì)矩陣方程組的評(píng)價(jià)是很高的。
推薦的參考書: 
Matrix Computations 
Gene Golub and Charles Van Loan 
Johns Hopkins University Press

物理學(xué)
物理學(xué)顯然不是數(shù)學(xué)的分支,它是自成一家的學(xué)科。但是在計(jì)算機(jī)圖形學(xué)的某些領(lǐng)域,物理學(xué)和數(shù)學(xué)是緊密聯(lián)系的。在圖形學(xué)里,牽涉物理學(xué)的問題包括光與物體的表面是怎樣互相影響的,人與動(dòng)物的移動(dòng)方式,水與空氣的流動(dòng)。為了模擬這些自然現(xiàn)象,物理學(xué)的知識(shí)是必不可少的。這和解微分方程緊密聯(lián)系,我將會(huì)在下一節(jié)提到微分方程。

微分方程的數(shù)值解法
我相信對(duì)于計(jì)算機(jī)圖形學(xué)來說,解微分方程的技巧是非常重要的。像我們剛才討論的,計(jì)算機(jī)圖形學(xué)致力于模擬源于真實(shí)世界的物理系統(tǒng)。波浪是怎樣在水里形成的,動(dòng)物是怎樣在地面上行走的,這就是兩個(gè)模擬物理系統(tǒng)的例子。模擬物理系統(tǒng)的問題經(jīng)常就是怎樣解微分方程的數(shù)值解。請(qǐng)注意,微分方程的數(shù)值解法與微分方程的符號(hào)解法是有很大差異的。符號(hào)解法求出沒有誤差的解,而且時(shí)常只用于一些非常簡(jiǎn)單的方程。有時(shí)大學(xué)課程里的“微分方程”只教符號(hào)解法,不過這并不會(huì)對(duì)多數(shù)計(jì)算機(jī)圖形學(xué)的問題有幫助。
在對(duì)物理系統(tǒng)的模擬中,我們把世界細(xì)分為許多表示成矢量的小元素。然后這些元素之間的關(guān)系就可以用矩陣來描述。雖然要處理的矩陣方程組往往沒有很精確的解,但是取而代之的是執(zhí)行了一系列的計(jì)算,這些計(jì)算產(chǎn)生一個(gè)表示成數(shù)列的近似解。這就是微分方程的數(shù)值解法。請(qǐng)注意,矩陣方程的解法與微分方程數(shù)值解法的關(guān)系是很密切的。 

最優(yōu)化
在計(jì)算機(jī)圖形學(xué)里,我們常常為了期望的目標(biāo)尋求一種合適的描述對(duì)象或者對(duì)象集的方法。例如安排燈的位置使得房間的照明看起來有種特殊的“感覺”,動(dòng)畫里的人物要怎樣活動(dòng)四肢才能實(shí)現(xiàn)一個(gè)特殊的動(dòng)作,怎樣排版才不會(huì)使頁面混亂。以上這些例子可以歸結(jié)為最優(yōu)化問題。十年前的計(jì)算機(jī)圖形學(xué)幾乎沒有最優(yōu)化技術(shù)的文獻(xiàn),不過最近這個(gè)領(lǐng)域越來越重視最優(yōu)化理論。我認(rèn)為在計(jì)算機(jī)圖形學(xué)里,最優(yōu)化的重要性將會(huì)日益增加。

概率論與統(tǒng)計(jì)學(xué)
計(jì)算機(jī)圖形學(xué)的許多領(lǐng)域都要用到概率論與統(tǒng)計(jì)學(xué)。當(dāng)研究者涉足人類學(xué)科時(shí),他們當(dāng)然需要統(tǒng)計(jì)學(xué)來分析數(shù)據(jù)。圖形學(xué)相關(guān)領(lǐng)域涉及人類學(xué)科,例如虛擬現(xiàn)實(shí)和人機(jī)交互(HCI)。另外,許多用計(jì)算機(jī)描繪真實(shí)世界的問題牽涉到各種未知事件的概率。兩個(gè)例子:一棵成長(zhǎng)期的樹,它的樹枝分杈的概率;虛擬的動(dòng)物如何決定它的行走路線。最后,一些解高難度方程組的技巧用了隨機(jī)數(shù)來估計(jì)方程組的解。重要的例子:蒙特卡羅方法經(jīng)常用于光如何傳播的問題。以上僅是一部分在計(jì)算機(jī)圖形學(xué)里使用概率論和統(tǒng)計(jì)學(xué)的方法。

計(jì)算幾何學(xué)
計(jì)算幾何學(xué)研究如何用計(jì)算機(jī)高效地表示與操作幾何體。典型問題如,碰撞檢測(cè),把多邊形分解為三角形,找出最靠近某個(gè)位置的點(diǎn),這個(gè)學(xué)科包括了運(yùn)算法則,數(shù)據(jù)結(jié)構(gòu)和數(shù)學(xué)。圖形學(xué)的研究者,只要涉足創(chuàng)建形體(建模),就要大量用到計(jì)算幾何學(xué)。
推薦的參考書: 
Computational Geometry in C 
Joseph O'Rourke 
Cambridge University Press 
[大學(xué)教材] 
Computational Geometry: An Introduction 
Franco Preparata and Michael Shamos 
Springer-Verlag 
[很經(jīng)典,不過有點(diǎn)舊了]

總結(jié):數(shù)學(xué)應(yīng)用和數(shù)學(xué)理論
對(duì)于圖形學(xué)來說,以上提到的許多數(shù)學(xué)學(xué)科都有個(gè)共同點(diǎn):比起這些數(shù)學(xué)的理論價(jià)值,我們更傾向于發(fā)掘它們的應(yīng)用價(jià)值。不要驚訝。圖形學(xué)的許多問題和物理學(xué)者與工程師們研究的問題是緊密聯(lián)系的,并且物理學(xué)者與工程師們使用的數(shù)學(xué)工具正是圖形學(xué)研究者們使用的。多數(shù)研究純數(shù)學(xué)理論的學(xué)科從不被用于計(jì)算機(jī)圖形學(xué)。不過這不是絕對(duì)的。請(qǐng)注意這些特例:分子生物學(xué)正利用節(jié)理論來研究DNA分子動(dòng)力學(xué),亞原子物理學(xué)用到了抽象群論。也許有一天,純數(shù)學(xué)理論也能推動(dòng)計(jì)算機(jī)圖形學(xué)的發(fā)展,誰知道呢?
有些看來重要的數(shù)學(xué)實(shí)際上在計(jì)算機(jī)圖形學(xué)里不常被用到。可能拓?fù)鋵W(xué)是此類數(shù)學(xué)中最有意思的。用一句話來形容拓?fù)鋵W(xué),它研究油炸圈餅與咖啡杯為什么在本質(zhì)上是相同的。答案是他們都是只有一個(gè)洞的曲面。我們來討論一下拓?fù)鋵W(xué)的思想。雖然曲面是計(jì)算機(jī)圖形學(xué)的重要成分,不過微分幾何學(xué)的課程已經(jīng)涵蓋了多數(shù)對(duì)圖形學(xué)有用的拓?fù)鋵W(xué)知識(shí)。微分幾何學(xué)研究曲面的造型,可是拓?fù)鋵W(xué)研究曲面的相鄰關(guān)系。我覺得拓?fù)鋵W(xué)對(duì)于圖形學(xué)來說幾乎沒用,這是由于拓?fù)鋵W(xué)關(guān)心抽象的事物,而且拓?fù)鋵W(xué)遠(yuǎn)離了多數(shù)圖形學(xué)的核心——三維歐氏空間的概念。對(duì)于圖形學(xué)來說,拓?fù)鋵W(xué)的形式(符號(hào)表示法)是表達(dá)思想的簡(jiǎn)便方法,不過圖形學(xué)很少用到抽象拓?fù)鋵W(xué)的實(shí)際工具。對(duì)圖形學(xué)來說,拓?fù)鋵W(xué)像一個(gè)好看的花瓶,不過別指望它能立即帶給你回報(bào)。
有人曾經(jīng)這么問我,計(jì)算機(jī)圖形學(xué)是否用到了抽象代數(shù)(群論,環(huán),等等….)或者數(shù)論。我沒怎么遇到過。和拓?fù)鋵W(xué)一樣,這些學(xué)科有很多美好的思想。可是很不幸,這些思想很少用于計(jì)算機(jī)圖形學(xué)。
--The End--

[小鵬翻譯 email: rggg_clp@163.com]





]]>
OpenGL開發(fā)庫(kù)的介紹zzhttp://www.shnenglu.com/bneliao/articles/60480.htmlbneliaobneliaoSat, 30 Aug 2008 19:56:00 GMThttp://www.shnenglu.com/bneliao/articles/60480.htmlhttp://www.shnenglu.com/bneliao/comments/60480.htmlhttp://www.shnenglu.com/bneliao/articles/60480.html#Feedback0http://www.shnenglu.com/bneliao/comments/commentRss/60480.htmlhttp://www.shnenglu.com/bneliao/services/trackbacks/60480.html

開發(fā)基于OpenGL的應(yīng)用程序,必須先了解OpenGL的庫(kù)函數(shù)。它采用C語言風(fēng)格,提供大量的函數(shù)來進(jìn)行圖形的處理和顯示。OpenGL庫(kù)函數(shù)的命名方式非常有規(guī)律。所有OpenGL函數(shù)采用了以下格式:

<庫(kù)前綴><根命令><可選的參數(shù)個(gè)數(shù)><可選的參數(shù)類型>

  庫(kù)前綴有g(shù)l、glu、aux、glut、wgl、glx、agl等等,分別表示該函數(shù)屬于OpenGL那個(gè)開 發(fā)庫(kù),從函數(shù)名后面中還可以看出需要多少個(gè)參數(shù)以及參數(shù)的類型。I代表int型,f代表float型,d代表double型,u代表無符號(hào)整型。例如 glVertex3fv()表示了該函數(shù)屬于gl庫(kù),參數(shù)是三個(gè)float型參數(shù)指針。我們用glVertex*()

來表示這一類函數(shù)。

 

  OpenGL函數(shù)庫(kù)相關(guān)的API有核心庫(kù)(gl)、實(shí)用庫(kù)(glu)、輔助庫(kù)(aux)、實(shí)用工具庫(kù)(glut)、窗口庫(kù)(glx、 agl、wgl)和擴(kuò)展函數(shù)庫(kù)等。從圖可以看出,gl是核心,glu是對(duì)gl的部分封裝。glx、agl、wgl 是針對(duì)不同窗口系統(tǒng)的函數(shù)。glut是為跨平臺(tái)的OpenGL程序的工具包,比aux功能強(qiáng)大。擴(kuò)展函數(shù)庫(kù)是硬件廠商為實(shí)現(xiàn)硬件更新利用OpenGL的擴(kuò) 展機(jī)制開發(fā)的函數(shù)。下面逐一對(duì)這些庫(kù)進(jìn)行詳細(xì)介紹。

1.OpenGL核心庫(kù)

  核心庫(kù)包含有115個(gè)函數(shù),函數(shù)名的前綴為gl。這部分函數(shù)用于常規(guī)的、核心的圖形處理。此函數(shù)由gl.dll來負(fù)責(zé)解釋執(zhí)行。由于許多函數(shù)可以接收不同數(shù)以下幾類。據(jù)類型的參數(shù),因此派生出來的函數(shù)原形多達(dá)300多個(gè)。核心庫(kù)中的函數(shù)主要可以分為以下幾類函數(shù):

  • 繪制基本幾何圖元的函數(shù):glBegain()、glEnd()、glNormal*()、glVertex*();
  • 矩陣操作、幾何變換和投影變換的函數(shù):如矩陣入棧函數(shù)glPushMatrix(),矩陣出棧函數(shù)glPopMatrix(),裝載矩陣函數(shù) glLoadMatrix(),矩陣相乘函數(shù)glMultMatrix(),當(dāng)前矩陣函數(shù)glMatrixMode()和矩陣標(biāo)準(zhǔn)化函數(shù) glLoadIdentity(),幾何變換函數(shù)glTranslate*()、glRotate*()和glScale*(),投影變換函數(shù) glOrtho()、glFrustum()和視口變換函數(shù)glViewport();
  • 顏色、光照和材質(zhì)的函數(shù):如設(shè)置顏色模式函數(shù)glColor*()、glIndex*(),設(shè)置光照效果的函數(shù)glLight*() 、glLightModel*()和設(shè)置材質(zhì)效果函數(shù)glMaterial();
  • 顯示列表函數(shù):主要有創(chuàng)建、結(jié)束、生成、刪除和調(diào)用顯示列表的函數(shù)glNewList()、glEndList()、glGenLists()、glCallList()和glDeleteLists();
  • 紋理映射函數(shù):主要有一維紋理函數(shù)glTexImage1D()、二維紋理函數(shù)glTexImage2D()、設(shè)置紋理參數(shù)、紋理環(huán)境和紋理坐標(biāo)的函數(shù)glTexParameter*()、glTexEnv*()和glTetCoord*();
  • 特殊效果函數(shù):融合函數(shù)glBlendFunc()、反走樣函數(shù)glHint()和霧化效果glFog*();
  • 光柵化、象素操作函數(shù):如象素位置glRasterPos*()、線型寬度glLineWidth()、多邊形繪制模式glPolygonMode(),讀取象素glReadPixel()、復(fù)制象素glCopyPixel();
  • 選擇與反饋函數(shù):主要有渲染模式glRenderMode()、選擇緩沖區(qū)glSelectBuffer()和反饋緩沖區(qū)glFeedbackBuffer();
  • 曲線與曲面的繪制函數(shù):生成曲線或曲面的函數(shù)glMap*()、glMapGrid*(),求值器的函數(shù)glEvalCoord*() glEvalMesh*();
  • 狀態(tài)設(shè)置與查詢函數(shù):glGet*()、glEnable()、glGetError()。

2.OpenGL實(shí)用庫(kù)The OpenGL Utility Library (GLU)

   包含有43個(gè)函數(shù),函數(shù)名的前綴為glu。OpenGL提供了強(qiáng)大的但是為數(shù)不多的繪圖命令,所有較復(fù)雜的繪圖都必須從點(diǎn)、線、面開始。Glu 為了減輕繁重的編程工作,封裝了OpenGL函數(shù),Glu函數(shù)通過調(diào)用核心庫(kù)的函數(shù),為開發(fā)者提供相對(duì)簡(jiǎn)單的用法,實(shí)現(xiàn)一些較為復(fù)雜的操作。此函數(shù)由 glu.dll來負(fù)責(zé)解釋執(zhí)行。OpenGL中的核心庫(kù)和實(shí)用庫(kù)可以在所有的OpenGL平臺(tái)上運(yùn)行。主要包括了以下幾種:

  • 輔助紋理貼圖函數(shù):gluScaleImage() 、gluBuild1Dmipmaps()、gluBuild2Dmipmaps();
  • 坐標(biāo)轉(zhuǎn)換和投影變換函數(shù):定義投影方式函數(shù)gluPerspective()、gluOrtho2D() 、gluLookAt(),拾取投影視景體函數(shù)gluPickMatrix(),投影矩陣計(jì)算gluProject()和gluUnProject();
  • 多邊形鑲嵌工具:gluNewTess()、gluDeleteTess()、gluTessCallback()、gluBeginPolygon()、gluTessVertex()、gluNextContour()、gluEndPolygon();
  • 二次曲面繪制工具,主要有繪制球面、錐面、柱面、圓環(huán)面gluNewQuadric()、gluSphere()、gluCylinder()、gluDisk()、gluPartialDisk()、gluDeleteQuadric();
  • 非均勻有理B樣條繪制工具:主要用來定義和繪制Nurbs曲線和曲面,包括gluNewNurbsRenderer()、 gluNurbsCurve()、gluBeginSurface()、gluEndSurface()、gluBeginCurve()、 gluNurbsProperty();
  • 錯(cuò)誤反饋工具:獲取出錯(cuò)信息的字符串gluErrorString()。

3.OpenGL輔助庫(kù)

   包含有31個(gè)函數(shù),函數(shù)名前綴為aux。這部分函數(shù)提供窗口管理、輸入輸出處理以及繪制一些簡(jiǎn)單三維物體。此函數(shù)由glaux.dll來負(fù)責(zé)解釋執(zhí)行。 創(chuàng)建aux庫(kù)是為了學(xué)習(xí)和編寫OpenGL程序,它更像是一個(gè)用于測(cè)試創(chuàng)意的預(yù)備基礎(chǔ)接管。Aux庫(kù)在windows實(shí)現(xiàn)有很多錯(cuò)誤,因此很容易導(dǎo)致頻繁 的崩潰。在跨平臺(tái)的編程實(shí)例和演示中,aux很大程度上已經(jīng)被glut庫(kù)取代。OpenGL中的輔助庫(kù)不能在所有的OpenGL平臺(tái)上運(yùn)行。

  輔助庫(kù)函數(shù)主要包括以下幾類:

  • 窗口初始化和退出函數(shù):auxInitDisplayMode()和auxInitPosition();
  • 窗口處理和時(shí)間輸入函數(shù):auxReshapeFunc()、auxKeyFunc()和auxMouseFunc();
  • 顏色索引裝入函數(shù):auxSetOneColor();
  • 三 維物體繪制函數(shù):包括了兩種形式網(wǎng)狀體和實(shí)心體,如繪制立方體auxWireCube()和 auxSolidCube()。這里以網(wǎng)狀體為例,長(zhǎng)方體auxWireBox()、環(huán)形圓紋面auxWireTorus()、圓柱 auxWireCylinder()、二十面體auxWireIcosahedron()、八面體auxWireOctahedron()、四面體 auxWireTetrahedron()、十二面體auxWireDodecahedron()、圓錐體auxWireCone()和茶壺 auxWireTeapot();
  • 背景過程管理函數(shù):auxIdleFunc();
  • 程序運(yùn)行函數(shù):auxMainLoop()。

4.OpenGL工具庫(kù) OpenGL Utility Toolkit

   包含大約30多個(gè)函數(shù),函數(shù)名前綴為glut。glut是不依賴于窗口平臺(tái)的OpenGL工具包,由Mark KLilgrad在SGI編寫(現(xiàn)在在Nvidia),目的是隱藏不同窗口平臺(tái)API的復(fù)雜度。 函數(shù)以glut開頭,它們作為aux庫(kù)功能更強(qiáng)的替代品,提供更為復(fù)雜的繪制功能,此函數(shù)由glut.dll來負(fù)責(zé)解釋執(zhí)行。由于glut中的窗口管理函 數(shù)是不依賴于運(yùn)行環(huán)境的,因此OpenGL中的工具庫(kù)可以在X-Window, Windows NT, OS/2等系統(tǒng)下運(yùn)行,特別適合于開發(fā)不需要復(fù)雜界面的OpenGL示例程序。對(duì)于有經(jīng)驗(yàn)的程序員來說,一般先用glut理順3D圖形代碼,然后再集成為 完整的應(yīng)用程序。

  這部分函數(shù)主要包括:

  • 窗口操作函數(shù):窗口初始化、窗口大小、窗口位置函數(shù)等[glutInit()、glutInitDisplayMode()、glutInitWindowSize()、glutInitWindowPosition()];
  • 回調(diào)函數(shù):響應(yīng)刷新消息、鍵盤消息、鼠標(biāo)消息、定時(shí)器函數(shù)[GlutDisplayFunc()、glutPostRedisplay()、 glutReshapeFunc()、glutTimerFunc()、glutKeyboardFunc()、glutMouseFunc()];
  • 創(chuàng)建復(fù)雜的三維物體:這些和aux庫(kù)的函數(shù)功能相同;
  • 菜單函數(shù):創(chuàng)建添加菜單的函數(shù)GlutCreateMenu()、glutSetMenu()、glutAddMenuEntry()、glutAddSubMenu()和glutAttachMenu();
  • 程序運(yùn)行函數(shù):glutMainLoop()。

5.Windows專用庫(kù)

  針對(duì)windows平臺(tái)的擴(kuò)展,包含有16個(gè)函數(shù),函數(shù)名前綴為wgl。這部分函數(shù)主要用于連接OpenGL和Windows ,以彌補(bǔ)OpenGL在文本方面的不足。   Windows專用庫(kù)只能用于Windows環(huán)境中。

  這類函數(shù)主要包括以下幾類:

  • 繪圖上下文相關(guān)函數(shù):wglCreateContext()、wglDeleteContext()、wglGetCurrentContent()、wglGetCurrentDC()、wglDeleteContent();
  • 文字和文本處理函數(shù):wglUseFontBitmaps()、wglUseFontOutlines();
  • 覆蓋層、地層和主平面層處理函數(shù):wglCopyContext()、wglCreateLayerPlane()、wglDescribeLayerPlane()、wglReakizeLayerPlatte();
  • 其他函數(shù):wglShareLists()、wglGetProcAddress()。

6.Win32 API函數(shù)庫(kù)

  包含有6個(gè)函數(shù),函數(shù)名無專用前綴,是win32擴(kuò)展函數(shù)。這部分函數(shù)主要用于處理像素存儲(chǔ)格式和雙幀緩存;這6個(gè)函數(shù)將替換Windows GDI中原有的同樣的函數(shù)。Win32API函數(shù)庫(kù)只能用于Windows 95/98/NT環(huán)境中。

7.X窗口專用庫(kù)

  是針對(duì)Unix和Linux的擴(kuò)展函數(shù)。包括渲染上下文、繪制圖元、顯示列表、紋理貼圖等;

  • 初始化:glXQueryExtension();
  • 渲染上下文函數(shù):glXCreateContext()、glXDestroyContext()、glXCopyContext()、glXMakeCurrent()、glXCreateGLXPixmap();
  • 執(zhí)行:glXWaitGL()、glXWaitX();
  • 緩沖區(qū)和字體:glXSwapBuffers()、glXUseXFont()。

8.其他擴(kuò)展庫(kù)

   這些函數(shù)可能是新的OpenGL函數(shù),并沒有在標(biāo)準(zhǔn)OpenGL庫(kù)中實(shí)現(xiàn),或者它們是用來擴(kuò)展已存在的OpenGL函數(shù)的功能。和glu、glx和 wgl一樣,這些OpenGL擴(kuò)展是由硬件廠商和廠商組織開發(fā)的。OpenGL擴(kuò)展(OpenGL Extention)包含了大量的擴(kuò)展API函數(shù)。

   隨著硬件的更新,硬件廠商首先向SGI申請(qǐng)登記新的擴(kuò)展,編寫規(guī)格說明書(specification)。然后按照說明書進(jìn)行開發(fā)擴(kuò)展程序。不同的 OpenGL實(shí)現(xiàn)(OpenGL Implementation)支持的擴(kuò)展可能不一樣,只有隨著某一擴(kuò)展的推廣與應(yīng)用以及硬件技術(shù)的提高該擴(kuò)展才會(huì)在所有的OpenGL實(shí)現(xiàn)中被給予支 持,從而最終成為OpenGL標(biāo)準(zhǔn)庫(kù)的一部分。擴(kuò)展由SGI維護(hù),在SGI網(wǎng)站上列出了目前公開的已注冊(cè)的擴(kuò)展及其官方說明書。擴(kuò)展源由擴(kuò)展函數(shù)的后綴來 指明(或使用擴(kuò)展常量后綴)。例如,后綴WIN表明一個(gè)符合Windows規(guī)范的擴(kuò)展,EXT或ARB后綴表明該擴(kuò)展由多個(gè)賣主定義。

下面給出OpenGL官方規(guī)定的命名規(guī)則:

  • ARB – OpenGL Architecture Review Board正式核準(zhǔn)的擴(kuò)展,往往由廠商開發(fā)的擴(kuò)展發(fā)展而來,如果同時(shí)存在廠商開發(fā)的擴(kuò)展和ARB擴(kuò)展,應(yīng)該優(yōu)先使用ARB擴(kuò)展;
  • EXT – 多家OpenGL廠商同意支持的擴(kuò)展;
  • HP – Hewlett-Packard 惠普;
  • IBM – International Business Machines ;
  • KTX – Kinetix, maker of 3D Studio Max ;
  • INTEL – Intel 公司;
  • NV – NVIDIA 公司;
  • MESA – Brian Paul’s freeware portable OpenGL implementation ;
  • SGI – Silicon Graphics公司開發(fā)的擴(kuò)展;
  • SGIX – Silicon Graphics (experimental) 公司開發(fā)的實(shí)驗(yàn)性擴(kuò)展;
  • SUN – Sun Microsystems;
  • WIN – Microsoft 。

  由于OpenGL擴(kuò)展在針對(duì)不同平臺(tái)和不同驅(qū)動(dòng),OpenGL不可能把所有的接口程序全部放到gl.h、glx.h、wgl.h中,而是將這些函數(shù)頭放在了glext.h、glxext.h和wglext.h中。這些擴(kuò)展被看作時(shí)OpenGL核心庫(kù)規(guī)范的增加和修改。



]]>
zz白話說學(xué)計(jì)算機(jī)圖形學(xué)http://www.shnenglu.com/bneliao/articles/60210.htmlbneliaobneliaoWed, 27 Aug 2008 20:57:00 GMThttp://www.shnenglu.com/bneliao/articles/60210.htmlhttp://www.shnenglu.com/bneliao/comments/60210.htmlhttp://www.shnenglu.com/bneliao/articles/60210.html#Feedback0http://www.shnenglu.com/bneliao/comments/commentRss/60210.htmlhttp://www.shnenglu.com/bneliao/services/trackbacks/60210.html一個(gè)很好的學(xué)習(xí)途徑就是國(guó)外大學(xué)開的CG的課程,standford,unc,unm,waterloo等等,等等, 一堆大學(xué),都可以下到課件,以及相關(guān)的論文,standford的“real time graphics architecture”可是kurt Akeley開的哦。
另外就是source code,包括mesa,standford的glsim,還有人用c sharp做的csgl等,也不少。這些東西很值得細(xì)細(xì)研究,只是很花時(shí)間啊。
我也是才學(xué)這方面的,不過我覺得方法上面還是top-down的方法好些,對(duì)一些東西,有感性認(rèn)識(shí)了,再鉆下去會(huì)比較好。

【引言】
什么是計(jì)算機(jī)圖形學(xué)? 本文盡量避免給它做嚴(yán)格的定義,但是通常來說,計(jì)算機(jī)圖形學(xué)是數(shù)字圖象處理的逆過程,這只是一個(gè)不確切的定義,后面我們會(huì)看到,實(shí)際上,計(jì)算機(jī)圖形學(xué)、數(shù)字圖象處理和計(jì)算機(jī)視覺在很多地方的區(qū)別不是非常清晰的,很多概念是相通的。
計(jì)算機(jī)圖形學(xué)是用計(jì)算機(jī)來畫東西的學(xué)科,數(shù)字圖象處理是把外界獲得的圖象用計(jì)算機(jī)進(jìn)行處理的學(xué)科。在法國(guó),圖形圖象是一門課程。
如何學(xué)習(xí)計(jì)算機(jī)圖形學(xué)呢?除了計(jì)算機(jī)圖形學(xué)的基礎(chǔ)知識(shí)以外,你還需要有以下的知識(shí),你懂的越多,當(dāng)然做的越好。
* 英語, 你一定要把英語學(xué)好,如果你想學(xué)習(xí)計(jì)算機(jī)圖形學(xué)的話,盡量看英文的書籍和資料
* 數(shù)學(xué), 計(jì)算機(jī)圖形學(xué)里面的數(shù)學(xué)用的比較多,,我們可以列舉一些常用的:
高等數(shù)學(xué),數(shù)值分析,微分幾何,拓?fù)洌怕剩?插值理論,(偏)微分方程…
* 物理, 如果你要進(jìn)行基于物理的建模,一些物理理論是要學(xué)習(xí)的:
力學(xué)(運(yùn)動(dòng)學(xué),動(dòng)力學(xué),流體力學(xué)…),光學(xué),有限元…
* 編程語言: C或C++是計(jì)算機(jī)圖形學(xué)最通用的‘普通話’,
* 數(shù)據(jù)結(jié)構(gòu): 你需要數(shù)據(jù)結(jié)構(gòu)來描述你的圖形對(duì)象,除了通用的鏈表、樹等數(shù)據(jù)結(jié)構(gòu)外,圖形學(xué)還有自己特殊的數(shù)據(jù)結(jié)構(gòu)
* 其他類別: 有的時(shí)候你需要其他學(xué)科的知識(shí),根據(jù)你的需要去學(xué)習(xí)吧

上面列舉的不是你必須學(xué)習(xí)的東西,而是計(jì)算機(jī)圖形學(xué)可能會(huì)用到的東西,一定要記住,不要指望通過一本教材就學(xué)會(huì)計(jì)算機(jī)圖形學(xué),它比你想象的要復(fù)雜的多。

【圖形學(xué)的問題】
每個(gè)學(xué)科都有自己學(xué)科的特定問題,圖形學(xué)要解決的是如何畫出圖來,得到需要的效果,當(dāng)然這是圖形學(xué)最大的一個(gè)問題。

在開始學(xué)習(xí)計(jì)算機(jī)圖形學(xué)的時(shí)候,找一本簡(jiǎn)單的書看,對(duì)計(jì)算機(jī)圖形學(xué)有個(gè)大概的認(rèn)識(shí),你就可以開始圖形學(xué)之旅了:

OpenGL Programming Guide: The Official Guide to Learning OpenGL, Version 1.4, Fourth Edition
OpenGL SuperBible (3rd Edition)

是比較好的學(xué)習(xí)計(jì)算機(jī)圖形學(xué)的入門教材,在練中去學(xué),一開始就去啃Foley的
Computer Graphics: Principles and Practice, Second Edition in C
不是好主意,會(huì)看的一頭霧水,一本什么都講的書的結(jié)果往往是什么都沒講清楚。
當(dāng)你把OpenGL的基本內(nèi)容掌握之后,你對(duì)圖形學(xué)就有了大概的了解了。

那么下面你可以來學(xué)習(xí)一下計(jì)算機(jī)圖形學(xué)的數(shù)據(jù)結(jié)構(gòu)和算法,下面的書比較適合:
Joseph O'Rourke 的Computational Geometry in C,書里面有C的源代碼,講述簡(jiǎn)單,清晰,適合程序員學(xué)習(xí)。

總的來說,計(jì)算機(jī)圖形學(xué)涉及到2大部分:建模和渲染
(1) 建模
你想畫一個(gè)東西,首先要有它的幾何模型,那么這個(gè)幾何模型從什么地方來呢?下面的書很不錯(cuò)的:
Gerald Farin 的Curves and Surfaces for CAGD: A Practical Guide
這本書就有一點(diǎn)的難度了,呵呵,要努力看啊。這本書算是CAGD (計(jì)算機(jī)輔助幾何設(shè)計(jì))的經(jīng)典圖書,CAGD方面的全貌,還有2本很好的講述曲面的書Bezier和Nurbs的書
Les A. Piegl, Wayne Tiller 的The Nurbs Book
書里面有NURBS曲線、曲面的程序偽代碼,很容易改成C的,書講的通俗、易懂,但是你要有耐心看的:)

《曲線與曲面的數(shù)學(xué)》
這本書是法國(guó)人寫的中文翻譯版,里面還有Bezie本人寫的序J,翻譯的很不錯(cuò)的,看了你就掌握Bezier曲面技術(shù)了。
還有其他的一些造型技術(shù),比如:
隱式曲面(Implicit Surface)的造型:
就是用函數(shù)形式為F( x ,y ,z ) = 0的曲面進(jìn)行造型,這樣的造型技術(shù)適合描述動(dòng)物器官一樣的肉乎乎的東西,有2本書推薦大家:
Jules Bloomenthal編輯的Introduction to Implicit Surfaces,是一本專著,講述了Implicit Surface建模型(Modeling),面片化(Polygonization),渲染(Rendering)的問題。
Luiz Velho 的 Implicit Objects Computer Graphics 也是一本專著,講述更新的一些進(jìn)展。

細(xì)分曲面(Subdivision Surface)造型
當(dāng)用NURBS做造型的時(shí)候,曲面拼接是復(fù)雜的問題,在動(dòng)畫的時(shí)候,可能產(chǎn)生撕裂或者褶皺,Subdivision Surface用來解決這個(gè)問題。
Joe Warren的Subdivision Methods for Geometric Design: A Constructive Approach就是這方面的專著。

從實(shí)際物體中得到造型,現(xiàn)在的技術(shù)可以用三維掃描儀得到物體表面的點(diǎn),然后根據(jù)這些點(diǎn)把物體的表面計(jì)算出來,稱為重建(Reconstruction),因?yàn)檫@些技術(shù)之在文章中論述,所以我們省略對(duì)它的描述。
在你的幾何模型做好之后,有一些問題需要對(duì)這個(gè)模型進(jìn)一步處理,得到適合的模型,當(dāng)面片很多的時(shí)候,或者模型很復(fù)雜的時(shí)候,需要對(duì)幾何模型進(jìn)行簡(jiǎn)化,才可以滿足一些實(shí)時(shí)繪制的需要,這個(gè)技術(shù)叫做層次細(xì)節(jié)(LOD-Level of Detail)。下面的書就是講這個(gè)的:
David Luebke編著的 Level of Detail for 3D Graphics
(2) 渲染
有了模型,怎么把這個(gè)幾何模型畫出來呢?這個(gè)步驟就是渲染。
如 果你看了上面的OpenGL的書,那么你就知道一些渲染的知識(shí)了,但是別高興的太早,OpenGL使用的是局部光照模型(Local Illumination Model)。Local illumination Model指的是在做渲染的時(shí)候只考慮光源和物體之間的相互作用,不考慮物體和物體之間的影響,所以O(shè)penGL不支持陰影,一個(gè)(半)透明物體的效果, 這些需要考慮物體之間的影響才可以實(shí)現(xiàn)。
(*OpenGL本身不支持,但是通過一些方法可以實(shí)現(xiàn)的,用Google搜索一下
Shadow Volume, OpenGL就找到答案。)
Global Illumination Model 這類模型考慮的就比較全?,F(xiàn)在關(guān)于Global Illumination的技術(shù)有3大類,具體的技術(shù)就不在這里介紹了。

光線追蹤(Ray Tracing)
關(guān)于Ray Tracing的好書有2本:
Andrew Glassner 的An Introduction to Ray tracing
Glasser是圖形界的名人,這本書也是Ray Tracing的經(jīng)典

R. Keith Morley, Peter Shirley 的Realistic Ray Tracing, Second Edition
這本書第一版是偽代碼,第二版是C代碼。它的結(jié)構(gòu)不是很清楚,虎頭蛇尾的感覺。

輻射度(Radiosity)
關(guān)于Radiosity的好書有4本:
Michael Cohen 的Radiosity and Realistic Image Synthesis , Cohen獲得SIGGRAPH 1998計(jì)算機(jī)圖形學(xué)成就獎(jiǎng),他把Radiosity變成實(shí)際可用。
Francois X. Sillion的Radiosity and Global Illumination , Sillion是法國(guó)人,他的主要研究方向是Radiosity,這本書寫的很不錯(cuò)的,非常清晰。

Philip Dutre 的新書Advanced Global Illumination ,看起來還不錯(cuò),剛拿到手,還沒看,呵呵,所以不好評(píng)價(jià)。

Ian Ashdown的Radiosity: A Programmer's Perspective
有源代碼的書啊!
Photon mapping
這個(gè)我也不知道怎么翻譯,呵呵。這個(gè)技術(shù)出現(xiàn)的比較晚,一本好書!
Henrik Wann Jensen的Realistic Image Synthesis Using Photon Mapping
Henrik Wann Jensen是Photon mapping技術(shù)的發(fā)明者
【非真實(shí)性圖形學(xué)】(Non-Photorealistic Graphics)
真實(shí)性不是計(jì)算機(jī)圖形學(xué)的唯一要求,比如:你給我畫一個(gè)卡通效果的圖出來,或者我要用計(jì)算機(jī)畫水彩畫怎么辦?或者:把圖象用文字拼出來怎么做?,解決這些問題要用到非真實(shí)性圖形學(xué), 好書繼續(xù)推薦!
Bruce Gooch, Amy Ashurst Gooch的 Non-Photorealistic Rendering

【體圖形學(xué)】(Volume Graphics)
用CT機(jī)做很多切片(比如頭骨),那么能通過這些切片得到3D的頭骨嗎?Volume Graphics就是解決這樣的問題的
Min Chen 編著的Volume Graphics

上面的2個(gè)圖形學(xué)技術(shù)就和圖象的界限不明顯了,實(shí)際上他們是圖形圖象的綜合。

【其他的書】
還有一些好書啊,呵呵,好書看不完的,繼續(xù)放送:

Graphics Gems I ~ V,一大幫子人寫的書,包括研究人員,程序員…有計(jì)算機(jī)圖形學(xué)的各種數(shù)據(jù)結(jié)構(gòu),編程技巧。

Tomas Akenine-Moller 等人編著的Real-Time Rendering (2nd Edition)
許多最新的計(jì)算機(jī)圖形學(xué)進(jìn)展。

David Ebert等人的Texturing & Modeling: A Procedural Approach, Third Edition
講述如何通過程序?qū)崿F(xiàn)紋理、山、地形等圖形學(xué)要素。
關(guān)于圖形學(xué)的特定對(duì)象,有特定的專題圖書,
Evan Pipho Focus On 3D Models,對(duì)于圖形學(xué)的常用模型格式,進(jìn)行了講解
Trent Polack的 Focus On 3D Terrain Programming ,講地形的
Donald H. House 的Cloth Modeling and Animation ,講布料的
Nik Lever的Real-time 3D Character Animation with Visual C++ ,講角色動(dòng)畫的
Richard Parent的 Computer Animation: Algorithms and Techniques,當(dāng)然是講動(dòng)畫的啦,呵呵。
David H. Eberly的3D Game Engine Design : A Practical Approach to Real-Time Computer Graphics ,有代碼的??!呵呵:)

最后,沒事情的時(shí)候,看看下面的書吧
Alan H. Watt, 3D Computer Graphics (3rd Edition)

James D. Foley等人的 Computer Graphics: Principles and Practice in C (2nd Edition) ,這本圣經(jīng)沒事的時(shí)候再看吧,呵呵。

累了:( 不說了,上面的書差不多了,還有一些shader的書,我不了解,以后會(huì)補(bǔ)上的:)

4.   資源

 

從哪里找到這些書啊?還有什么資源???


我保證,上面的書在www.amazon.com 都可以買到:) 別打我

那好,大部分的書在國(guó)家圖書館可以復(fù)印到,北京的兄弟有福啦,3年前的書借出來復(fù)印,1角/頁,但是新書要早圖書館里復(fù)印,5~6角/頁,還是比Amazon便宜啊,呵呵。

不行大家就到國(guó)外買,合買吧,還負(fù)擔(dān)的起。
我對(duì)DirectX不了解,所以沒有涉及關(guān)于DirectX的內(nèi)容:)

 




]]>
zz一個(gè)圖形愛好者的書架http://www.shnenglu.com/bneliao/articles/60209.htmlbneliaobneliaoWed, 27 Aug 2008 20:53:00 GMThttp://www.shnenglu.com/bneliao/articles/60209.htmlhttp://www.shnenglu.com/bneliao/comments/60209.htmlhttp://www.shnenglu.com/bneliao/articles/60209.html#Feedback0http://www.shnenglu.com/bneliao/comments/commentRss/60209.htmlhttp://www.shnenglu.com/bneliao/services/trackbacks/60209.html

一個(gè)圖形愛好者的書架.-也來介紹一下我的藏書.

早幾天看到有人把自己在大學(xué)四年的書列了出來.招來一頓懷疑.我是開發(fā)圖形程序的.我現(xiàn)在也把我的書列出來.不怕大家懷疑吧.希望能有點(diǎn)啟示作用.

綠色的是我看完了的。紅色的是沒怎么看的。黃色的是看了一半以上的。

首先是基礎(chǔ)部分:
語言類:
C++ Programming Language (Special Edition). C++的圣經(jīng)級(jí)別的書.我只看原文的。不看翻譯的.對(duì)球教授的翻譯表示一定的保留意見.
Effictive/More Effictive C++. 工程實(shí)踐的最佳經(jīng)驗(yàn)書籍.
Inside C++ Object Model .好書.看完了。你對(duì)C++的理解會(huì)變的很深刻的。
設(shè)計(jì)模式  .好書.買了看就是了。別問我為什么啊?!?br> More Excpetion C++  和Effective C++有同工之處.
STL 源代碼破析 。正在看的過程中。不過最近最Loki Boost的興趣大點(diǎn)。
STL 中文版       一本參考手冊(cè)。
Moden C++ Design 看完了這本書。我估計(jì)會(huì)吐血。但是還是要看。經(jīng)典啊,書的例子Loki的代碼
C++自學(xué)通 ,我入門的書 。不過現(xiàn)在已經(jīng)找不到了。
潭浩強(qiáng)的C程序設(shè)計(jì) 。經(jīng)典。C教材里這本最好。不許大家B4他。
C++Template : 有人說翻譯的不好。我覺得還可以.

Python 語言入門 。我拿來做游戲腳本用的。
Unix Shell編程 。

算法和基礎(chǔ)類。
程序設(shè)計(jì)實(shí)踐    給你一個(gè)很好的經(jīng)驗(yàn).很薄的,去買來看看。
C++分形程序設(shè)計(jì) 。當(dāng)年給一個(gè)JJ做畢業(yè)設(shè)計(jì)?;税雮€(gè)月看完的。
數(shù)據(jù)結(jié)構(gòu)(C++語言描述) 影印版。好書,但是沒看完。教材來著的。
數(shù)據(jù)結(jié)構(gòu)(用面向?qū)ο蠓椒ㄅcC++描述)。 清華出的??赐炅?。
人工智能 Nilson的書。看不懂。呵呵。

開發(fā)工具和平臺(tái)的書
Unix 環(huán)境高級(jí)編程 : 學(xué)Unix編程.就從這里開始吧.現(xiàn)在在看X-Window編程.可惜沒有介紹XLib的書.因?yàn)橐肙penGL.最好還是從XLib開始.痛苦.只能看Xlib.pdf
Unix 高級(jí)編程       : 我真不相信我能檢到這么一本好書.想買.但是沒錢.呵呵。檢一本.不錯(cuò).
VC++技術(shù)內(nèi)幕 ,翻譯的好爛啊。不過當(dāng)時(shí)我不知道。最后還是看完了。
Windows下的C語言編程 。我的 Win32入門書籍。
Win32程序員指南 ,我的Win32提高書籍。10塊一本。呵呵。
Windows 核心編程 ??赐炅诉@個(gè)。大家說我是個(gè)高手了。
深入淺出MFC .   看了一半后,我自己去看MFC的代碼了.
ATL 開發(fā)人員指南   沒怎么看.很實(shí)用的樣子.
COM 本質(zhì)論 ?。赐炅舜箝L(zhǎng)見識(shí),我就是看了他后,才知道接口的概念的.
ATL 本質(zhì)論  ,看了后讓我模板水平有不少提高.
Linux內(nèi)核編程  沒什么好說的。
X86的體系結(jié)構(gòu)和匯編
忘記了具體名字了。大概 是這個(gè)名字.我的匯編知識(shí)都是從這里來的。只看了前面的部分
匯編語言程序設(shè) 計(jì): 錢曉捷主編.有介紹SSE和MMX的。很不錯(cuò)哦。 也很便宜
應(yīng)用程序調(diào)試技巧 : 很經(jīng)典的調(diào)試書.Numega公司的工程師寫的.(出品SoftICE的那個(gè)公司).有些技巧只能用神奇來形容.

專業(yè)的圖形書
圖形開發(fā)人員指南  著名的黑皮書.我是懷著崇拜的心情收藏這本書的。John Carmack做的序.Micheal Abrash的書.偶像啊。
計(jì)算機(jī)圖形學(xué) (清華大學(xué))。爛書。不過也差不多看完了。現(xiàn)在在一個(gè) MM手里。
圖形學(xué) (電子工業(yè)出版社)老外的書。不錯(cuò)。正在看。
計(jì)算機(jī)圖形學(xué)算法基礎(chǔ) :經(jīng)典。沒看完??戳?/3了。翻了一遍。
計(jì)算機(jī)真實(shí)感圖形的算法基礎(chǔ) 。國(guó)內(nèi)最好的圖形學(xué)的書。剛拿到。正在看。
非真實(shí)感計(jì)算機(jī)圖形學(xué) : 剛買到的.不是太有用。太學(xué)術(shù)了。
游戲編程精粹 1/2/3. 中文版 。偶爾翻一兩篇不錯(cuò)的。不過我要對(duì)著英文的看才看的懂。
OpenGL Red Book .中文版還可以.非讀不可.
OpenGL 超級(jí)寶典  比較好.很實(shí)用,對(duì)初學(xué)者很好.
3D Games Vol1 . 就是介紹Fly 3D 的書??戳艘话肓恕:懿诲e(cuò)。
Real-Time Rendering 1 . 正在看。很好的書
Real-Time Rendering 2 : 中文版和英文版都有:
CG 教程 :  推薦你學(xué)好圖形學(xué)后再來看.
OpenGL Shading Languge : 看了前面的大半了。
GPU Gems :                    剛買到的.花了我350大元.不過好看.
3D Math Primer For Computer Graphics and 3D Games . 數(shù)學(xué)書里就這本好一點(diǎn)了。
3D Game Engine Design  正在看。對(duì)著書寫自己的物理引擎。
ShaderX 2 Tricks .   沒看。剛拿到。經(jīng)典到不用介紹的程度了。
還有其他打印的資料無數(shù) :-)


數(shù)學(xué)物理類.
計(jì)算機(jī)圖形學(xué)幾何工具和算法 : 超級(jí)經(jīng)典的書
微積分 : 高等教育出版社
實(shí)變函數(shù)和泛函分析 ,北京大學(xué)出版社
代數(shù)論                             高等教書出版社
函數(shù)論和泛函分析 , 莫斯科大學(xué)出版社.
流體力學(xué)                        高等教育出版社
小波十講                       不需要用說十什么地方出的
復(fù)變函數(shù)
數(shù)字信號(hào)處理
數(shù)學(xué)物理方程和特殊函數(shù)
初等幾何
數(shù)學(xué)分析 :上下冊(cè).
理論力學(xué) : 上下冊(cè)
傅立葉變換與小波分析 : 沒看明白
大學(xué)物理 : 1-3 冊(cè).
空氣動(dòng)力學(xué) : 我的老本行.(偶學(xué)航空發(fā)動(dòng)機(jī)滴)



]]>
zz一個(gè)游戲程序員的學(xué)習(xí)資料http://www.shnenglu.com/bneliao/articles/60208.htmlbneliaobneliaoWed, 27 Aug 2008 20:46:00 GMThttp://www.shnenglu.com/bneliao/articles/60208.htmlhttp://www.shnenglu.com/bneliao/comments/60208.htmlhttp://www.shnenglu.com/bneliao/articles/60208.html#Feedback0http://www.shnenglu.com/bneliao/comments/commentRss/60208.htmlhttp://www.shnenglu.com/bneliao/services/trackbacks/60208.html


想起寫這篇文章是在看侯杰先生的《深入淺出MFC》時(shí),突然覺得自己在大學(xué)這幾年關(guān)于游戲編程方面還算是有些心得,因此寫出這篇小文,介紹我眼中的游戲程序員的書單與源代碼參考。一則是作為自己今后兩年學(xué)習(xí)目標(biāo)的備忘錄,二來沒準(zhǔn)對(duì)別人也有點(diǎn)參考價(jià)值。我的原則是只寫自己研究過或準(zhǔn)備研究的資料,所以內(nèi)容無疑會(huì)帶上強(qiáng)烈的個(gè)人喜好色彩,比如對(duì)網(wǎng)絡(luò),數(shù)據(jù)庫(kù)等重要方面完全沒有涉及。因?yàn)樽约褐饕獙?duì)三維圖形引擎,人工智能算法,腳本系統(tǒng),反外掛(反反外掛? ^-^)等方面感興趣。這學(xué)期電腦都沒聯(lián)網(wǎng)了,在岳麓山閉關(guān)修煉中(^-^),連這篇文章都得在學(xué)校圖書館電子閱覽室(電影放映室?)上傳,內(nèi)容很多憑記憶寫出,如有誤差敬請(qǐng)訂正。程序員應(yīng)該在理論學(xué)習(xí)與實(shí)踐編程中反復(fù)迭代,所以學(xué)習(xí)資料是一回事,須知盡信書不如無書。



一、書籍:

算法與數(shù)據(jù)結(jié)構(gòu):

《數(shù)據(jù)結(jié)構(gòu)(C語言版)》——嚴(yán)蔚敏、吳偉民 清華出版社-----------賣了

我覺得其配套習(xí)題集甚至比原書更有價(jià)值,每個(gè)較難的題都值得做一下。



《Introduction to Algorithms》第二版 中文名《算法導(dǎo)論》--------英文影印版+算法設(shè)計(jì)(不過沒看)

關(guān)于算法的標(biāo)準(zhǔn)學(xué)習(xí)教材與工程參考手冊(cè),在去年CSDN網(wǎng)站上其翻譯版竟然評(píng)為年度二十大技術(shù)暢銷書,同時(shí)《程序員》雜志上開設(shè)了“算法擂臺(tái)”欄目,這些溯源固本的舉動(dòng),不由得使人對(duì)中國(guó)現(xiàn)今浮躁不堪的所謂“IT”業(yè)又產(chǎn)生了一線希望。這本厚厚的書,幸虧打折我才買得起。雖然厚達(dá)千頁,但其英文通俗曉暢,內(nèi)容深入淺出,可見經(jīng)典之作往往比一般水準(zhǔn)的書還耐讀。還能找到MIT的視頻教程,第一節(jié)課那個(gè)老教授嘻皮笑臉的,后面就是一長(zhǎng)發(fā)助教上課了。



《C語言名題精選百則 技巧篇》——冼鏡光 機(jī)械工業(yè)出版社

作者花費(fèi)一年時(shí)間搜集了各種常見C程序段的極具技巧性的編程法,其內(nèi)容都是大有來頭的,而且給出了詳細(xì)的參考資料。如一個(gè)普通的Fibonacci數(shù)就給出了非遞歸解、快速算法、擴(kuò)充算法等,步步深入,直至幾無油水可榨。對(duì)于視速度如生命,連一個(gè)普通的浮點(diǎn)數(shù)轉(zhuǎn)化為整數(shù)都另辟蹊徑以減少CPU cycle的游戲程序員,怎可不看?



《計(jì)算機(jī)算法基礎(chǔ)(第二版)》—— 佘祥宣等 華中科大出版社

我看到幾個(gè)學(xué)校的研究生拿它作教材(研究生才開算法,太開玩笑了吧)。這本書薄是薄了點(diǎn),用作者的話來說,倒也“精辟”。其實(shí)此書是《Fundamentals of Computer Algorithms》的縮寫版,不過原書出版太久了,反正我是沒找到。



《The Art of Computer Programming》Volume 1-3-----------------葵花寶典

作者Donald E. Knuth是我心目中與馮.諾依曼、Dijkstra、Shannon并列的四位大師。這本書作者從讀大學(xué)本科時(shí)開始寫,一直寫到博士時(shí),十年磨一劍,足見其下足了功夫??勺鳛橛?jì)算機(jī)技術(shù)的核心——算法與數(shù)據(jù)結(jié)構(gòu)的終極參考手冊(cè)。創(chuàng)新處也頗多,譬如常見的Shell排序他在書中提出可用(3i-1)/2的間隔,這使其稍快于O(n1. 5)。當(dāng)然這套書描述高度數(shù)學(xué)化,為此恐怕一般的人(我?)最好還得先看一本數(shù)學(xué)預(yù)備書《Concrete Mathematics》(直譯為混凝土數(shù)學(xué)?^-^)再說。可惜的是這套書才出到第三卷,并沒有覆蓋全部常見的算法內(nèi)容。不過好在對(duì)于游戲程序員來說,越常見的算法用得越多,這也不算是什么要命的損失。



《STL源碼剖析》—— 侯捷 華中科大出版社-----------------------有必要看這書嗎?

侯捷不用介紹了,華人技術(shù)作家中的旗艦,說其有世界級(jí)水準(zhǔn)也不為過。這本書我以為是C++與數(shù)據(jù)結(jié)構(gòu)的葵花寶典(欲練此功,必先自宮)。也就是說,不下幾層地獄很難看懂,因?yàn)樗蟮念A(yù)備知識(shí)太多了,如STL、數(shù)據(jù)結(jié)構(gòu)、泛型編程、內(nèi)存管理都要很扎實(shí)(為此是不是還要看看有內(nèi)存管理設(shè)計(jì)模式之稱的《Small Memory Software》這本書呢?),但是一旦看懂,真會(huì)是所向披靡。



《Data Structures for Game Programmers》

每個(gè)數(shù)據(jù)結(jié)構(gòu)的例程都是一個(gè)小游戲,還用SDL庫(kù)實(shí)現(xiàn)了一個(gè)算法演示系統(tǒng)。雖然內(nèi)容失之于淺,但起碼讓人了解了數(shù)據(jù)結(jié)構(gòu)在游戲中的作用。



其實(shí)游戲程序并不比其它程序特殊,甚至要求基本功更加扎實(shí),所以花時(shí)間做一些看似與實(shí)際應(yīng)用不甚相干的習(xí)題,對(duì)今后的工作是大有裨益的。而且有些應(yīng)用很廣的算法,如常被人津津樂道的A*算法及其變種,牽涉到圖的檢索周游與分枝-限界法,恐怕還得讀一些艱深的論文才能充分明白運(yùn)用,如Donald E. Knuth的《An analysis of alpha-beta cutoffs》。其實(shí)還有不少此類的好書,如《Data Structures and Algorithms in C++》、《Programming Pearls》、《More Programming Pearls》(算法珠璣)等,我卻以為要先看嚴(yán)謹(jǐn)一點(diǎn)的著作,再看內(nèi)容隨筆一點(diǎn)的書。



匯編:

《IBM-PC 匯編語言程序設(shè)計(jì)》第二版 

國(guó)內(nèi)經(jīng)典教材。

《The Art of Assembly Language》

這本書足有1600頁,噢!



C語言:

《The C Programming Language》第二版

雖然篇幅短小,但每個(gè)例程都很經(jīng)典。(我們老師開始拿它作教材,后面換為譚小強(qiáng)的C語言書,理由為:例子盡是些文本處理。我就納了悶了,難道現(xiàn)代的計(jì)算機(jī)程序不是將大量時(shí)間消耗在字符串與文本的處理上嗎?)



C++:

學(xué)過C語言,再學(xué)C++,先看這本《C++ Primer》的縮寫版:

《Essential C++》

對(duì)C++有個(gè)入門了解,再看

《C++ Common Knowledge: Essential Intermediate Programming》

就不會(huì)有什么重要的知識(shí)點(diǎn)完全不知所措了,接下來是

《The C++ Standard Library : A Tutorial and Reference》--------------看前面覺得太啰嗦了,

標(biāo)準(zhǔn)庫(kù),當(dāng)然主要是標(biāo)準(zhǔn)模板庫(kù)的標(biāo)準(zhǔn)學(xué)習(xí)參考手冊(cè),然后最好平時(shí)邊寫程序邊參悟。

《Effective C++》等------------看過

我是說書名以形容詞 + C++的那些書,計(jì)有七八本,慢慢看吧,羅馬不是一日建成的。

(《Essential C++》、《Effective C++》、《More Effective C++》、《Accelerated C++》、《Effective STL》、《Exceptional C++》、《More Exceptional C++》、《Imperfect C++》,雖然書名格式相似,但每一本都絕非馬虎之作。)



誰說C++程序比C程序要慢?那就請(qǐng)看下面:

《The Design and Evolution of C++》

知其過去才能知其未來,才能應(yīng)用。

《Inside the C++ Object Model》--------看過

揭露C++的編譯器模型。

《Efficient C++ Performance Programming Techniques》

當(dāng)算法優(yōu)化已到極致,在運(yùn)用匯編之前,最后還可看看此書,有時(shí)高級(jí)和低階都能做成相同的事情。



還有兩本特別的書:

《Modern C++ Design : Generic Programming and Design Patterns Applied》

作者想把設(shè)計(jì)模式和泛型編程結(jié)合起來,并寫了個(gè)嘗試提供一切的Loki庫(kù)來實(shí)作,不過其觀點(diǎn)并未得到C++社區(qū)的普遍響應(yīng)。盡管如此,本書仍稱得上思想前沿性與技術(shù)實(shí)用性結(jié)合的典范。



《C++ Template Metaprogramming》

把編譯器當(dāng)作計(jì)算器?本書介紹了Boost庫(kù)的MPL模板元編程庫(kù)。當(dāng)然提到Boost庫(kù),對(duì)于游戲程序員不能不提到其中的Graph庫(kù),有《The Boost Graph Library》一書可看。還有其中Python庫(kù),號(hào)稱國(guó)內(nèi)首款商業(yè)三維圖形引擎的起點(diǎn)引擎就用了Boost-Python庫(kù)。說實(shí)話我覺得起點(diǎn)引擎還是蠻不錯(cuò)的,那個(gè)自制的三維編輯器雖然界面簡(jiǎn)陋,但功能還算蠻完善,給游戲?qū)W院用作教學(xué)內(nèi)容也不錯(cuò)。另有一個(gè)號(hào)稱中國(guó)首款自主研發(fā)的全套網(wǎng)游解決方案。我看到它那個(gè)三維編輯器,心想這不就是國(guó)外一個(gè)叫freeworld3D的編輯器嗎?雖然有點(diǎn)偏門,但我以前還較勁嘗試破解過呢。還把英文界面漢化了,大概用exescope這樣的資源修改軟件就能搞定吧。我又心想為什么要找freeworld3D這個(gè)功能并不太強(qiáng)大的編輯器呢??jī)H僅是因?yàn)樗阋说綆资澜??它唯一特別一點(diǎn)的地方就是支持導(dǎo)出OGRE圖形引擎的場(chǎng)景格式,這樣一想不由得使人對(duì)它圖形引擎的“自主”性也產(chǎn)生懷疑了。這樣的“自主”研發(fā)真讓人汗顏,只要中國(guó)還沒封sourceforge這個(gè)網(wǎng)站(據(jù)說以前和freeBSD網(wǎng)站一起被封過?),國(guó)人就能“自主”研發(fā)。



有人還會(huì)推薦《C++ Primer》《Thinking in C++》《The C++ Programming Language》等書吧,誠(chéng)然這些書也很好,但我總覺得它們太大部頭了。還不如多花點(diǎn)時(shí)間看看國(guó)外好的源代碼。



Windows編程

Operating System Concepts第五版----------第六版看過,第七版已出

國(guó)內(nèi)有些操作系統(tǒng)的教程其實(shí)就是它的縮寫版。



《Windows 95 System Programming Secrets》---------?

深入剖析了Windows操作系統(tǒng)的種種種種,有人愛看《Linux內(nèi)核完全注釋》,有人愛看《自己動(dòng)手寫操作系統(tǒng)》這樣煽情的書,但我想作為商業(yè)的操作系統(tǒng),把Windows內(nèi)核剖析到這地步也高山仰止了。



《Programming Applications for Microsoft Windows》第四版

先進(jìn)程線程,再虛存管理,再動(dòng)態(tài)鏈接庫(kù),最多講到消息機(jī)制。作者在序言中說:“我不講什么ActiveX, COM等等,因?yàn)楫?dāng)你了解了這些基礎(chǔ)后,那些東西很快就會(huì)明白!”可以作為《Programming Windows》的先修課。



計(jì)算機(jī)體系:

《Computer Systems : A Programmer’s Perspective》---------在看

和《The Art of Computer Programming》在我心中是計(jì)算機(jī)史上兩本稱得上偉大的書,計(jì)算機(jī)組成原理,操作系統(tǒng),匯編,編譯原理,計(jì)算機(jī)網(wǎng)絡(luò)等等課程匯成這本千頁的大書,因?yàn)橛?jì)算機(jī)在作者眼中就是一個(gè)整體。



開源閱讀:

《Code Reading : The Open Source Perspective》

張大千臨摹了幾百?gòu)埫鞔瘽纳剿嫵龅漠嬕约賮y真,后來他去敦煌潛心臨摹幾年,回來畫風(fēng)大變,終成大家。程序員其實(shí)有40%的時(shí)間是在讀別人的源代碼,侯捷先生說:“源碼面前,了無秘密”,又說“天下大事,必作于細(xì)”,可以與他的《上窮碧落下黃泉,源碼追蹤經(jīng)驗(yàn)談》參看。



MFC:

《深入淺出MFC》

我實(shí)在以為沒有看過侯捷先生的《深入淺出MFC》的人多半不會(huì)懂得MFC編程。其實(shí)我是打算用一年多的時(shí)間寫一個(gè)給游戲美工用的三維編輯器,順便作為畢業(yè)設(shè)計(jì)。圖形庫(kù)就用MFC吧,反正也沒得選擇。如果要用wxWidgets無非是獵奇而已,還不是MFC的翻版,當(dāng)然它跨平臺(tái)了。就象阻擊手對(duì)自己槍械的零件了如指掌一樣,要想用MFC寫出非玩具程序的人一定要了解其內(nèi)部構(gòu)造。還有一本書叫《MFC深入淺出》,并不是同一本。



IDE:

《Microsoft Visual Studio 2005 Unleashed》

工欲善其事,必先利其器。當(dāng)然我認(rèn)為與其用形如Source Insight、Slick Edit、Code Visualizer之類的代碼閱讀器、圖形化工具,還不如用自己的大腦。但如果你嫌打源代碼慢的話,可以用Visual AssistX。如果嫌老是寫重復(fù)相似的代碼的話,可以用Code Smith。單元測(cè)試可以用CppUnit,Boost庫(kù)中的測(cè)試框架也不錯(cuò)。有心情可以吧Visual Studio外接Intel的Compiler,內(nèi)嵌STLport,但不是大工程,性能分析沒必要?jiǎng)硬粍?dòng)就用下VTune吧。



程序員之路:

《游戲之旅——我的編程感悟》-----------看一點(diǎn)

云風(fēng)大哥。在我心目中游戲程序員國(guó)外首推卡馬克,國(guó)內(nèi)首推云風(fēng)。也許過兩年我會(huì)到網(wǎng)易當(dāng)云風(fēng)大哥的助理程序員吧。It’s my dream.(^-^)他寫這本書的時(shí)候本著只有透徹理解的東西才寫出來,因此內(nèi)容不會(huì)很酷新,但是相信我,每讀一遍都有新的收獲,主要還不是知識(shí)上的,因?yàn)橹R(shí)是學(xué)無止境的,授人以魚不如授人以漁,精神上的啟迪才是長(zhǎng)久的。誠(chéng)如經(jīng)典游戲《仙劍奇?zhèn)b傳》的主力程序員兼美術(shù)指導(dǎo)姚壯憲(人稱姚仙)在序言中所說的“云風(fēng)得到的只是一些稿費(fèi),而整個(gè)中國(guó)民族游戲產(chǎn)業(yè)得到的將是一次知識(shí)的推動(dòng)”,此言不虛矣。



《編程高手箴言》

梁肇新是豪杰超級(jí)解霸的作者,本來每個(gè)合格的程序員(Programmer , 而非Coder)都應(yīng)該掌握的東西,現(xiàn)在變成了編程高手的獨(dú)家箴言。不知是作者的幸運(yùn)還是中國(guó)IT業(yè)的悲哀。知識(shí)點(diǎn)還是講得蠻多的,不過對(duì)MFC的地位頗有微詞。我實(shí)在認(rèn)為MFC的名聲就是那些不懂得用它的人搞臭的。不過作者的牢騷也情有可原,每個(gè)具有創(chuàng)造力的程序員都應(yīng)該不太喜歡framework。



《Masters of DOOM: How Two Guys Created an Empire and Transformed Pop Culture》中文名《DOOM啟世錄》

卡馬克,羅洛斯,這些游戲史上如雷貫耳的名字。(現(xiàn)在卡馬克已專注于火箭制造上,羅洛斯則攜妻回鄉(xiāng)隱居)要不是沒上過大學(xué)的卡馬克和圖形學(xué)大師亞伯拉罕的功勛,可能到現(xiàn)在游戲中還不知三維為何物。勿庸置疑,在計(jì)算機(jī)界歷史是英雄們所推動(dòng)的。這本書真實(shí)的記錄了這些塵世英雄的所為所思。



作為程序員的我對(duì)這幾本策劃與美工的書也產(chǎn)生了濃厚興趣,以前搞過一兩年的3DS MAX插件編程,覺得用maxscript還是好過MaxSDK,畢竟游戲開發(fā)中所多的是模型場(chǎng)景數(shù)據(jù)的導(dǎo)入導(dǎo)出,大可不必大動(dòng)干戈。



策劃:

《Creating Emotion in Games : The Craft and Art of Emotioneering》

在壯麗煊目的宏偉三維世界背后,在殘酷的殺戮,動(dòng)人心魄的情節(jié)背后,我們還需要什么來抓住玩家的心?答對(duì)了,就是emotion.真正打動(dòng)人心的,才是深入骨髓的。



《Ultimate Game Design : Building Game Worlds》

從名字可以看出,寫給關(guān)卡設(shè)計(jì)師的,特別是講室外自然場(chǎng)景的構(gòu)建頗有可取之處。



《Developing Online Games : An Insider’s Guide》

就象名為反模式的書講軟件團(tuán)隊(duì)運(yùn)營(yíng)一樣,這本書講商業(yè)運(yùn)作多過技術(shù)。一個(gè)歷經(jīng)艱難,現(xiàn)在盛大的游戲程序員,翻譯了這本書。



美工:

《Digital Cinematography & Directing》

數(shù)字?jǐn)z影導(dǎo)演術(shù),每當(dāng)你在3DS MAX或者M(jìn)aya等三維創(chuàng)作軟件中擺放攝影機(jī),設(shè)計(jì)其運(yùn)動(dòng)軌跡時(shí),你可曾想過你也站在導(dǎo)演的位置上了?



《The Animator’s Survival Kit》

看著這本講卡通角色運(yùn)動(dòng)規(guī)律的書,一邊產(chǎn)生溫習(xí)《貓和老鼠》的念頭,一邊繼續(xù)對(duì)前不久新聞聯(lián)播中關(guān)于中國(guó)產(chǎn)生了某計(jì)算機(jī)自動(dòng)卡通動(dòng)畫生成軟件報(bào)道的蔑視,這條報(bào)道稱此舉可大大加快中國(guó)卡通動(dòng)畫的產(chǎn)量。我且不從技術(shù)上探討其是否是在放衛(wèi)星(其實(shí)我知道得很清楚,前文已表,本人搞過一兩年的卡通動(dòng)畫輔助軟件編程),但計(jì)算機(jī)機(jī)械生成的動(dòng)畫怎可代替人類充滿靈性的創(chuàng)作?



《The Dark Side of Game Texturing》

用Photoshop制作材質(zhì)貼圖,還真有些學(xué)問。



三維圖形學(xué):

搞三維圖形學(xué)首先還是要扎扎實(shí)實(shí)的先看解析幾何、線性代數(shù)、計(jì)算幾何的教材,后面的習(xí)題一個(gè)都不能少。國(guó)內(nèi)數(shù)學(xué)書還是蠻好的。蘇步青大師的《計(jì)算幾何》稱得上具有世界級(jí)水準(zhǔn),可惜中國(guó)CAD的宏圖被盜版給擊垮了。現(xiàn)在是我們接過接力棒的時(shí)候了。It’s time!





《Computer Graphics Geometrical Tools》

《計(jì)算機(jī)圖形學(xué)幾何工具算法詳解》算法很多,紕漏處也不少。



《3D Math Primer for Graphics and Game Development》

淺易,可作為三維數(shù)學(xué)的“速食“。



《Mathematics for 3D Game Programming & Computer Graphics》第二版

比上面那本深入一些,證明推理的數(shù)學(xué)氣也濃一些,可作為專業(yè)的數(shù)學(xué)書與編程實(shí)踐一個(gè)過渡的橋梁吧。內(nèi)容涉獵也廣,射線追蹤,光照計(jì)算,可視裁剪,碰撞檢測(cè),多邊形技術(shù),陰影算法,剛體物理,流體水波,數(shù)值方法,曲線曲面,還真夠豐富。



《Vector Game Math Processors》

想學(xué)MMX,SSE嗎,那就看它吧,不過從基礎(chǔ)講起的,要耐心哦。



DirectX:

《Introduction to 3D Game Programming with DirectX 9.0》---------入門看

DirectX入門的龍書,作者自己寫的簡(jiǎn)單示例框架,后面我干脆用State模式,把所有例子綁到一塊兒去了。



《Beginning Direct3D Game Programming》

作者取得律師學(xué)位后變成了游戲程序員,真是怪也哉。本書雖定位為入門級(jí)書,內(nèi)容頗有獨(dú)特可取之處。它用到的示例框架是DXSDK Sample Framework,而不是現(xiàn)在通行的DXUT。要想編譯有兩種辦法吧,一是自己改寫成用DXUT的。二是找舊的Sample Framework。我又懶得為了一個(gè)示例框架下載整個(gè)早期版本的DirectX,后面在Nvidia SDK 9.5中發(fā)現(xiàn)了。



《Advanced Animation with DirectX》

DirectX高級(jí)動(dòng)畫技術(shù)。骨骼系統(tǒng),漸變關(guān)鍵幀動(dòng)畫,偶人技術(shù),表情變形,粒子系統(tǒng),布料柔體,動(dòng)態(tài)材質(zhì),不一而足。我常常在想,從三維創(chuàng)作軟件導(dǎo)出的種種效果,變成一堆text或binary,先加密壓縮打包再解包解壓解密,再用游戲程序重建一個(gè)Lite動(dòng)畫系統(tǒng),游戲程序員也真是辛苦。



OpenGL:

《NeHe OpenGL Tutorials》

雖是網(wǎng)絡(luò)教程,不比正式的書遜,本來學(xué)OpenGL就不過是看百來?xiàng)lC函數(shù)文檔的工夫吧,如果圖形學(xué)基礎(chǔ)知識(shí)扎實(shí)的話。



《OpenGL Shading Language》

OpenGL支持最新顯卡技術(shù)要靠修修補(bǔ)補(bǔ)的插件擴(kuò)展,所以還要配合

《Nvidia OpenGL Extension Specifications》

來看為上。



《Focus on 3D Models》

《Focus on 3D Terrain Programming》

《Focus on Curves and Surfaces》

顧名思義,三本專論,雖然都很不深,但要對(duì)未知三維模型格式作反向工程前,研讀Geomipmapping地形算法論文前,CAD前,還是要看看它們?yōu)樯?,如果沒從別處得過到基礎(chǔ)的話。



腳本:

先看

《Game Scripting Mastery》

等自己了解了虛擬機(jī)的構(gòu)造,可以設(shè)計(jì)出簡(jiǎn)單的腳本解釋執(zhí)行系統(tǒng)了。

再去查Python , Lua ,Ruby的手冊(cè)吧,會(huì)事半半功倍倍的。



《Programming Role Playing Games with DirectX 8.0》

一邊教學(xué)一邊用DirectX寫出了一個(gè)GameCore庫(kù),初具引擎稚形。



《Isometric Game Programming with DirectX 7.0》

三維也是建立在二維的基礎(chǔ)上,這就是這本書現(xiàn)在還值得看的原因。



《Visual C++網(wǎng)絡(luò)游戲建模與實(shí)現(xiàn)》

聯(lián)眾的程序員寫的,功力很扎實(shí),講棋牌類游戲編程,特別講了UML建模和Rotional Rose。



《Object-Oriented Game Development》

套用某人的話:“I like this book.”



Shader:

要入門可先看

《Shaders for Game Programmers and Artists》

講在RenderMonkey中用HLSL高級(jí)著色語言寫Shader.



再看

《Direct3D ShaderX : Vertex and Pixel Shander Tips and Tricks》

用匯編著色語言,純銀赤金。



三大寶庫(kù):

《Game Programming Gems》

我只見到1-6本,據(jù)說第7、8本也出來了?附帶的源代碼常有bug,不過瑕不掩瑜,這套世界頂級(jí)游戲程序員每年一度的技術(shù)文集,涉及游戲開發(fā)的各個(gè)方面,我覺得富有開發(fā)經(jīng)驗(yàn)的人更能在其中找到共鳴。



《Graphics Gems》全五本

圖形學(xué)編程Bible,看了這套書你會(huì)明白計(jì)算機(jī)領(lǐng)域的科學(xué)家和工程師區(qū)別之所在??茖W(xué)家總是說,這個(gè)東西在理論上可行。工程師會(huì)說,要使問題在logN的時(shí)限內(nèi)解決我只能忍痛割愛,舍繁趨簡(jiǎn)。



《GPU Gems》出了二本

Nvidia公司召集圖形學(xué)Gurus寫的,等到看懂的那一天,我也有心情跑去Siggraph國(guó)際圖形學(xué)大會(huì)上投文章碰運(yùn)氣。



游戲引擎編程:

《3D Game Engine Programming》

是ZFXEngine引擎的設(shè)計(jì)思路闡釋,很平實(shí),冇太多驚喜。



《3D Game Engine Design》

數(shù)學(xué)物理的理論知識(shí)講解較多,本來這樣就夠了,還能期待更多嗎?



人工智能:

《AI Techniques for Game Programming》

講遺傳算法,人工神經(jīng)網(wǎng)絡(luò),主要用到位數(shù)組,圖算法。書的原型是根據(jù)作者發(fā)表到GameDev.net論壇上的內(nèi)容整理出來的,還比較切中實(shí)際。



《AI Game Programming Wisdom》

相當(dāng)于AI編程的Gems。



《PC游戲編程(人機(jī)博弈)》

以象棋程序?yàn)樗{(lán)本,介紹了很多種搜索算法,除了常見的極大極小值算法及其改進(jìn)--負(fù)極大值算法,還有深度優(yōu)先搜索以外。更提供了多種改進(jìn)算法,如:Alpha-Beta,Fail-soft alpha-beta,Aspiration Search, Minimal Window Search,Zobrist Hash,Iterative Deepening,History Heuristic,Killer Heuristic,SSS*,DUAL*,MFD and more.琳瑯滿目,實(shí)屬難得。



反外掛:

《加密與解密(第二版)》 看雪論壇站長(zhǎng) 段鋼

破解序列號(hào)與反外掛有關(guān)系么?不過,世上哪兩件事情之間又沒有關(guān)系呢?



《UML Distilled》 Martin Fowler

很多人直到看了這本書才真正學(xué)懂UML。

Martin Fowler是真正的大師,從早期的分析模式,到這本UML精粹,革命性的重構(gòu)都是他提出的,后來又寫了企業(yè)模式一書?,F(xiàn)在領(lǐng)導(dǎo)一個(gè)軟件開發(fā)咨詢公司,去年JavaOne中國(guó)大會(huì)他作為專家來華了吧。個(gè)人網(wǎng)站:MartinFowler.com



設(shè)計(jì)模式三劍客:

《Design Patterns Elements of Reusable Object-Oriented Software》

《Design Patterns Explained》

《Head First Design Patterns》



重構(gòu)三板斧:

《Refactoring : Improving the Design of Existing Code》

《Refactoring to Patterns》

《Refactoring Workbook》



軟件工程:

《Extreme Programming Explained : Embrace Change》第二版

其中Simplicity的Value真是振聾發(fā)聵,這就是我什么都喜歡輕量級(jí)的原因。



《Agile Software Development Principles,Patterns,and Practices》

敏捷真是炒得夠火的,連企業(yè)都有敏捷一說,不過大師是不會(huì)這么advertising的。



《Code Complete》第二版

名著。



數(shù)學(xué):

《數(shù)學(xué),確定性的喪失》M.克萊因

原來數(shù)學(xué)也只不過是人類的發(fā)明與臆造,用不著供入神殿,想起歷史上那么多不食人間煙火的科學(xué)家(多半是數(shù)學(xué)家),自以為發(fā)現(xiàn)了宇宙運(yùn)作的奧秘,是時(shí)候走下神壇了。



物理:

《普通物理學(xué)》第一冊(cè) += 《Physics for Game Developers》

物理我想就到此為此吧,再?gòu)?fù)雜我可要用Newton Engine,ODE了,等待物理卡PPU普及的那天,就可充分發(fā)揮PhysX的功效了,看過最新的《細(xì)胞分裂》游戲Demo演示,成千上萬個(gè)Box瘋狂Collide,骨灰級(jí)玩家該一邊摸錢包一邊流口水了。



二、開源代碼:

Irrlicht

著名的鬼火引擎,從兩年前第一眼看到它,這個(gè)輕量級(jí)的三維圖形引擎,就喜歡上了它。源代碼優(yōu)雅,高效,且不故弄玄虛。值得每個(gè)C++程序員一讀,并不限于圖形編程者。它的周邊中也有不少輕量級(jí)的東西。如Lightfeather擴(kuò)展引擎,ICE、IrrlichtRPG、IrrWizard.還有IrrEdit、IrrKlang、IrrXML可用。(可能是為了效率原因,很多開源作者往往喜歡自己寫XML解析庫(kù),如以上的IrrXML庫(kù),即使有現(xiàn)成的tinyXML庫(kù)可用。這真會(huì)讓tomcat里面塞Axis,Axis里面塞JUDDI,弄得像俄羅斯套娃玩具的Java Web Service Coder們汗顏。)



OGRE

排名第一的開源圖形引擎,當(dāng)然規(guī)模是很大的,周邊也很多。除了以C#寫就的OgreStudio ,ofusion嵌入3DS MAX作為WYSWYG式的三維編輯器也是棒棒的,特別是其幾個(gè)場(chǎng)景、地形插件值得研究。以至于《Pro OGRE 3D Programming》一書專論其用法。搜狐的《天龍八部》游戲就是以其作為圖形引擎,當(dāng)然還另外開發(fā)了引擎插塊啦。我早知道OGRE開發(fā)組中有一個(gè)中國(guó)人謝程序員,他以前做了很多年的傳統(tǒng)軟件編程。有一次天龍八部游戲的圖形模塊的出錯(cuò)信息中包含了一串某程序員的工作目錄,有一個(gè)文件夾名即是謝程序員的英文名,我據(jù)此推斷謝程序員即是搜狐北京的主程??磥碇袊?guó)對(duì)開源事業(yè)還是有所貢獻(xiàn)的嘛,王開源哥哥的努力看來不會(huì)白費(fèi)!(^-^)不過我偵測(cè)的手法也有些像網(wǎng)站數(shù)據(jù)庫(kù)爆庫(kù)了,非君子之所為作。



RakNet

基于UDI的網(wǎng)絡(luò)庫(kù),竟還支持聲音傳輸,以后和OpenVision結(jié)合起來做個(gè)視聊程序試試。



Blender

聲譽(yù)最盛的開源三維動(dòng)畫軟件,竟還帶一個(gè)游戲引擎。雖然操作以快捷鍵驅(qū)動(dòng),也就是說要背上百來個(gè)快捷鍵才能熟練使用。但是作為從商業(yè)代碼變?yōu)殚_源之作,威脅三維商業(yè)巨頭的輕騎兵,歷經(jīng)十年錘煉,代碼達(dá)百萬行,此代碼只應(yīng)天上有,人間哪得幾回看,怎可不作為長(zhǎng)期的源碼參考?



風(fēng)魂

二維圖形庫(kù)。云風(fēng)大哥的成名之作。雖然不代表其最高水平(最高水平作為商業(yè)代碼保存在廣州網(wǎng)易互動(dòng)的SVN里呢),但是也可以一仰風(fēng)采了。



圣劍英雄傳

二維RPG。幾個(gè)作者已成為成都錦天的主力程序員。錦天的老總從一百萬發(fā)家,三年時(shí)間身價(jià)過億,也是一代梟雄了。這份代碼作為幾年前的學(xué)生作品也算可以了,因?yàn)橐粋€(gè)工程講究的是四平八穩(wěn),并不一定要哪個(gè)模塊多么出彩。反正我是沒有時(shí)間寫這么一個(gè)東東,連個(gè)美工都找不到,只能整天想著破解別人的資源(^-^)。



Boost

C++準(zhǔn)標(biāo)準(zhǔn)庫(kù),我想更多的時(shí)候可以參考學(xué)習(xí)其源代碼。



Yake

我遇到的最好的輕量級(jí)游戲框架了。在以前把一個(gè)工程中的圖形引擎從Irrlicht換成OGRE的嘗試中,遇到了它。OGRE的周邊工程在我看來都很庸腫,沒有完善文檔的情況下看起來和Linux內(nèi)核差不多。不過這個(gè)Yake引擎倒是很喜歡。它以一個(gè)FSM有限狀態(tài)機(jī)作為實(shí)時(shí)程序的調(diào)度核心,然后每個(gè)模塊:物理、圖形、網(wǎng)絡(luò)、腳本、GUI、輸入等等都提供一個(gè)接口,接口之下再提供到每種具體開源引擎的接口,然后再接具體引擎。通過這樣層層抽象,此時(shí)你是接Newton Engine,ODE還是PysX都可以;是接OGRE,Crystal Space還是Irrlicht都可以;是接RakNet還是LibCurl都可以;是接Python,Lua還是Ruby都可以,是接CEGUI還是others,是接OIS還是others(呵呵,記不起來others)都可以。所以Yake本質(zhì)上不是OGRE的周邊。雖然用Neoengine的人都倒向了它,但是現(xiàn)在版本還很早。特別是我認(rèn)為,學(xué)習(xí)研究時(shí)一定要有這種抽象之抽象,接口之接口的東西把思維從具體的綁定打開,而開發(fā)時(shí)抽象要有限度的,就像蔡學(xué)鏞在《Java夜未眠》中講的,面向?qū)ο笥玫眠^濫也會(huì)得OOOO癥(面向?qū)ο筮^敏強(qiáng)迫癥)。



Quake Doom系列

據(jù)說很經(jīng)典,卡馬克這種開源的黑客精神就值得贊許。把商業(yè)源代碼放出來,走自己的創(chuàng)新之路,讓別人追去吧。不過Quake與Unreal引擎的三維編輯器是現(xiàn)在所有編輯器的鼻祖,看來要好好看看了。



Nvidia SDK 9.X

三維圖形編程的大寶庫(kù),這些Diret3D與OpenGL的示例程序都是用來展示其最新的顯卡技術(shù)的。硬件廠商往往對(duì)軟件產(chǎn)品不甚在意,源代碼給你看,東西給你用去吧,學(xué)完了還得買我的硬件。Intel的編譯器,PhysX物理引擎大概也都是這樣。Havok會(huì)把它的Havok物理引擎免費(fèi)給別人用嗎?別說試用版,連個(gè)Demo都看不到。所以這套SDK的內(nèi)容可比MS DirectX SDK里面那些入門級(jí)的示例酷多了,反正我是如獲至寶,三月不知愁滋味。不過顯卡要so-so哦。我的GeForce 6600有兩三個(gè)跑不過去,差強(qiáng)人意。



三、網(wǎng)站:

www.CSDN.net

程序員大本營(yíng)吧,軟文與“新技術(shù)秀”討厭了點(diǎn),blog和社區(qū)是精華之所在。



www.GameRes.com

游戲程序員基地,文檔庫(kù)中還有點(diǎn)東西。投稿的接收者Seabug與圣劍英雄傳的主程Seabug會(huì)是同一個(gè)人嗎?一個(gè)在成都錦天擔(dān)當(dāng)技術(shù)重?fù)?dān)的高手還有時(shí)間維護(hù)網(wǎng)站嗎?我不得而知。



“何苦做游戲”網(wǎng)站

名字很個(gè)性,站長(zhǎng)也是歷盡幾年前產(chǎn)業(yè)發(fā)展初期的艱難才出此名字。



www.66rpg.com

二維游戲圖片資源很多,站長(zhǎng)柳柳主推的RPGMaker 軟件也可以玩一玩吧,但對(duì)于專業(yè)開發(fā)者來說不可當(dāng)真。



www.GameDev.net

論壇中有不少熱心的國(guó)外高手在活動(dòng)。



www.SourceForge.net

不用說了,世界最大的開源代碼庫(kù),入金山怎可空手而返?看到國(guó)外那些學(xué)生項(xiàng)目動(dòng)不動(dòng)就像模像樣的。(DirectX的稚形就是英國(guó)的學(xué)生項(xiàng)目,在學(xué)校還被判為不合格。)



www.koders.com

源代碼搜索引擎,支持正則表達(dá)式,google Lab中也有。當(dāng)你某種功能寫不出來時(shí),可以看一下開源代碼怎么寫的,當(dāng)然不過是僅供參考,開源代碼未必都有產(chǎn)品級(jí)的強(qiáng)度。說到google,可看《Google Power Tools Bible》一書,你會(huì)發(fā)現(xiàn),google的眾多產(chǎn)品原來也有這么多使用門道。



這篇小文足足寫了一天半的時(shí)間,不由得使我對(duì)侯捷一樣的技術(shù)作家長(zhǎng)期伏案辛勤勞作深深敬佩了??磥韺?duì)于書籍或者軟件,都應(yīng)該尊重作者或者programmer的才智勞動(dòng)。


]]>
久久天天躁狠狠躁夜夜2020老熟妇| 69国产成人综合久久精品| 久久精品18| 中文字幕久久亚洲一区| 久久99热这里只有精品国产| 日韩精品久久久久久久电影蜜臀| 91视频国产91久久久| 精品久久久久久无码人妻热| 怡红院日本一道日本久久 | 国产精品九九久久免费视频 | 97久久久久人妻精品专区| 欧美伊香蕉久久综合类网站| 久久午夜福利电影| 久久久久久国产精品无码超碰| 精品国产一区二区三区久久蜜臀| 久久亚洲AV成人无码| 国产精品久久网| 久久受www免费人成_看片中文| 91精品国产乱码久久久久久| 日韩欧美亚洲综合久久影院Ds | 久久久久久亚洲精品不卡 | 亚洲人成无码久久电影网站| 国产成人久久精品激情| 欧美日韩精品久久久久| 99re这里只有精品热久久| 伊人久久一区二区三区无码| 久久免费国产精品一区二区| 伊人久久大香线焦AV综合影院| 国内精品久久久久久不卡影院| 久久久老熟女一区二区三区| 亚洲国产精品综合久久一线| 亚洲国产精品久久久久| 久久久久人妻精品一区 | 国产亚洲成人久久| 看久久久久久a级毛片| 亚洲国产成人精品女人久久久 | 久久久久国产一区二区| 久久亚洲国产中v天仙www | 一本久久a久久精品vr综合| 久久人妻少妇嫩草AV蜜桃| 日本精品久久久久中文字幕|