Direct3D_9_Basics.pdf
(
910 KB
)
Pobierz
Basic Direct3D 9
Introduction to Microsoft DirectX 9.0 (Managed Code)
written by Jack Hoxley ( Jack.Hoxley@DirectX4VB.com )
Basic Direct3D 9.0
The Managed Way
By Jack Hoxley
December 2002 / January 2003
v1.1
Jack.Hoxley@DirectX4VB.com
http://www.DirectX4VB.com
- 1 -
Introduction to Microsoft DirectX 9.0 (Managed Code)
written by Jack Hoxley ( Jack.Hoxley@DirectX4VB.com )
Table Of Contents:
Introduction
3
What are 3D graphics, and where does Direct3D fit in?
4
Basic 3D theory
5
… The 3D world-space
5
… Siple Geoetry
5
… Textures
6
… Transforations
6
… … The world transform
6
… … The camera transform
6
… … The projection transform
7
… Meshes and Models
7
The Managed-code interfaces for Direct3D9
8
… How to set up your computer to program with D3D9
8
… Setting up an end-user’s computer to run a D3D9 app.
9
Introduction To The Source Code
10
… The basic framework for a D3D9 application
10
The Source Code
14
… Imports and Global Declarations
14
… Initialising Direct3D9
16
… Terminating Direct3D9
22
… Setting the properties for the engine
22
In More Depth: Geometry
24
… How Geometry is stored
24
… How Geometry is rendered
24
… Completing the engine: loadGeometry()
28
In ore epth: Textures
31
… How is a texture represented on-disk
31
… How is a texture represented in memory
32
… Texture coordinate theory
33
… Completing the engine: loadTextures()
34
Matrices revisited
39
… Order counts
39
… The D3D Math helper library
40
… Completing the engine: oneFrameUpdate()
40
Finishing it all off
43
… issues when rendering to the screen
43
… Completing the engine: oneFrameRender()
45
Using the engine
48
… linking the class to the form
48
Conclusion
50
… What you should have learned
50
… hat to do next
50
… Other resources to look at
51
About the Author (me!)
53
… Acknoledgents
53
References
54
isclaier
55
Revision and Latest Information
56
- 2 -
Introduction to Microsoft DirectX 9.0 (Managed Code)
written by Jack Hoxley ( Jack.Hoxley@DirectX4VB.com )
Introduction
This tutorial will introduce you to Microsoft’s 3D-graphics programming library –
Direct3D 9. For quite some time now, Microsoft has been particularly active in
developing their gaming/multimedia development tools – DirectX being their
flagship software library. Many of you will know that at least 75% of games
shipped currently require a version of DirectX to be installed on the system, thus
it is an incredibly important system to 1000’s of developers and 100’s of
companies across the planet.
For the last 2 years I’ve been active in the community – writing tutorials, running
my website and generally spending too much time talking on MSN/ICQ/web
forums etc… My website is one of the biggest in the community, sporting over
120 tutorials/articles/reviews. In March/April 2002 I was accepted onto the beta-
team for the next release of DirectX9 – my job was to test the new programming
libraries and provide feedback to the developers at Microsoft and point out any
problems, bugs or errors. That was over 6 months ago now – and as I sit down to
write this article I am drawing on my experience with this library over the last 3
beta’s and 3 release candidates; along with my experience’s with versions 5,6,7
and 8. Over the next few pages I hope to give you push in the right direction to
using Direct3D9.
This document is aimed at absolute beginners to intermediate games/multimedia
programmers. However, it is NOT aimed at beginner programmers – I will take
the time to explain a few of the general programming concepts I use, but you do
need to be familiar with the .Net / managed languages AND be a confident
general programmer.
Those with a solid understanding of Direct3D 7 or 8 can probably jump past the
first few pages and get straight to the code – for those of you with little/no
experience of the wonderful world that is Direct3D I suggest you start by turning
the page…
- 3 -
Introduction to Microsoft DirectX 9.0 (Managed Code)
written by Jack Hoxley ( Jack.Hoxley@DirectX4VB.com )
What are 3D graphics,
and where does Direct3D fit in?
3D graphics are the latest major advance in computer-generated imagery. To put
it simply, the world we interact with is 3 dimensional all objects have height,
width and depth. However, the computer screen is 2 dimensional – it has height
and width, but no perceivable depth. 3D graphics, as we’re going to look at them,
is the process of taking a 3D representation of the world (stored in memory) and
presenting it on a computer screen.
Traditional (and the still the majority) of computer graphics are 2D, the text you
are reading now, the windows-operating system, the photo’s you take on a digital
camera and manipulate using Paintshop-Pro or Photoshop – all are 2D. We have
been able to – for quite a long time – render 3D images using PC technology.
However, they have often taken many, many hours to render the complete image
– Ray Tracing, one of the long-standing rendering methods is still an area of
research and can still take several minutes (at least) to render a single image of a
3D scene.
Consumer-level hardware has accelerated exponentially in the last 5 years, such
that the processing power required for these 3D graphics is now in the hands of
‘normal’ people – not those with significant research budgets/corporate funding.
The Pentium-4 3ghz processors, the GeForce FX’s – provide us with more than
enough power to render these 3D images at interactive/real-time speeds. This is
the area we will be working with.
For all the hardware, and for all the mathematics involved in this level of
programming, we still need a low-level set of libraries that allows us to
communicate with this hardware. To be honest, it is a little more complicated
than I make out – but if you’re new to this field I don’t want to confuse you too
quickly! Microsoft, as we all know, have their primary business in Operating
Systems – Windows. However, this OS has never been particularly fast when it
comes to the huge processing power required by 3D graphics – there are too
many parts of the OS that get in the way. So, Microsoft developed DirectX – more
specifically for this case, Direct3D.
Direct3D exists between the hardware (your expensive 3D card) and us (the
programmers). We tell Direct3D to do something (draw for example) and it will
tell the hardware what we want. The key to it’s importance is that Direct3D is a
hardware-abstraction-layer (HAL), we use the same code to interface with ATI
cards, Matrox cards and Nvidia cards – Direct3D (and the hardware drivers) deal
with the finer differences between vendors. Anyone who’s been around long
enough to remember old-skool DOS programming (luckily I’ve not!) will know the
problems caused by getting a hardware-dependent program running on multiple
hardware configurations.
Combine all of these factors together and we have:
1. An abstract way of “talking” to any PC’s graphics hardware
2. A very fast way to draw complex 3D images.
3. A way to render interactive, animated, 3D scenes.
Let the fun begin…
- 4 -
Introduction to Microsoft DirectX 9.0 (Managed Code)
written by Jack Hoxley ( Jack.Hoxley@DirectX4VB.com )
Basic 3D Theory
Okay, I lie. The fun doesn’t begin yet – we’ve got 3D theory to cover first. You
can’t get very far without a reasonable understanding of how 3D graphics are
constructed.
It helps, at this point, to be familiar with geometrical maths – planes, vectors,
matrices, linear equations etc… However, if you’re not too keen on this then you’ll
survive – but you might wish to dig-out old text books, or even buy a new one
(see the references section for some suggestions).
The
real
mathematics behind 3D graphics gets stupidly complicated very quickly.
For anyone but the most advanced graphics programmers it really isn’t worth
getting into it too deeply. Over time you may get more familiar with the core
concepts – but for now I’m going to try and explain only the parts you really need
to know in order to get started…
The 3D World Space
This is the most important concept to understand. Our 2D screen has width and
height: X and Y dimensions. 3D adds depth: the Z dimension. We create a
representation in memory of our world using 3D coordinates (3 numbers
representing x, y & z), we then let D3D and the graphics hardware apply various
algorithms to turn it into a 2D coordinate that can be drawn on the screen.
X,Y and Z – Once you get into D3D properly, these coordinates won’t always
match up as you might expect – i.e. the ‘z’ coordinate you give a point won’t
always translate into
depth
when drawn on the screen. As you move the camera
around and translate geometry it could correspond with an up/down movement
on the screen.
World space is defined in an un-specified measuring system – it’s not directly
feet/inches or metes/kilometres. However, it does fit best to a metric system. You
can (and CAD/engineering packages will do this) set it up so that 1 world unit
equals 1 metric meter, but it does get quite complicated.
Angles are always specified in radians, never degrees. It is very easy to get this
muddled up and pass a function a
valid
parameter, but one that doesn’t really
make any sense when displayed on screen.
Simple Geometry
Everything we render on the screen can be traced back to simple geometry –
triangles. All objects and meshes are made up of triangles (modern games use
many thousands for a single model). A triangle is made up of 3 vertices and is
always convex and planar – 2 very useful properties when it comes to rendering
the final image to the screen.
A vertex (plural: vertices) is the simplest, and most primitive piece of geometric
data used by 3D graphics. At the simplest level they are just a position [x,y,z] in
3D space. We will extend this later on by including information for lights, textures
and colour at that particular position.
For example, a cube has 6 faces (each square). A square face will need to be
made from 2 triangles, thus the whole cube will be made from 12 triangles. At
best, you can describe this with 8 vertices (one for each corner of the cube), the
triangles will be made by (in layman’s terms) joining up 3 of these vertices.
- 5 -
Plik z chomika:
erykxd
Inne pliki z tego folderu:
Cemetery Junction ( 2010 ) LEKTOR PL.avi
(716760 KB)
Byzuch 2 ( 2010 ).avi
(717084 KB)
Drużyna A ( 2010 ) LEKTOR PL.rmvb
(389334 KB)
Świat rzeki ( 2010 ) LEKTOR PL.rmvb
(609730 KB)
The Runaways - Prawdziwa historia ( 2010 ) LEKTOR PL.avi
(663684 KB)
Inne foldery tego chomika:
- █▬█ █ ▀█▀ NOWOŚCI FILMOWE 2013 ▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
Boże Narodzenie
Coś dla fanów GOTHICA
Crack
Dokumenty
Zgłoś jeśli
naruszono regulamin