ebook img

Introduction to 3D game programming with DirectX 9.0 PDF

421 Pages·2003·6.616 MB·English
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Introduction to 3D game programming with DirectX 9.0

Y L F M A E T Team-Fly® Introduction to 3D Game Programming with DirectX® 9.0 Frank D. Luna Technical review by Rod Lopez Wordware Publishing, Inc. LibraryofCongressCataloging-in-PublicationData Luna,FrankD. Introductionto3DgameprogrammingwithDirectX9.0/byFrankD.Luna. p. cm. ISBN 1-55622-913-5(pbk.) 1. Computergames--Programming. 2. DirectX. I. Title. QA76.76.C672L832003 794.8'15268--dc21 2003005834 CIP ©2003,WordwarePublishing,Inc. AllRightsReserved 2320LosRiosBoulevard Plano,Texas75074 Nopartofthisbookmaybereproducedinanyformorbyanymeans withoutpermissioninwritingfromWordwarePublishing,Inc. PrintedintheUnitedStatesofAmerica ISBN1-55622-913-5 10 9 8 7 6 5 4 3 2 1 0305 DirectXisaregisteredtrademarkofMicrosoftCorporationintheUnitedStatesand/orother countries. Allbrandnamesandproductnamesmentionedinthisbookaretrademarksorservicemarks of their respective companies. Any omission or misuse (of any kind) of service marks or trademarks should not be regarded as intent to infringe on the property of others. The publisher recognizes and respects all marks used by companies, manufacturers, and developersasameanstodistinguishtheirproducts. All inquiries for volume purchases of this book should be addressed to Wordware Publishing,Inc.,attheaboveaddress.Telephoneinquiriesmaybemadebycalling: (972)423-0090 Tomyparents,FrankandKathryn iii This page intentionally left blank. Contents Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . xv Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . xvii PartI Mathematical Prerequisites . . . . . . . . . . . . . . 1 Vectorsin3-Space. . . . . . . . . . . . . . . . . . . . . . . . . . 2 VectorEquality. . . . . . . . . . . . . . . . . . . . . . . . . 5 ComputingtheMagnitudeofaVector. . . . . . . . . . . . . 6 NormalizingaVector. . . . . . . . . . . . . . . . . . . . . . 7 VectorAddition. . . . . . . . . . . . . . . . . . . . . . . . . 7 VectorSubtraction . . . . . . . . . . . . . . . . . . . . . . . 8 ScalarMultiplication . . . . . . . . . . . . . . . . . . . . . . 9 DotProducts . . . . . . . . . . . . . . . . . . . . . . . . . . 9 CrossProducts . . . . . . . . . . . . . . . . . . . . . . . . 10 Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Equality,ScalarMultiplication,andAddition. . . . . . . . . 12 Multiplication . . . . . . . . . . . . . . . . . . . . . . . . . 13 TheIdentityMatrix. . . . . . . . . . . . . . . . . . . . . . 14 Inverses. . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 TheTransposeofaMatrix . . . . . . . . . . . . . . . . . . 15 D3DXMatrices . . . . . . . . . . . . . . . . . . . . . . . . 16 BasicTransformations . . . . . . . . . . . . . . . . . . . . . . . 18 TheTranslationMatrix. . . . . . . . . . . . . . . . . . . . 20 TheRotationMatrices . . . . . . . . . . . . . . . . . . . . 21 TheScalingMatrix . . . . . . . . . . . . . . . . . . . . . . 22 CombiningTransformations . . . . . . . . . . . . . . . . . 23 SomeFunctionstoTransformVectors. . . . . . . . . . . . 25 Planes(Optional). . . . . . . . . . . . . . . . . . . . . . . . . . 25 D3DXPLANE. . . . . . . . . . . . . . . . . . . . . . . . . 26 PointandPlaneSpatialRelation . . . . . . . . . . . . . . . 27 Construction . . . . . . . . . . . . . . . . . . . . . . . . . 27 NormalizingaPlane. . . . . . . . . . . . . . . . . . . . . . 28 TransformingaPlane. . . . . . . . . . . . . . . . . . . . . 29 NearestPointonaPlanetoaParticularPoint. . . . . . . . 29 Rays(Optional). . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Rays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Ray/PlaneIntersection . . . . . . . . . . . . . . . . . . . . 31 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 v vi Contents PartII Direct3D Fundamentals. . . . . . . . . . . . . . . . 33 Chapter1 Direct3D Initialization . . . . . . . . . . . . . . . . 35 1.1Direct3DOverview . . . . . . . . . . . . . . . . . . . . . . 35 1.1.1TheREFDevice . . . . . . . . . . . . . . . . . . . . 36 1.1.2D3DDEVTYPE . . . . . . . . . . . . . . . . . . . . . 37 1.2COM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 1.3SomePreliminaries . . . . . . . . . . . . . . . . . . . . . . 37 1.3.1Surfaces . . . . . . . . . . . . . . . . . . . . . . . . . 38 1.3.2Multisampling. . . . . . . . . . . . . . . . . . . . . . 39 1.3.3PixelFormats . . . . . . . . . . . . . . . . . . . . . . 40 1.3.4MemoryPools. . . . . . . . . . . . . . . . . . . . . . 41 1.3.5TheSwapChainandPageFlipping . . . . . . . . . . 42 1.3.6DepthBuffers. . . . . . . . . . . . . . . . . . . . . . 43 1.3.7VertexProcessing. . . . . . . . . . . . . . . . . . . . 44 1.3.8DeviceCapabilities . . . . . . . . . . . . . . . . . . . 44 1.4InitializingDirect3D . . . . . . . . . . . . . . . . . . . . . . 45 1.4.1AcquiringanIDirect3D9Interface. . . . . . . . . . . 46 1.4.2CheckingforHardwareVertexProcessing . . . . . . 47 1.4.3FillingOuttheD3DPRESENT_PARAMETERS Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 1.4.4CreatingtheIDirect3DDevice9Interface . . . . . . . 50 1.5SampleApplication:InitializingDirect3D. . . . . . . . . . . 51 1.5.1d3dUtility.h/cpp . . . . . . . . . . . . . . . . . . . . . 52 1.5.2SampleFramework. . . . . . . . . . . . . . . . . . . 54 1.5.3Sample:D3DInit . . . . . . . . . . . . . . . . . . . . 54 1.6Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 Chapter2 The Rendering Pipeline. . . . . . . . . . . . . . . . 59 2.1ModelRepresentation . . . . . . . . . . . . . . . . . . . . . 60 2.1.1VertexFormats . . . . . . . . . . . . . . . . . . . . . 61 2.1.2Triangles. . . . . . . . . . . . . . . . . . . . . . . . . 62 2.1.3Indices. . . . . . . . . . . . . . . . . . . . . . . . . . 62 2.2TheVirtualCamera . . . . . . . . . . . . . . . . . . . . . . 63 2.3TheRenderingPipeline . . . . . . . . . . . . . . . . . . . . 64 2.3.1LocalSpace . . . . . . . . . . . . . . . . . . . . . . . 65 2.3.2WorldSpace. . . . . . . . . . . . . . . . . . . . . . . 65 2.3.3ViewSpace . . . . . . . . . . . . . . . . . . . . . . . 66 2.3.4BackfaceCulling . . . . . . . . . . . . . . . . . . . . 68 2.3.5Lighting . . . . . . . . . . . . . . . . . . . . . . . . . 69 2.3.6Clipping . . . . . . . . . . . . . . . . . . . . . . . . . 69 2.3.7Projection . . . . . . . . . . . . . . . . . . . . . . . . 70 2.3.8ViewportTransform . . . . . . . . . . . . . . . . . . 72 2.3.9Rasterization . . . . . . . . . . . . . . . . . . . . . . 73 2.4Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Contents vii Chapter3 Drawing in Direct3D . . . . . . . . . . . . . . . . . 75 3.1Vertex/IndexBuffers. . . . . . . . . . . . . . . . . . . . . . 75 3.1.1CreatingaVertexandIndexBuffer . . . . . . . . . . 76 3.1.2AccessingaBuffer’sMemory . . . . . . . . . . . . . 78 3.1.3RetrievingInformationaboutaVertexand IndexBuffer. . . . . . . . . . . . . . . . . . . . . . . . . . 79 3.2RenderStates . . . . . . . . . . . . . . . . . . . . . . . . . 80 3.3DrawingPreparations . . . . . . . . . . . . . . . . . . . . . 81 3.4DrawingwithVertex/IndexBuffers. . . . . . . . . . . . . . 82 3.4.1IDirect3DDevice9::DrawPrimitive. . . . . . . . . . . 82 3.4.2IDirect3DDevice9::DrawIndexedPrimitive . . . . . . 82 3.4.3Begin/EndScene . . . . . . . . . . . . . . . . . . . . 84 3.5D3DXGeometricObjects . . . . . . . . . . . . . . . . . . . 84 3.6SampleApplications:Triangle,Cube,Teapot, D3DXCreate* . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 3.7Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Chapter4 Color . . . . . . . . . . . . . . . . . . . . . . . . . 91 4.1ColorRepresentation . . . . . . . . . . . . . . . . . . . . . 91 4.2VertexColors. . . . . . . . . . . . . . . . . . . . . . . . . . 94 4.3Shading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 4.4SampleApplication:ColoredTriangle. . . . . . . . . . . . . 95 4.5Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Chapter5 Lighting. . . . . . . . . . . . . . . . . . . . . . . . 98 5.1LightComponents . . . . . . . . . . . . . . . . . . . . . . . 98 5.2Materials . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 5.3VertexNormals. . . . . . . . . . . . . . . . . . . . . . . . 101 5.4LightSources . . . . . . . . . . . . . . . . . . . . . . . . . 104 5.5SampleApplication:Lighting. . . . . . . . . . . . . . . . . 107 5.6AdditionalSamples . . . . . . . . . . . . . . . . . . . . . . 109 5.7Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 Chapter6 Texturing. . . . . . . . . . . . . . . . . . . . . . . 111 6.1TextureCoordinates . . . . . . . . . . . . . . . . . . . . . 112 6.2CreatingandEnablingaTexture. . . . . . . . . . . . . . . 113 6.3Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 6.4Mipmaps. . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 6.4.1MipmapFilter . . . . . . . . . . . . . . . . . . . . . 116 6.4.2UsingMipmapswithDirect3D . . . . . . . . . . . . 116 6.5AddressModes . . . . . . . . . . . . . . . . . . . . . . . . 116 6.6SampleApplication:TexturedQuad . . . . . . . . . . . . . 118 6.7Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 viii Contents Chapter7 Blending. . . . . . . . . . . . . . . . . . . . . . . 121 7.1TheBlendingEquation. . . . . . . . . . . . . . . . . . . . 121 7.2BlendFactors . . . . . . . . . . . . . . . . . . . . . . . . . 123 7.3Transparency . . . . . . . . . . . . . . . . . . . . . . . . . 124 7.3.1AlphaChannels . . . . . . . . . . . . . . . . . . . . 125 7.3.2SpecifyingtheSourceofAlpha . . . . . . . . . . . . 125 7.4CreatinganAlphaChannelUsingtheDirectX TextureTool. . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 7.5SampleApplication:Transparency. . . . . . . . . . . . . . 127 7.6Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 Chapter8 Stenciling . . . . . . . . . . . . . . . . . . . . . . 131 8.1UsingtheStencilBuffer . . . . . . . . . . . . . . . . . . . 132 8.1.1RequestingaStencilBuffer. . . . . . . . . . . . . . 133 8.1.2TheStencilTest. . . . . . . . . . . . . . . . . . . . 133 8.1.3ControllingtheStencilTest. . . . . . . . . . . . . . 134 8.1.3.1StencilReferenceValue . . . . . . . . . . . 134 8.1.3.2StencilMask . . . . . . . . . . . . . . . . . 134 8.1.3.3StencilValue . . . . . . . . . . . . . . . . . 135 8.1.3.4ComparisonOperation. . . . . . . . . . . . 135 8.1.3UpdatingtheStencilBuffer. . . . . . . . . . . . . . 135 8.1.4StencilWriteMask . . . . . . . . . . . . . . . . . . 137 8.2SampleApplication:Mirrors . . . . . . . . . . . . . . . . . 137 8.2.1TheMathematicsofReflection . . . . . . . . . . . . 137 8.2.2MirrorImplementationOverview . . . . . . . . . . 139 8.2.3CodeandExplanation . . . . . . . . . . . . . . . . . 140 8.2.3.1PartI . . . . . . . . . . . . . . . . . . . . . 141 8.2.3.2PartII. . . . . . . . . . . . . . . . . . . . . 141 8.2.3.3PartIII . . . . . . . . . . . . . . . . . . . . 142 8.2.3.4PartIV . . . . . . . . . . . . . . . . . . . . 143 8.2.3.5PartV. . . . . . . . . . . . . . . . . . . . . 143 8.3SampleApplication:PlanarShadows. . . . . . . . . . . . . 144 8.3.1ParallelLightShadows . . . . . . . . . . . . . . . . 145 8.3.2PointLightShadows. . . . . . . . . . . . . . . . . . 146 8.3.3TheShadowMatrix . . . . . . . . . . . . . . . . . . 146 8.3.4UsingtheStencilBuffertoPreventDouble Blending . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 8.3.5CodeandExplanation . . . . . . . . . . . . . . . . . 148 8.4Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 PartIII Applied Direct3D . . . . . . . . . . . . . . . . . . 151 Chapter9 Fonts. . . . . . . . . . . . . . . . . . . . . . . . . 153 9.1ID3DXFont . . . . . . . . . . . . . . . . . . . . . . . . . . 153 9.1.1CreatinganID3DXFont. . . . . . . . . . . . . . . . 153 Contents ix 9.1.2DrawingText . . . . . . . . . . . . . . . . . . . . . 154 9.1.3ComputingtheFramesRenderedPerSecond . . . . 155 9.2CD3DFont. . . . . . . . . . . . . . . . . . . . . . . . . . . 155 9.2.1ConstructingaCD3DFont. . . . . . . . . . . . . . . 156 9.2.2DrawingText . . . . . . . . . . . . . . . . . . . . . 156 9.2.3Cleanup . . . . . . . . . . . . . . . . . . . . . . . . 157 9.3D3DXCreateText . . . . . . . . . . . . . . . . . . . . . . . 157 9.4Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 Chapter10 Meshes Part I . . . . . . . . . . . . . . . . . . . . 160 10.1GeometryInfo. . . . . . . . . . . . . . . . . . . . . . . . 160 10.2SubsetsandtheAttributeBuffer . . . . . . . . . . . . . . 161 10.3Drawing . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 10.4Optimizing. . . . . . . . . . . . . . . . . . . . . . . . . . 163 10.5TheAttributeTable . . . . . . . . . . . . . . . . . . . . . 165 10.6AdjacencyInfo. . . . . . . . . . . . . . . . . . . . . . . . 167 10.7Cloning. . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 10.8CreatingaMesh(D3DXCreateMeshFVF). . . . . . . . . 170 10.9SampleApplication:CreatingandRenderingaMesh . . . 171 10.10Summary . . . . . . . . . . . . . . . . . . . . . . . . . . 177 Chapter11 Meshes Part II. . . . . . . . . . . . . . . . . . . . 178 11.1ID3DXBuffer. . . . . . . . . . . . . . . . . . . . . . . . . 178 11.2XFiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 11.2.1LoadinganXFile . . . . . . . . . . . . . . . . . . . 180 11.2.2XFileMaterials. . . . . . . . . . . . . . . . . . . . 181 11.2.3SampleApplication:XFile . . . . . . . . . . . . . . 181 11.2.4GeneratingVertexNormals . . . . . . . . . . . . . 184 11.3ProgressiveMeshes. . . . . . . . . . . . . . . . . . . . . 185 11.3.1GeneratingaProgressiveMesh. . . . . . . . . . . 186 11.3.2VertexAttributeWeights . . . . . . . . . . . . . . 187 11.3.3ID3DXPMeshMethods . . . . . . . . . . . . . . . 188 11.3.4SampleApplication:ProgressiveMesh . . . . . . . 190 11.4BoundingVolumes. . . . . . . . . . . . . . . . . . . . . . 193 11.4.1SomeNewSpecialConstants . . . . . . . . . . . . 194 11.4.2BoundingVolumeTypes . . . . . . . . . . . . . . . 195 11.4.3SampleApplication:BoundingVolumes. . . . . . . 196 11.5Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . 198 Chapter12 Building a Flexible Camera Class . . . . . . . . . . 199 12.1CameraDesign . . . . . . . . . . . . . . . . . . . . . . . 199 12.2ImplementationDetails . . . . . . . . . . . . . . . . . . . 201 12.2.1ComputingtheViewMatrix. . . . . . . . . . . . . 201 12.2.1.1Part1:Translation . . . . . . . . . . . . . 202 12.2.1.2Part2:Rotation . . . . . . . . . . . . . . . 203

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.