# OpenGL Objects Again

Software and s/w Development

Dec 14, 2013 (4 years and 6 months ago)

121 views

DirectX Objects Finalised

Paul Taylor 2010

http://www.fastmovevanlines.com/images/packing_box.jpg

DirectX Buffers

A buffer contains Elements

Elements are basic structures such as

Colours

Integer

Float Values

An Element can contain a maximum of four
components e.g.

Colour B8 G8 R8 A8

Position X Y Z

Texture Coordinates

4x Floats

DirectX Buffers

Three types of buffer

Vertex

Index

Constant

Vertex Buffers

Contain per
-
vertex data

X Elements per Vertex

Offset

Base Vertex Location

Vertex 0

Vertex 1

Position

Colour

TexCoords

Position

Colour

TexCoords

Index Buffers

A String of 16 or 32 bit Indices

Each Index points to a location of an element in
an existing vertex buffer

Offset (2)

Start Index Location (1)

Index Count (2)

Not
used

Not
used

Not
used

0

1

2

Vertex 0

Vertex 1

Position

Colour

TexCoords

Position

Colour

TexCoords

Constant Buffers

New to Dx10

A SINGLE element buffer, no multi
-
element
abilities like vertex buffers

Supply the Shaders with an array of constant
values

Each stage can support 15x 4096 component
constant buffers

The DirectX 10 Pipeline

http://msdn.microsoft.com/en
-
us/library/ee415715%28VS.85%29.aspx

A Constant Buffer can be used to capture
the results of the Stream Output Stage

A Basic Packing Example

SimpleVertex

vertices[] =

{ D3DXVECTOR3( 0.0f, 0.5f, 0.5f ),

D3DXVECTOR3( 0.5f,
-
0.5f, 0.5f ),

D3DXVECTOR3(
-
0.5f,
-
0.5f, 0.5f ), };

D3D10_BUFFER_DESC
bd
;

bd.Usage

= D3D10_USAGE_DEFAULT;

bd.ByteWidth

=
sizeof
(
SimpleVertex

) * 3;

bd.BindFlags

= D3D10_BIND_VERTEX_BUFFER

D3D10_SUBRESOURCE_DATA
InitData
;

InitData.pSysMem

= vertices;

CreateBuffer
( &
bd
, &
InitData
, &
g_pVertexBuffer

);

UINT stride =
sizeof
(
SimpleVertex

);

UINT offset = 0;

IASetVertexBuffers
( 0, 1, &
g_pVertexBuffer
, &stride, &offset );

Draw( 3, 0 );

http://obamarama.org/wp
-
-
the
-
beef.jpg

Buffers can save time!

Translate()

Draw(Beef);

Translate(…)

Draw(Beef);

Translate(…)

Draw(Beef);

http://obamarama.org/wp
-
-
the
-
beef.jpg

http://barfblog.foodsafety.ksu.edu/HappyCow.jpg

Index Buffers are great for reuse!

Warning!!!

You can’t always share your
Normals
!

http://www.songho.ca/opengl/gl_vertexarray.html

http://www.collinslefebvrestoneberger.com/artists/Jens/
ClearCut.jpg

Binary
Spacial

Partitioning (BSP)

In today's gaming world, there are two
important reasons for dividing the world

Rendering without the Z
-
Buffer

Rendering Translucent (Alpha Blend) Polygons

Why?

Modern games have so many polygons that
stretching the z buffer to cover the entire
object range would result in many visual
glitches, as many polygons start falling into
the same depth levels of the buffer.

Translucent Polygons are created using a
blend function which requires back
-
to
-
front
rendering (Painters algorithm)

How?

There are many differing ways and methods to
create maps of polygons, especially static
collections

One of the most common, and a very efficient
way is utilising BSP trees.

The first use of a BSP tree was Doom in 1993

It was only used in a 2D implementation!

A BSP is a specialised implementation
of a Binary Data Tree

Binary Trees are used because:

the ability to be efficiently traversed in both
directions

The ability to add data randomly during the
building of the tree

The speed in which a random location can be
found

Binary Data Trees

http://mathworld.wolfram.com/images/eps
-
gif/CompleteBinaryTree_1000.gif

http://www.gamedev.net/reference/programming
/features/trees2/BuildTree1.gif

The Principal to creating a BSP Tree

Each polygon (3D) / line (2D) creates a dividing
line / plane in the tree where every other
Polygon/line is either in front or behind.

The offending Polygon / Line must be cut into two
parts

It then becomes two separate polygons / lines

One
infront

of the division,

the other behind

Reordering the split

If we split using the red/green line first, our
tree would require no splitting

Problems Creating BSP Lists

http://www.devmaster.net/articles/bsp
-
trees/

http://beehivehairdresser.com/wp
-

Minimising Polygon
Cuts

Balancing the Tree

A short 2D Example

http://web.cs.wpi.edu/~matt/courses/cs563/talks/bsp/bsp.html

Creating a BSP Tree for Lines

(Doom Style)

http://pauillac.inria.fr/~levy//
bsp/

References

http://msdn.microsoft.com/en
-
us/library/bb205133%28VS.85%29.aspx#Buffe
r_Resources