ebook img

Advanced Linux 3D Graphics Programming PDF

640 Pages·2001·13.156 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 Advanced Linux 3D Graphics Programming

Y L F M A E T Y L F M A E T Team-Fly® Team-Fly® Advanced Linux 3D Graphics Programming Norman Lin Wordware Publishing, Inc. LibraryofCongressCataloging-in-PublicationData Lin,Norman. AdvancedLinux3Dgraphicsprogramming/byNormanLin. p. cm. Includesindex. ISBN 1-55622-853-8(pbk.) 1. Computergraphics. 2. Linux. 3. Three-dimensionaldisplaysystems. I. Title. T385.L5555 2001 006.6'93--dc21 2001026370 CIP ©2001,WordwarePublishing,Inc. AllRightsReserved 2320LosRiosBoulevard Plano,Texas75074 Nopartofthisbookmaybereproducedinanyformorby anymeanswithoutpermissioninwritingfrom WordwarePublishing,Inc. PrintedintheUnitedStatesofAmerica ISBN1-55622-853-8 10 9 8 7 6 5 4 3 2 1 0106 BlenderisaregisteredtrademarkofNotaNumberB.V. Otherproductnamesmentionedareusedforidentificationpurposesonlyandmaybetrademarksoftheirrespectivecompanies. AllinquiriesforvolumepurchasesofthisbookshouldbeaddressedtoWordwarePublishing,Inc.,attheabove address.Telephoneinquiriesmaybemadebycalling: (972)423-0090 iii Contents Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xii Chapter 1 Basic Linux 3D Graphics Concepts . . . . . . . . . . . . . . . . . . 1 2DGraphicsFundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 3DGraphicsFundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3DCoordinateSystemsandVectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 PerspectiveProjection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 SpecificMatrixTransformations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 OtherMatrixProperties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Thel3dLibraryClasses. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Samplel3dProgram. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 l3dDirectoryStructure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 TheFive-StepProcessofl3dPrograms. . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Overviewofl3dClasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 ApplicationsandEvents. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2DGraphics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 ConcreteFactoryManagement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 SpecifyingGeometryandBehavior. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Fixed-andFloating-PointMath. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Summaryofl3dClasses. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 LinuxProgrammingTools. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Linux3DModeling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 BlenderInterfaceandCommands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 ExportingandImportingBlenderModels. . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Chapter 2 Rendering and Animation Techniques for 3D Polygons . . . . . . 39 VertexAnimationand3DMorphing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 SampleProgram:morph3d. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Lighting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 MathematicalModelsforComputingLight. . . . . . . . . . . . . . . . . . . . . . . . . . . 49 SelfLighting. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 AmbientLighting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 DiffuseReflection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 SpecularReflection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 MultipleLightSourcesandComponents. . . . . . . . . . . . . . . . . . . . . . . . . . . 57 RadiosityandRayTracing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 DynamicorStaticLightingComputations . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Fog. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 RenderingTechniquesforDrawingLight. . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 FlatShading. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 iv Contents GouraudShading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 PhongShading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 LightMaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 TextureMapping. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Step1:DefineaTexture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 StoringTextureData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 ClassesforLoadingTexturesfromDisk . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 PracticalIssuesinDealingwithTextureImageFiles. . . . . . . . . . . . . . . . . . . . . 73 Step2:DefineaTextureSpace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Step3:MapBetweenTextureSpaceandWorldSpace . . . . . . . . . . . . . . . . . . . . . 76 Calc:ASymbolicAlgebraPackage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 StartingandExitingCalc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Stack-BasedComputation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 EnteringandEditingMathematicalEntities . . . . . . . . . . . . . . . . . . . . . . . . . 82 SolvingSystemsofEquations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 SolvingtheTextureMappingEquationswithCalc. . . . . . . . . . . . . . . . . . . . . . 86 Step4:ReverseProjectfromScreenCoordinatesintoTextureCoordinates. . . . . . . . . . 89 Step5:MapTextureCoordinatestoIntegerIndicesandDraw. . . . . . . . . . . . . . . . . 92 AnOptimizedTextureMappingStrategy:u/z,v/z,1/z. . . . . . . . . . . . . . . . . . . . . 93 TheDivisionOperationandTextureMapping . . . . . . . . . . . . . . . . . . . . . . . . 95 AssociatingTextureswith3DPolygons. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 RasterizationClassesfor3DPolygons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 AnAbstract3DRasterizer:l3d_rasterizer_3d . . . . . . . . . . . . . . . . . . . . . . . . 98 ASoftware3DRasterizerImplementation:l3d_rasterizer_3d_sw_imp . . . . . . . . . . 101 AMesa/OpenGL3DRasterizerImplementation:l3d_rasterizer_3d_mesa_imp. . . . . . 115 SampleProgram:textest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 LightMappingRevisited. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 SoftwareLightMapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 Surfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 SurfaceCache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 LightMappedPolygons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 SoftwareRasterizationofLightMaps. . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 HardwareLightMapping. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 SampleProgram:lightmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 ShadowsandLightMaps. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 Chapter 3 3D Modeling with Blender. . . . . . . . . . . . . . . . . . . . . 161 Tutorial:CreatingandExportingCompatible,Textured3DMorphTargets . . . . . . . . . . . 161 TheStartingMorphMesh. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 InsertingTwoMorphTargetsintoBlender. . . . . . . . . . . . . . . . . . . . . . . . . . . 163 DeformingtheMesh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 ApplyingaTextureandAssigningTextureCoordinates. . . . . . . . . . . . . . . . . . . . 167 TestingtheMorphinBlender. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 ExportingtheTwoMorphTargets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 ExportingtheTextureInformation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 ImportingtheMorphTargetsintoaProgram . . . . . . . . . . . . . . . . . . . . . . . . . 175 Tutorial:UsingInverseKinematicsandRoto-scopingtoModela WalkingHumanFigure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 InverseKinematics:Definition. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 CreatinganIkaChaininBlender. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 Contents v WorkingwithIkaChains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 CreatingtheArmIkas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 CreatingtheMainBodyIka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 ParentingtheIkasintoaHierarchy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 TestingtheIkaChains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 AnimatingtheIkaChains. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 ConnectingIkaChainsandMeshes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 TexturingandExportingtheModel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 ImportingtheTexturedIkaMeshes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 RotoscopingandInverseKinematics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 ProgrammingIKandFK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 Chapter 4 Visible Surface Determination I: General Techniques . . . . . . 203 TheGoalsofVSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 Back-FaceCulling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 3DConvexityandBack-FaceCulling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 SampleProgram:backface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 Classl3d_World_Backface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 ViewFrustumCulling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 DefiningaViewFrustum. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 ComputingtheFrustuminWorldCoordinates . . . . . . . . . . . . . . . . . . . . . . . 220 Classl3d_Viewing_Frustum. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 UsingtheFrustumPlanes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 HierarchicalViewFrustumCulling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 BoundingSpheresandtheViewFrustum. . . . . . . . . . . . . . . . . . . . . . . . . . 225 ComputingBoundingSpheres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Classl3d_bounding_sphere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 OtherBoundingVolumes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 ClippingAgainsttheViewFrustum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 SampleProgram:frustum. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 Classl3d_World_Frustum. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 ThePainter’sAlgorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 TheZBufferAlgorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 GeneralObservationsabouttheZBuffer . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 ASoftwareZBuffer:Classl3d_rasterizer_3d_zbuf_sw_imp. . . . . . . . . . . . . . . . . 248 Mesa/OpenGLZBuffering. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 FactoryManagerforZBufferedRasterizers . . . . . . . . . . . . . . . . . . . . . . . . . 261 SampleProgram:texzbuf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 ZBuffer-likeAlgorithms. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 Chapter 5 Visible Surface Determination II: Space-partitioning Techniques . . . . . . . . . . . . . . . . . . 267 BinarySpacePartitioningTrees,Octrees,andRegularSpatialPartitioning. . . . . . . . . . . 267 UsingaBSPTreetoPartiallyPre-sortPolygons . . . . . . . . . . . . . . . . . . . . . . . 271 ChoosingaSplittingPlane. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 Back-to-FrontRendering(Painter’sAlgorithmRevisited) . . . . . . . . . . . . . . . . . 274 Front-to-BackRendering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 CombiningBSPTreesandBoundingVolumes . . . . . . . . . . . . . . . . . . . . . . . 275 SampleProgram:bsp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 vi Contents Classesl3d_halfspaceandl3d_bsptree . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 Classl3d_world_bsptree. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 TheMainProgram. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290 TheWorldDatabase,Revisited . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 LeafyBSPTrees:AutomaticConvexPartitioningofSpace. . . . . . . . . . . . . . . . . . 293 CreatingaLeafyBSPTree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 MethodsforLeafyBSPTreesinClassl3d_bsptree. . . . . . . . . . . . . . . . . . . . . 296 SampleProgram:leafybsp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 Axis-alignedBSPTreesandMiniBSPTrees . . . . . . . . . . . . . . . . . . . . . . . . . 302 BSPTreeasaMulti-resolutionSolid-ModelingRepresentation . . . . . . . . . . . . . . . 303 BSPTreesandDimensionIndependence . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 Octrees. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 RegularSpatialPartitioning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308 PortalsandCells . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308 TheMainIdeasBehindthePortalAlgorithm . . . . . . . . . . . . . . . . . . . . . . . . . 308 RenderingaPortalWorld. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 ObservationsaboutthePortalScheme. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 PortalsasaConnectivityGraph. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 AdvantagesandDisadvantages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 Back-FaceCulling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 Clipping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 ConvexityorNon-Convexity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 MovingtheCameraandObjectsWithinaPortalEnvironment. . . . . . . . . . . . . . . 315 PortalsandtheNearZPlane. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 Shadows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 Mirrors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320 PortalsandOtherRenderingMethods. . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 ClassesforPortalsandSectors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322 Classl3d_polygon_3d_portal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322 Classl3d_sector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 Classl3d_world_portal_textured_lightmapped_obj. . . . . . . . . . . . . . . . . . . . . 329 Classl3d_rasterizer_2d_sw_lighter_imp . . . . . . . . . . . . . . . . . . . . . . . . . . 344 Classl3d_pipeline_world_lightmapped. . . . . . . . . . . . . . . . . . . . . . . . . . . 351 SampleProgram:porlotex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 OtherVSDAlgorithms. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 Chapter 6 Blender and World Editing . . . . . . . . . . . . . . . . . . . . 359 WorldEditing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 NoWorldEditor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 WriteYourOwnWorldEditor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 AdaptanExistingEditor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 UsingBlenderforPortalWorlds. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 MainIdeasofaBlenderPortalWorldEditor . . . . . . . . . . . . . . . . . . . . . . . . . 364 Step-by-StepGuidetoWorldDesign. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 DataFlowwithintheWorldEditingSystem. . . . . . . . . . . . . . . . . . . . . . . . . . 368 CreatingSectorsandPortals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 Tutorial:CreatingAlignedPortalsviaExtrusionandSeparation . . . . . . . . . . . . . . . 371 Tutorial:AligningPortalsfromSeparateMeshes . . . . . . . . . . . . . . . . . . . . . . . 374 TipsforWorkingwithPortals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382 Portalization:GeneratingPortalConnectivity. . . . . . . . . . . . . . . . . . . . . . . . . . . 385 Contents vii PerlScripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387 ArchitectureofthePerlPortalizationSystem . . . . . . . . . . . . . . . . . . . . . . . . . 389 StructuralModules. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390 ParsingandGeneratorModules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415 ControllingScripts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429 EmbeddingLocation,Orientation,Texture,Actor,andOtherInformationintoMeshes. . . . . 430 BasicIdeasofAssociatingAttributeswithObjects . . . . . . . . . . . . . . . . . . . . . . 431 StoreanID,Location,andOrientationinOverlappingEdges . . . . . . . . . . . . . . . 431 TheToolBlend_at:RemoteControlofBlender. . . . . . . . . . . . . . . . . . . . . . . 433 ConfigurationandTestingofblend_at . . . . . . . . . . . . . . . . . . . . . . . . . . . 434 SpecificMeshAttributesUsedbythePortalizationSystem. . . . . . . . . . . . . . . . . . 437 TheNameAttribute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437 TheTypeAttribute. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437 AttributesforSectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437 AttributesforActors. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439 ParsingofAttributesbyVidscParser.pmandvidinfo. . . . . . . . . . . . . . . . . . . . 440 ProgramListingsforblend_at . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 Classvertex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447 Classblender_config. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447 Classblender_controller. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448 Classblender_xcontroller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449 Tutorial:CreatingaTexturedRoomwithActors . . . . . . . . . . . . . . . . . . . . . . . 463 TipsforWorkingwithAttributes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473 SummaryofBlenderandPortalWorlds. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474 OtherWorldEditingIdeas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475 PortalizedRegularSpatialPartitioning. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475 BSPTreeandOctree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476 Non-convexSector-basedPartitioning. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478 Chapter 7 Additional Graphics Techniques. . . . . . . . . . . . . . . . . . 479 SpecialEffects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479 EnvironmentMapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480 Billboards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484 LensFlare. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486 ParticleSystems. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487 PhysicsandParticleSystems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488 Real-TimeUpdate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489 SampleProgram:particle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490 CommentsontheSampleProgram’sPhysics. . . . . . . . . . . . . . . . . . . . . . . . 496 SomeIdeasforYoutoTry. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496 NaturalPhenomena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497 BumpMapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499 Multi-passTechniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500 AdvancedTechniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501 CurvedSurfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501 LevelofDetail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505 Billboards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506 EdgeCollapse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506 BSPTree. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507 TextureLODTechniques:MIPMapping . . . . . . . . . . . . . . . . . . . . . . . . . . 508 viii Contents Landscapes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509 StoringLandscapesasHeightFields . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509 GeneratingFractalLandscapes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510 RenderingandLODTechniquesforLandscapes . . . . . . . . . . . . . . . . . . . . . . 511 CameraTracking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513 Chapter 8 Non-Graphical Techniques for Games and Interactive Environments . . . . . . . . . . . . . . . . . . . . . 515 Sound. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515 BasicsofDigitalSound. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516 TheRPlayServer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519 UsingTCP/IPNetworkingtoCommunicatewiththeServer . . . . . . . . . . . . . . . . . 520 Classl3d_sound_client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 521 Classl3d_sound_server_rplay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522 TCP/IPNetworking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524 TheClient. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524 TheServer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526 RunningtheSampleServerandClient. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529 Non-BlockingOperations. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529 WhatDatatoSend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530 CollisionDetection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530 IntersectionTestingandBoundingVolumes. . . . . . . . . . . . . . . . . . . . . . . . . . 531 Sphere-to-Sphere. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532 Ray-to-Polygon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532 Ray-to-Sphere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535 Sphere-to-Polygon. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536 TunnelingandSweepTests. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538 MultipleSimultaneousCollisionsandCollisionResponse . . . . . . . . . . . . . . . . . . 541 AllowingPenetration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541 AvoidingPenetrationwithTemporalSearch . . . . . . . . . . . . . . . . . . . . . . . . 542 Classl3d_collidable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543 Classl3d_collidable_sphere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544 Classl3d_polygon_3d_collidable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548 Classl3d_polygon_3d_textured_lightmapped_collidable. . . . . . . . . . . . . . . . . . . 551 Classl3d_camera_collidable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552 Classl3d_world_portal_textured_lightmapped_obj_colldet . . . . . . . . . . . . . . . . . 553 Plug-inObjectSeeker,Classl3d_plugin_videoscape_mesh_seeker . . . . . . . . . . . . . 563 SampleProgram:collide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574 MoreAdvancedCollisionDetectionandResponse . . . . . . . . . . . . . . . . . . . . . . 576 Physics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577 SomeBasicConcepts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577 RigidBodyDynamics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578 Real-TimeUpdateandNumericalIntegration . . . . . . . . . . . . . . . . . . . . . . . . . 579 ArtificialIntelligence. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582 Chapter 9 What Lies Ahead? . . . . . . . . . . . . . . . . . . . . . . . . . 583 ContentDevelopmentSystems. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583 GameBlender/Blender2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583 WorldFoundry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 590 Contents ix WhatDoesThisMeanfor3DProgrammers? . . . . . . . . . . . . . . . . . . . . . . . . . 598 TheFuture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600 Perspective . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600 Appendix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603 CDInstallation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603 License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603 ContentsoftheCD-ROM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603 QuickStartGuide. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604 Directories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604 InstallingtheSampleProgramsandOtherSoftware . . . . . . . . . . . . . . . . . . . . 605 TroubleshootingtheSamplePrograms. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 607 SomeCommentsontheSamplePrograms. . . . . . . . . . . . . . . . . . . . . . . . . . . 607 HardwareAcceleration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608 PortingtheCodetoMicrosoftWindows. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 609 ToolsUsedtoPreparethisBook. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 610 Resources. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611 3DGraphicsProgramming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612 3DModeling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612 3DInformationandApplications. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613 GeneralProgramming. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613 Other. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614 References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617

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.