zoukankan
html css js c++ java
发布一部分我的渲染器源码
/**/
/*
---------------------------------------------------------------------------------------------
Eclinse
Len3d.All Rights Reserved.
---------------------------------------------------------------------------------------------
*/
#ifndef _BASE_H
#define
_BASE_H
//
---------------------------------------------------------------------------------------------
# include
"
os.h
"
# ifdef _BASE_DLL
# define DLLPORT DLLEXPORT
#
else
# pragma comment( lib,
"
base.lib
"
)
# ifdef _ECLINSE
# define DLLPORT
#
else
# define DLLPORT DLLIMPORT
# endif
# endif
# define DECLARE_TYPE( _datatype ) _datatype type;
# ifdef INLINE
# undef INLINE
# endif
# ifdef _DEBUG
# define _CRTDBG_MAP_ALLOC
# include
<
crtdbg.h
>
# include
"
debugnew.h
"
# define INLINE
# define VIRTUAL
virtual
# define VIRTUAL_BEGIN( _funcdef ) _funcdef
{
# define VOID_DERIVED_CLASS( _class, _enum )
# define DERIVED_CLASS( _class, _enum )
# define VIRTUAL_END }
#
else
#
//
define USING_SSE
# define INLINE
//
inline
# define VIRTUAL INLINE
# define VIRTUAL_BEGIN( _funcdef ) _funcdef
{
switch
( type )
{
default
:
# define VOID_DERIVED_CLASS( _class, _enum )
break
;
case
_enum: ((_class
*
)
this
)
->
##FUNCCALL;
# define DERIVED_CLASS( _class, _enum )
break
;
case
_enum:
return
((_class
*
)
this
)
->
##FUNCCALL;
# define VIRTUAL_END
break
; }
}
# endif
//
---------------------------------------------------------------------------------------------
namespace
Eclinse
{
class
MemoryManager;
class
Entity;
class
Reference;
class
Instance;
template
<
typename T
>
class
Property;
class
Texture;
class
TextureHandler;
class
Light;
class
PointLight;
class
DistantLight;
class
SpotLight;
# define Group GroupNode
class
Group;
class
Primitive;
class
NudeVertex;
class
AnimatableNudeVertex;
class
Vertex;
class
TradRayVertex;
class
RayVertex;
class
Triangle;
class
RayPrimitive;
class
BaseRayTriangle;
class
TradRayTriangle;
class
RayTriangle;
class
Object;
class
Polygon;
class
Sphere;
class
RayObject;
class
TradRayPolygon;
class
RayPolygon;
class
BSPNode;
class
Material;
class
Camera;
class
Photon;
class
Ray;
class
RayState;
class
RayTracer;
class
Scene;
class
PixelBuffer;
template
<
typename T
>
class
Buffer;
class
Sampler;
class
Mender;
class
Bucket;
class
Tracer;
class
Renderer;
class
Interface;
class
Variable;
class
ShaderInstance;
class
SurfaceShaderInstance;
class
LightShaderInstance;
class
ShadowShaderInstance;
class
DisplacementShaderInstance;
class
PhotonShaderInstance;
class
EmitterShaderInstance;
class
VolumeShaderInstance;
class
LensShaderInstance;
class
ImagerShaderInstance;
class
MainWindow;
class
PhotonMap;
class
Parser;
struct
_Option;
//
---------------------------------------------------------------------------------------------
typedef union _Vector2f
{
struct
{
float
x, y; }
;
struct
{
float
u, v; }
;
float
arr[
2
];
void
operator
+=
(
const
_Vector2f
&
b )
{
x
+=
b.x; y
+=
b.y;
}
void
operator
-=
(
const
_Vector2f
&
b )
{
x
-=
b.x; y
-=
b.y;
}
void
operator
*=
(
float
s )
{
x
*=
s; y
*=
s;
}
}
Vector2f;
//
---------------------------------------------------------------------------------------------
typedef union _Vector3f
{
struct
{
float
x, y, z; }
;
struct
{
float
r, g, b; }
;
float
arr[
3
];
void
operator
+=
(
const
_Vector3f
&
b )
{
x
+=
b.x; y
+=
b.y; z
+=
b.z;
}
void
operator
-=
(
const
_Vector3f
&
b )
{
x
-=
b.x; y
-=
b.y; z
-=
b.z;
}
void
operator
*=
(
float
s )
{
x
*=
s; y
*=
s; z
*=
s;
}
}
Vector3f, Color3f;
//
---------------------------------------------------------------------------------------------
typedef union _Vector4f
{
struct
{
float
x, y, z, w; }
;
struct
{
float
r, g, b, a; }
;
struct
{ Vector3f abc;
float
d; }
;
struct
{ Vector2f uv;
float
du, dv; }
;
float
arr[
4
];
__m128 mm;
void
operator
+=
(
const
_Vector4f
&
b )
{
x
+=
b.x; y
+=
b.y; z
+=
b.z; w
+=
b.w;
}
void
operator
-=
(
const
_Vector4f
&
b )
{
x
-=
b.x; y
-=
b.y; z
-=
b.z; w
-=
b.w;
}
void
operator
*=
(
float
s )
{
x
*=
s; y
*=
s; z
*=
s; w
*=
s;
}
}
Vector4f, Color4f;
//
---------------------------------------------------------------------------------------------
typedef union _UnalignedVector4f
{
struct
{
float
x, y, z, w; }
;
struct
{ Vector3f abc;
float
d; }
;
float
arr[
4
];
void
operator
=
(
const
Vector4f
&
b )
{
arr[
0
]
=
b.arr[
0
]; arr[
1
]
=
b.arr[
1
]; arr[
2
]
=
b.arr[
2
]; arr[
3
]
=
b.arr[
3
];
}
Vector4f aligned()
{
Vector4f r;
r.arr[
0
]
=
arr[
0
]; r.arr[
1
]
=
arr[
1
]; r.arr[
2
]
=
arr[
2
]; r.arr[
3
]
=
arr[
3
];
return
r;
}
}
UnalignedVector4f;
//
---------------------------------------------------------------------------------------------
typedef union _Vector2i
{
struct
{
int
x, y; }
;
int
arr[
2
];
}
Vector2i;
//
---------------------------------------------------------------------------------------------
typedef union _Vector3i
{
struct
{
int
x, y, z; }
;
struct
{
int
r, g, b; }
;
int
arr[
3
];
}
Vector3i, Color3i;
//
---------------------------------------------------------------------------------------------
typedef union _Vector4i
{
struct
{
int
x, y, z, w; }
;
struct
{
int
r, g, b, a; }
;
int
arr[
4
];
}
Vector4i, Color4i;
//
---------------------------------------------------------------------------------------------
typedef union _Vector2b
{
struct
{ BYTE x, y; }
;
BYTE arr[
2
];
}
Vector2b;
//
---------------------------------------------------------------------------------------------
typedef union _Vector3b
{
struct
{ BYTE x, y, z; }
;
struct
{ BYTE r, g, b; }
;
BYTE arr[
3
];
}
Vector3b, Color3b;
//
---------------------------------------------------------------------------------------------
typedef union _Vector4b
{
struct
{ BYTE x, y, z, w; }
;
struct
{ BYTE r, g, b, a; }
;
BYTE arr[
4
];
}
Vector4b, Color4b;
//
---------------------------------------------------------------------------------------------
typedef union _Matrix33f
{
struct
{
float
m1, m2, m3,
m4, m5, m6,
m7, m8, m9; }
;
float
arr[
9
];
float
m[
3
][
3
];
}
Matrix33f;
//
---------------------------------------------------------------------------------------------
typedef union _Matrix44f
{
struct
{
float
m1, m2, m3, m4,
m5, m6, m7, m8,
m9, m10, m11, m12,
m13, m14, m15, m16; }
;
struct
{
float
rs[
12
]; Vector4f translation; }
;
float
arr[
16
];
float
m[
4
][
4
];
__m128 mm[
4
];
}
Matrix44f;
//
---------------------------------------------------------------------------------------------
typedef union _Rect4i
{
struct
{
int
left, right, top, bottom; }
;
int
arr[
4
];
}
Rect4i;
//
---------------------------------------------------------------------------------------------
typedef union _Rect6i
{
struct
{
int
left, right, top, bottom,
width, height; }
;
int
arr[
6
];
}
Rect6i;
//
---------------------------------------------------------------------------------------------
typedef union _Rect4f
{
struct
{
float
xmin, xmax, ymin, ymax; }
;
float
arr[
4
];
}
Rect4f;
//
---------------------------------------------------------------------------------------------
typedef union _Rect6f
{
struct
{
float
xmin, xmax, ymin, ymax,
width, height; }
;
float
arr[
6
];
}
Rect6f;
//
---------------------------------------------------------------------------------------------
typedef union _Range2f
{
struct
{
float
min, max; }
;
float
arr[
2
];
bool
cover(
float
_s );
}
Range2f;
//
---------------------------------------------------------------------------------------------
typedef union _Bound6f
{
struct
{
float
xmin, xmax, ymin, ymax, zmin, zmax; }
;
struct
{ Range2f xrange, yrange, zrange; }
;
float
arr[
6
];
void
normalize();
void
operator
+=
(
const
_Bound6f
&
b )
{
if
( xmin
>
b.xmin ) xmin
=
b.xmin;
if
( xmax
<
b.xmax ) xmax
=
b.xmax;
if
( ymin
>
b.ymin ) ymin
=
b.ymin;
if
( ymax
<
b.ymax ) ymax
=
b.ymax;
if
( zmin
>
b.zmin ) zmin
=
b.zmin;
if
( zmax
<
b.zmax ) zmax
=
b.zmax;
}
void
operator
+=
(
const
Vector3f
&
v )
{
if
( xmin
>
v.x ) xmin
=
v.x;
if
( xmax
<
v.x ) xmax
=
v.x;
if
( ymin
>
v.y ) ymin
=
v.y;
if
( ymax
<
v.y ) ymax
=
v.y;
if
( zmin
>
v.z ) zmin
=
v.z;
if
( zmax
<
v.z ) zmax
=
v.z;
}
void
operator
=
(
const
Vector3f
&
v )
{
xmax
=
xmin
=
v.x;
ymax
=
ymin
=
v.y;
zmax
=
zmin
=
v.z;
}
}
Bound6f;
//
---------------------------------------------------------------------------------------------
typedef union _Bound9f
{
struct
{
float
xmin, xmax, ymin, ymax, zmin, zmax,
width, height, length; }
;
struct
{ Bound6f box;
float
width, height, length; }
;
float
arr[
9
];
void
normalize();
}
Bound9f;
//
---------------------------------------------------------------------------------------------
typedef union _MemoryHeader
{
unsigned
int
index;
_MemoryHeader
*
next;
}
MemoryHeader;
//
---------------------------------------------------------------------------------------------
# ifdef _DEBUG
# ifdef
new
# undef
new
# endif
# endif
class
MemoryManager
{
public
:
MemoryManager();
virtual
~
MemoryManager();
static
void
new_page( unsigned
int
size );
#ifndef _DEBUG
void
*
operator
new
( size_t );
void
*
operator
new
[]( size_t );
void
operator
delete(
void
*
);
void
operator
delete[](
void
*
);
#else
void
*
operator
new
( size_t,
const
char
*
,
int
);
void
*
operator
new
[]( size_t,
const
char
*
,
int
);
void
operator
delete(
void
*
,
const
char
*
,
int
);
void
operator
delete[](
void
*
,
const
char
*
,
int
);
#endif
void
*
operator
new
( size_t,
void
*
p )
{
return
p; }
void
operator
delete(
void
*
,
void
*
)
{}
public
:
static
MemoryHeader
*
memoryChunks[ NUM_CHUNKS ];
static
unsigned
char
*
memoryPage;
static
unsigned
int
memoryAvailable;
static
unsigned
int
memoryUsage;
static
MemoryHeader
*
memoryAllPages;
static
int
memoryManagerInited;
}
;
# ifdef _DEBUG
# ifndef
new
# define
new
new
( __FILE__, __LINE__ )
# endif
# endif
//
---------------------------------------------------------------------------------------------
# include
"
templates.h
"
//
---------------------------------------------------------------------------------------------
class
Entity :
public
MemoryManager
{
public
:
Entity()
{
memset( name,
0
, MAX_NAME_LEN );
}
virtual
~
Entity()
{
}
public
:
Name name;
DECLARE_TYPE( EntityType )
}
;
//
---------------------------------------------------------------------------------------------
class
Reference :
public
Entity
{
public
:
Reference()
{
}
virtual
~
Reference()
{
}
VIRTUAL
void
inherit(
const
Matrix44f
&
)
/**/
/*
= 0
*/
;
}
;
//
---------------------------------------------------------------------------------------------
class
Instance :
public
MemoryManager
{
public
:
Instance();
~
Instance();
void
instantiate( Scene
*
,
const
Matrix44f
&
);
public
:
Object
*
object
;
Light
*
light;
}
;
//
---------------------------------------------------------------------------------------------
template
<
typename T
>
class
Property
{
public
:
Property()
{
}
~
Property()
{
}
DLLPORT T
&
operator
[](
int
_i )
{
if
( _i
<
1
)
return
k[
0
];
else
return
k[
1
];
}
void
init(
float
_s,
float
_begin,
float
_len )
{
k[
1
]
-=
k[
0
];
T d
=
k[
1
];
d
*=
_begin;
k[
0
]
+=
d;
k[
1
]
*=
_len
*
_s;
}
void
move()
{
k[
0
]
+=
k[
1
];
}
private
:
T k[
2
];
}
;
//
---------------------------------------------------------------------------------------------
# include
"
imagefile.h
"
//
---------------------------------------------------------------------------------------------
typedef
enum
_TextureFormat
{
NONE, RAW, BMP, JPG, TIF,
}
TextureFormat;
//
---------------------------------------------------------------------------------------------
typedef
enum
_TextureType
{
SRC, MIP_MAP,
}
TextureType;
//
---------------------------------------------------------------------------------------------
typedef
struct
_TextureInfo
{
FileName name;
TextureType type;
int
id;
}
TextureInfo;
//
---------------------------------------------------------------------------------------------
class
TextureTile :
public
MemoryManager
{
public
:
TextureTile();
~
TextureTile();
bool
load( ImageFile
*
imgFile,
int
x1,
int
y1,
int
x2,
int
y2, TextureType t );
bool
loaded();
int
get_width()
const
;
int
get_height()
const
;
void
get_pixel( Vector3f
&
r,
float
x,
float
y,
float
dx,
float
dy );
void
get_pixel(
float
&
r,
float
x,
float
y,
float
dx,
float
dy );
private
:
bool
scale(
int
width,
int
height );
void
normalize();
void
get_color( Vector3b
&
r, BYTE
*
dibbits,
int
x,
int
y );
void
get_color( BYTE
&
alpha, BYTE
*
dibbits,
int
x,
int
y );
void
get_bilinear_color( Vector3f
&
r, BYTE
*
dibbits,
float
x,
float
y );
void
get_bilinear_color(
float
&
r, BYTE
*
dibbits,
float
x,
float
y );
void
get_src_color( Vector3b
&
color,
int
x,
int
y );
void
get_src_color( BYTE
&
alpha,
int
x,
int
y );
void
get_src_bilinear_color( Vector3f
&
color,
float
x,
float
y );
void
get_src_bilinear_color(
float
&
alpha,
float
x,
float
y );
void
blt(
int
x1,
int
y1,
int
x2,
int
y2,
int
width,
int
height );
void
bltB(
int
x1,
int
y1,
int
x2,
int
y2,
int
width,
int
height );
void
bltG(
int
x1,
int
y1,
int
x2,
int
y2,
int
width,
int
height );
void
bltR(
int
x1,
int
y1,
int
x2,
int
y2,
int
width,
int
height );
void
bltA( BYTE
*
begin,
int
width,
int
height );
bool
make_mip_map();
float
get_mm_bilinear(
float
x,
float
y );
float
get_mm_bilinear( BYTE
*
begin,
float
x,
float
y,
int
width );
void
get_pixel( Vector3f
&
clr,
float
x,
float
y,
int
d );
void
get_pixel(
float
&
clr,
float
x,
float
y,
int
d );
private
:
BYTE
*
bits,
*
Abits,
*
mip_map,
*
Amip_map;
int
m_width, m_height, m_width1, m_height1, m_area;
TextureType type;
}
;
//
---------------------------------------------------------------------------------------------
class
Texture :
public
Entity
{
public
:
Texture( TextureInfo
*
);
~
Texture();
bool
load();
int
get_width()
const
;
int
get_height()
const
;
void
lookup( Vector3f
&
r,
const
Vector4f
&
uv );
void
lookup(
float
&
r,
const
Vector4f
&
uv );
private
:
TextureInfo
*
info;
TextureFormat format;
Buffer
<
TextureTile
>
*
tiles;
int
m_width, m_height, m_width1, m_height1;
ImageFile
*
imgFile;
}
;
//
---------------------------------------------------------------------------------------------
class
TextureHandler
{
public
:
TextureHandler();
~
TextureHandler();
bool
load(
int
id );
void
release();
DLLPORT
void
lookup( Vector3f
&
r,
const
Vector4f
&
uv );
DLLPORT
void
lookup(
float
&
r,
const
Vector4f
&
uv );
private
:
Texture
*
texture;
}
;
//
---------------------------------------------------------------------------------------------
class
Light :
public
Reference
{
public
:
Light();
virtual
~
Light();
virtual
void
precompute();
DLLPORT VIRTUAL
void
illuminate( RayState
*
);
virtual
void
inherit(
const
Matrix44f
&
);
virtual
void
attrib_copy(
const
Light
*
);
public
:
bool
visible;
Vector3f i;
Vector3f pos;
bool
shadowCast,
useAttenuation;
Vector3f attenuation;
float
shadowOpacity;
//
global illumination.
float
giEnergy, giExponent;
UINT giPhotonNum;
//
caustics.
float
cstEnergy, cstExponent;
UINT cstPhotonNum;
LightShaderInstance
*
lightShader;
EmitterShaderInstance
*
emitterShader;
}
;
//
---------------------------------------------------------------------------------------------
class
PointLight :
public
Light
{
public
:
PointLight();
~
PointLight();
void
inherit(
const
Matrix44f
&
);
void
precompute();
DLLPORT
void
illuminate( RayState
*
);
}
;
//
---------------------------------------------------------------------------------------------
class
DistantLight :
public
Light
{
public
:
DistantLight();
~
DistantLight();
void
inherit(
const
Matrix44f
&
);
void
precompute();
DLLPORT
void
illuminate( RayState
*
);
void
attrib_copy(
const
Light
*
);
public
:
Vector3f dir;
float
nearRadius, farRadius, outBright;
float
inv_radius;
}
;
//
---------------------------------------------------------------------------------------------
class
SpotLight :
public
Light
{
public
:
SpotLight();
~
SpotLight();
void
inherit(
const
Matrix44f
&
);
void
precompute();
DLLPORT
void
illuminate( RayState
*
);
void
attrib_copy(
const
Light
*
);
public
:
Vector3f dir;
float
nearAngle, farAngle, outBright;
float
near_ang, far_ang, inv_ang;
}
;
//
---------------------------------------------------------------------------------------------
typedef SmartPtr
<
Light
>
LightPtr;
typedef SmartPtr
<
Group
>
GroupPtr;
typedef SmartPtr
<
Object
>
ObjectPtr;
typedef SmartPtr
<
RayObject
>
RayObjectPtr;
//
---------------------------------------------------------------------------------------------
class
Group :
public
Reference
{
public
:
Group();
~
Group();
void
translate(
const
Vector3f
&
);
void
rotate(
const
Vector3f
&
);
void
scale(
const
Vector3f
&
);
void
inherit(
const
Matrix44f
&
);
void
inherit( Scene
*
scene,
const
Matrix44f
&
);
void
push_matrix(
const
Matrix44f
&
);
void
apply_transform( Scene
*
scene );
bool
find(
const
char
*
f_nam, Group
*
&
grp );
bool
erase(
const
char
*
f_nam );
void
erase_dynamic_children();
public
:
Vector3f pos;
Vector3f x_axis, y_axis, z_axis;
std::vector
<
GroupPtr
>
children;
Group
*
parent;
Instance
*
instance;
}
;
//
---------------------------------------------------------------------------------------------
class
Primitive :
public
MemoryManager
{
public
:
Primitive();
virtual
~
Primitive();
public
:
Object
*
object
;
}
;
//
---------------------------------------------------------------------------------------------
class
NudeVertex
{
public
:
Vector3f pos;
Vector2f uv;
}
;
//
---------------------------------------------------------------------------------------------
class
AnimatableNudeVertex
{
public
:
Property
<
Vector3f
>
pos;
Property
<
Vector2f
>
uv;
}
;
//
---------------------------------------------------------------------------------------------
typedef
class
Vertex :
public
AnimatableNudeVertex
{
public
:
Property
<
Vector3f
>
normal;
}
*
VertexPtr;
//
---------------------------------------------------------------------------------------------
class
RayVertex :
public
NudeVertex
{
public
:
Vector3f normal;
void
operator
=
( Vertex
&
vtx )
{
uv
=
vtx.uv[
0
];
}
}
;
//
---------------------------------------------------------------------------------------------
class
Triangle :
public
Primitive
{
public
:
Triangle();
~
Triangle();
public
:
UINT v[
3
];
Property
<
Vector3f
>
normal;
}
;
//
---------------------------------------------------------------------------------------------
typedef union _HitType
{
int
type;
RayState
*
state;
}
HitType;
//
---------------------------------------------------------------------------------------------
class
RayPrimitive :
public
MemoryManager
{
public
:
RayPrimitive();
virtual
~
RayPrimitive();
VIRTUAL
bool
intersect( Ray
*
ray, RayState
*
state )
/**/
/*
= 0
*/
;
VIRTUAL
void
subdivide( RayObjectPtr
&
MObj, RayObjectPtr
&
LObj,
RayObjectPtr
&
RObj,
bool
*
isExist,
UINT axis,
float
plane )
/**/
/*
= 0
*/
;
VIRTUAL
void
detail( RayState
*
state )
/**/
/*
= 0
*/
;
virtual
void
precompute()
=
0
;
virtual
void
bound()
=
0
;
virtual
void
boundDisplaced();
virtual
float
priority()
=
0
;
virtual
void
freeTemp();
void
operator
()( RayState
*
state );
public
:
DECLARE_TYPE( RayPrimitiveType )
Primitive
*
primitive;
RayObject
*
object
;
Bound6f box;
HitType hitType;
int
hitHistory;
USHORT hitTime;
}
;
//
---------------------------------------------------------------------------------------------
typedef
struct
_DisplacedTriangle
{
RayVertex
*
v1,
*
v2,
*
v3;
}
DisplacedTriangle;
//
---------------------------------------------------------------------------------------------
typedef
struct
_DisplacedCell
{
bool
intersect( Ray
*
ray, RayState
*
state );
void
precompute();
DisplacedTriangle tri[ DISPLACED_CELL_SIZE ];
__m128 lax, lay, laz, law,
lbx, lby, lbz, lbw,
lcx, lcy, lcz, lcw,
nx, ny, nz, nw;
Vector4f sphere;
}
DisplacedCell;
//
---------------------------------------------------------------------------------------------
class
DisplacementData :
public
MemoryManager
{
public
:
DisplacementData();
~
DisplacementData();
public
:
RayVertex
*
dpVtx;
DisplacedCell
*
dpGrid;
float
tolerance;
int
noEdgeVtx, noDpVtx, noDpTri,
noDpCell, dpLevel, refCount;
}
;
//
---------------------------------------------------------------------------------------------
class
RayTriangle :
public
RayPrimitive
{
public
:
RayTriangle();
~
RayTriangle();
bool
intersect( Ray
*
ray, RayState
*
state );
void
subdivide( RayObjectPtr
&
MObj, RayObjectPtr
&
LObj,
RayObjectPtr
&
RObj,
bool
*
isExist,
UINT axis,
float
plane );
void
detail( RayState
*
state );
void
precompute();
void
bound();
void
boundDisplaced();
float
priority();
void
freeTemp();
private
:
bool
baseIntersect( Ray
*
ray, RayState
*
state );
bool
intersectDisplaced( Ray
*
ray, RayState
*
state );
void
tessellate();
void
displace( DisplacementShaderInstance
*
shader, RayState
*
state );
bool
ray_box_1d(
float
p1,
float
p2,
float
p3,
float
start,
float
end );
bool
ray_box(
const
Vector3f
&
start,
const
Vector3f
&
end );
void
getWrap(
const
Vector3f
&
,
const
Vector3f
&
,
const
Vector3f
&
);
void
getWrap(
const
Vector3f
&
,
const
Vector3f
&
,
const
Vector3f
&
,
const
Vector3f
&
);
void
getWrap(
const
Vector3f
&
,
const
Vector3f
&
,
const
Vector3f
&
,
const
Vector3f
&
,
const
Vector3f
&
,
const
Vector3f
&
);
void
edgeXplane(
float
x1,
float
y1,
float
z1,
float
x2,
float
y2,
float
z2,
float
x3,
float
&
y3,
float
&
z3 );
public
:
UnalignedVector4f la, lb, lc, normal;
FakePtr
<
RayVertex
>
v1, v2, v3;
Vector3f uv_para1, uv_para2, uv_para3;
SafePtr
<
DisplacementData
>
dpd;
}
;
//
---------------------------------------------------------------------------------------------
class
Object :
public
Reference
{
public
:
Object();
virtual
~
Object();
virtual
void
inherit(
const
Matrix44f
&
)
=
0
;
virtual
void
initialize(
const
_Option
&
)
=
0
;
virtual
RayObject
*
newRayObject(
const
Matrix44f
&
)
=
0
;
virtual
void
move()
=
0
;
virtual
void
clearDynamicData();
public
:
Material
*
material;
bool
visible;
bool
rebuild_normals;
float
shadingRate, maxDisplace;
int
displacePeriod;
UINT mbSegment;
//
global illumination.
bool
giRecv, giCast;
//
caustics.
bool
cstRecv, cstCast;
//
shadow.
bool
shadowRecv, shadowCast;
}
;
//
---------------------------------------------------------------------------------------------
class
Polygon :
public
Object
{
public
:
Polygon();
~
Polygon();
void
inherit(
const
Matrix44f
&
);
void
initialize(
const
_Option
&
);
RayObject
*
newRayObject(
const
Matrix44f
&
);
void
move();
public
:
std::vector
<
Vertex
>
vtxlist;
std::vector
<
Triangle
>
prilist;
}
;
//
---------------------------------------------------------------------------------------------
class
RayObject :
public
Entity
{
public
:
RayObject();
virtual
~
RayObject();
VIRTUAL
void
illumIndirect( RayState
*
state );
VIRTUAL RayPrimitive
*
pri_at(
int
id )
/**/
/*
= 0
*/
;
VIRTUAL
int
pri_size()
/**/
/*
= 0
*/
;
VIRTUAL
void
pri_add(
const
RayPrimitive
*
)
/**/
/*
= 0
*/
;
VIRTUAL
void
pri_clear()
/**/
/*
= 0
*/
;
VIRTUAL
void
pri_copy(
const
RayObject
*
)
/**/
/*
= 0
*/
;
virtual
void
attrib_copy(
const
RayObject
*
)
=
0
;
virtual
void
bound()
=
0
;
virtual
void
sort()
=
0
;
DLLPORT
void
operator
()( RayState
*
state );
public
:
Object
*
object
;
Bound9f box;
PhotonMap
*
giMap,
*
cstMap;
Range2f time;
}
;
//
---------------------------------------------------------------------------------------------
class
RayPolygon :
public
RayObject
{
public
:
RayPolygon();
~
RayPolygon();
void
illumIndirect( RayState
*
state );
RayPrimitive
*
pri_at(
int
id );
int
pri_size();
void
pri_add(
const
RayPrimitive
*
);
void
pri_clear();
void
pri_copy(
const
RayObject
*
);
void
attrib_copy(
const
RayObject
*
);
void
bound();
void
sort();
private
:
std::vector
<
RayTriangle
>
prilist;
}
;
//
---------------------------------------------------------------------------------------------
class
BSPNode :
public
MemoryManager
{
public
:
BSPNode();
~
BSPNode();
public
:
BSPNode
*
LChild,
*
RChild;
std::vector
<
RayObjectPtr
>
pObj;
UINT priCount;
std::vector
<
RayPrimitive
*>
refPri;
USHORT axis;
Bound6f box;
#ifdef _DEBUG
Vector3f color;
#endif
}
;
//
---------------------------------------------------------------------------------------------
class
Material :
public
Entity
{
public
:
Material();
~
Material();
void
precompute();
public
:
SurfaceShaderInstance
*
surfaceShader;
ShadowShaderInstance
*
shadowShader;
DisplacementShaderInstance
*
displaceShader;
PhotonShaderInstance
*
photonShader;
bool
twoFaced,
smooth;
}
;
//
---------------------------------------------------------------------------------------------
class
Camera :
public
Reference
{
public
:
Camera();
~
Camera();
void
inherit(
const
Matrix44f
&
);
void
initialize(
const
_Option
&
);
void
move();
void
prepare( Vector3f
&
, Vector3f
&
, Vector3f
&
, Vector3f
&
,
Vector3f
&
, Vector3f
&
,
int
,
int
);
public
:
Property
<
Vector3f
>
pos, tgt;
Vector3f dir, up;
Property
<
float
>
angle, roll;
Range2f clip;
UINT mbSegment;
float
pixelSize;
}
;
//
---------------------------------------------------------------------------------------------
class
Photon
{
public
:
Vector3f pos, energy;
Light
*
light;
}
;
//
---------------------------------------------------------------------------------------------
typedef
enum
_RayType
{
RAY_EYE,
//
eye ray
RAY_TRANSPARENT,
//
transparency ray
RAY_REFLECT,
//
reflection ray
RAY_REFRACT,
//
refraction ray
RAY_LIGHT,
//
light ray
RAY_SHADOW,
//
shadow ray
RAY_ENVIRONMENT,
//
ray only into environment/volume
RAY_NONE,
//
other ray
PHOTON_ABSORB,
//
photon is absorbed (RIP)
PHOTON_LIGHT,
//
photon emitted from a light source
PHOTON_REFLECT_SPECULAR,
//
specular reflection of a photon
PHOTON_REFLECT_GLOSSY,
//
glossy reflection of a photon
PHOTON_REFLECT_DIFFUSE,
//
diffuse reflection of a photon
PHOTON_TRANSMIT_SPECULAR,
//
specular transmission of a photon
PHOTON_TRANSMIT_GLOSSY,
//
glossy transmission of a photon
PHOTON_TRANSMIT_DIFFUSE,
//
diffuse transmission of a photon
RAY_DISPLACE,
//
displacement during tesselation
RAY_OUTPUT,
//
output shader
PHOTON_SCATTER_VOLUME,
//
volume scattering of a photon
PHOTON_TRANSPARENT,
//
transparency photon
RAY_FINALGATHER,
//
final gather ray
RAY_LM_VERTEX,
//
light map vertex rendering
RAY_LM_MESH,
//
light map mesh rendering
PHOTON_EMIT_GI,
//
globillum photons (emitters only)
PHOTON_EMIT_CAUSTIC,
//
caustic photons (emitters only)
RAY_PROBE,
}
RayType;
//
---------------------------------------------------------------------------------------------
class
Ray
{
public
:
Ray( RayType _t );
~
Ray();
public
:
Vector3f src, pos, dir, axis;
RayType type;
Photon
*
photon;
Ray
*
neighbors[
4
];
float
displace_tol;
int
id;
std::list
<
RayState
>
potentials;
}
;
//
---------------------------------------------------------------------------------------------
# define QUERY_UV
0x4
# define QUERY_DU_DV
0x8
# define QUERY_NG
0x10
# define QUERY_N
0x20
# define QUERY_DPDU_DPDV
0x40
# define QUERY_BARY
0x80
# define QUERY_DOT_ND
0x100
# define QUERY_GI_LUM
0x200
# define QUERY_SHADOW_COLOR
0x400
# define QUERY_SHADING
0x800
//
---------------------------------------------------------------------------------------------
typedef RayObject
*
Illuminator;
typedef RayPrimitive
*
GetDetails;
typedef Tracer
*
TextureLoader;
typedef Light
*
(
*
GetLight)(
int
id );
DLLPORT Light
*
getLightInstance(
int
id );
//
---------------------------------------------------------------------------------------------
typedef union _CustomData
{
float
scalar;
int
integer;
void
*
pointer;
}
CustomData;
//
---------------------------------------------------------------------------------------------
class
RayState
{
public
:
RayState();
~
RayState();
public
:
//
input :
Primitive
*
limitPri;
Object
*
limitObj;
BSPNode
*
limitBSP;
Vector2f rasterPos;
float
time;
//
output :
int
query;
Primitive
*
hitPri;
Object
*
hitObj;
Illuminator illumIndirect;
GetDetails detail;
TextureLoader loadTex;
GetLight lightInst;
BSPNode
*
hitBSP;
float
t, dtime;
Vector4f uv, shadowColor;
Vector3f P, Ng, N,
dPdu, dPdv,
bary, L;
float
dotNd;
Vector3f I, giLum;
//
state :
int
depth;
float
ior, prev_ior;
struct
_Option
*
opt;
//
custom :
CustomData cust_data[ MAX_CUSTOM_DATA_SIZE ];
}
;
//
---------------------------------------------------------------------------------------------
class
RayTracer :
public
MemoryManager
{
public
:
RayTracer();
~
RayTracer();
DLLPORT
static
float
distributed_trace( Vector4f
&
color, Ray
*
ray,
int
depth,
float
time, Vector2f
&
rasterPos,
int
);
DLLPORT
static
float
trace( Vector4f
&
color, Ray
*
ray,
int
depth,
float
time, Vector2f
&
rasterPos,
int
);
DLLPORT
static
void
trace( Vector4f
&
color, Ray
*
ray,
int
depth,
float
time, Vector2f
&
rasterPos,
TextureLoader
&
);
static
bool
trace( Ray
*
ray, RayState
*
state );
static
bool
intersect(
const
Vector3f
&
pos,
const
Vector3f
&
dir,
const
Bound6f
&
box,
float
&
rt, Vector3f
&
hit );
static
bool
intersect(
const
Vector3f
&
pos,
const
Vector3f
&
dir,
const
Bound6f
&
box,
float
&
rt );
static
bool
intersect(
const
Vector3f
&
pos,
const
Vector3f
&
dir,
const
Vector4f
&
sphere,
float
DDD );
static
bool
intersect( Ray
*
ray, RayState
*
state );
static
bool
near_far_clip(
const
Ray
*
ray,
float
t );
static
void
shade( Vector4f
&
c, Ray
*
ray, RayState
*
state );
static
void
prepare_intersect(
const
Vector3f
&
normal,
const
Vector3f
&
v1,
const
Vector3f
&
v2,
const
Vector3f
&
v3,
UnalignedVector4f
&
plane );
static
void
prepare_uv_dir(
const
Vector2f
&
uv1,
const
Vector2f
&
uv2,
const
Vector2f
&
uv3, Vector3f
&
para );
static
void
get_normal(
const
Vector3f
&
v1,
const
Vector3f
&
v2,
const
Vector3f
&
v3, UnalignedVector4f
&
normal );
}
;
//
---------------------------------------------------------------------------------------------
typedef
enum
_FilterType
{
BOX, TRIANGLE, CATMULLROM, GAUSSIAN, SINC,
}
FilterType;
//
---------------------------------------------------------------------------------------------
typedef
struct
_Option
{
//
info
FileName fileName;
short
noThread;
Camera view;
//
sampling
UINT maxAntialias,
//
max depth of anti-aliasing
minAntialias;
//
min depth of anti-aliasing
Vector4f contrast,
timeContrast;
float
filterSize;
FilterType filter,
timeFilter;
//
parameters
USHORT coord;
UINT bucketSize;
Vector4f backgroundColor;
Vector3f ia;
float
ior;
UINT traceDepth;
//
max depth of raytracing
UINT maxSubdivision;
bool
memoryPinch,
diagnostic;
//
bsp
USHORT bspMethod;
UINT bspSize;
UINT bspDepth;
//
global illumination
bool
useGI;
UINT giAccuracy;
float
giRadius;
UINT giTraceDepth;
//
caustics
bool
useCst;
UINT cstAccuracy;
float
cstRadius;
UINT cstTraceDepth;
//
final gather
bool
useFG;
UINT fgAccuracy;
UINT fgTraceDepth;
float
fgMaxRadius,
fgMinRadius;
//
motion blur
bool
useMB;
Range2f mbShutter;
//
depth of field
bool
useDOF;
float
fStop;
//
rendering
UINT imageWidth, imageHeight;
}
Option;
//
---------------------------------------------------------------------------------------------
class
Scene
{
public
:
Scene();
~
Scene();
public
:
Option opt;
//
substance
Group root;
std::vector
<
ObjectPtr
>
objects;
std::vector
<
LightPtr
>
lights;
std::vector
<
LightPtr
>
lightInstances;
std::list
<
Material
>
materials;
std::list
<
PhotonMap
>
photonMaps;
std::vector
<
TextureInfo
>
texInfo;
BSPNode
*
bsp;
LensShaderInstance
*
lensShader;
ImagerShaderInstance
*
imagerShader;
//
reserves
Bound9f box;
Vector3f origin[ MAX_MOTIONBLUR_SEGMENT ],
right_dir[ MAX_MOTIONBLUR_SEGMENT ],
down_dir[ MAX_MOTIONBLUR_SEGMENT ],
pixel_right_dir[ MAX_MOTIONBLUR_SEGMENT ],
pixel_down_dir[ MAX_MOTIONBLUR_SEGMENT ],
sdir[ MAX_MOTIONBLUR_SEGMENT ];
}
;
//
---------------------------------------------------------------------------------------------
class
PixelBuffer :
public
MemoryManager
{
public
:
PixelBuffer(
int
w,
int
h );
~
PixelBuffer();
int
getWidth()
const
;
int
getHeight()
const
;
void
set
(
int
x,
int
y,
const
BYTE
*
clr );
void
set
(
int
x,
int
y,
const
Vector3f
&
clr );
void
set
(
int
x,
int
y, COLORREF clr );
void
set4(
int
x,
int
y,
const
BYTE
*
clr );
void
set4(
int
x,
int
y,
const
Vector4f
&
clr );
void
add(
int
x,
int
y,
const
BYTE
*
clr );
void
add(
int
x,
int
y,
const
Vector3f
&
clr );
void
add4(
int
x,
int
y,
const
BYTE
*
clr );
void
add4(
int
x,
int
y,
const
Vector4f
&
clr );
void
mix4(
int
x,
int
y,
const
BYTE
*
clr,
float
t );
void
mix4(
int
x,
int
y,
const
Vector4f
&
clr,
float
t );
void
mul(
int
x,
int
y,
float
f );
void
mul4(
int
x,
int
y,
float
f );
void
get
( BYTE
*
clr,
int
x,
int
y )
const
;
void
get
( Vector3f
&
clr,
int
x,
int
y )
const
;
void
get4( BYTE
*
clr,
int
x,
int
y )
const
;
void
get4( Vector4f
&
clr,
int
x,
int
y )
const
;
void
gamma( BYTE
*
dst,
const
Vector3f
&
src )
const
;
void
gamma( BYTE
*
dst,
const
Vector4f
&
src )
const
;
void
fill(
int
x1,
int
x2,
int
y1,
int
y2,
const
Vector3f
&
clr );
bool
filled(
int
x,
int
y );
bool
saveBmp(
const
char
*
file_name,
int
frame_id,
int
w,
int
h )
const
;
BYTE
*
getHandle()
const
;
private
:
BYTE
*
bitmap,
*
Abitmap;
int
m_width, m_height, m_width1, m_height1;
}
;
//
---------------------------------------------------------------------------------------------
class
Sampler :
public
MemoryManager
{
public
:
Sampler();
~
Sampler();
void
init(
float
pixel_size, FilterType filter );
void
jitter();
void
reg(
int
x,
int
y,
float
&
sx,
float
&
sy,
float
&
time );
float
getWeight(
int
x,
int
y );
int
getFilterRadius();
private
:
typedef
struct
_SamplePosition
{
float
x, y;
float
jx, jy;
}
SamplePosition;
SamplePosition table[
9
][
9
];
float
**
weights;
int
filter_radius;
}
;
//
---------------------------------------------------------------------------------------------
class
Locker
{
public
:
Locker();
~
Locker();
bool
lock
();
bool
unlock();
static
void
time_out( DWORD _limit );
private
:
bool
entered;
TMutex mutex;
}
;
//
---------------------------------------------------------------------------------------------
class
Mender :
public
MemoryManager
{
public
:
Mender();
virtual
~
Mender();
public
:
static
Locker g_locker, buckets_locker,
pBuffer_locker, dofBuffer_locker, scene_locker;
}
;
//
---------------------------------------------------------------------------------------------
class
Bucket :
public
Mender
{
public
:
Bucket();
~
Bucket();
void
init(
int
x,
int
y, PixelBuffer
*
b, Buffer
<
BYTE
>
*
d, Rect6i
*
r );
void
release();
void
render();
void
supersample(
const
Vector4f
&
avg,
const
Vector4f
&
c1,
const
Vector4f
&
c2,
const
Vector4f
&
c3,
const
Vector4f
&
c4,
const
Rect4i
&
rct, USHORT depth );
BYTE sample( Vector4f
&
c,
int
x,
int
y, USHORT depth );
void
timeSample( Vector4f
&
result,
float
&
totalWeight,
float
&
confusion,
const
Vector4f
&
c1,
const
Vector4f
&
c2,
const
Vector3f
&
org1,
const
Vector3f
&
org2,
const
Vector3f
&
dir1,
const
Vector3f
&
dir2,
const
Vector3f
&
axis1,
const
Vector3f
&
axis2,
float
time1,
float
time2,
float
displace_tol,
Vector2f
&
rasterPos, USHORT depth );
bool
compare(
const
Vector4f
&
c1,
const
Vector4f
&
c2 );
bool
timeCompare(
const
Vector4f
&
c1,
const
Vector4f
&
c2 );
void
average( Vector4f
&
avg,
const
Vector4f
&
c1,
const
Vector4f
&
c2,
const
Vector4f
&
c3,
const
Vector4f
&
c4 );
void
contribute(
int
x,
int
y,
int
tx,
int
ty );
void
setRasterPos(
int
x,
int
y );
public
:
PixelBuffer
*
pBuffer,
*
gBuffer;
Buffer
<
BYTE
>
*
dofBuffer;
Vector2i pos, l_rasterPos;
Vector2f rasterPos;
Rect6i rect;
bool
caught;
Sampler sampler;
Scene
*
scene;
int
thread;
}
;
//
---------------------------------------------------------------------------------------------
class
Tracer :
public
Mender
{
public
:
Tracer();
~
Tracer();
void
setID(
int
id );
int
getID();
void
walk();
void
catchBucket();
void
findBucket();
void
trace();
void
pause();
void
resume();
void
stop();
void
releaseTextures();
static
TThreadSpec proc( LPVOID lpthis );
TextureHandler
*
loadTexture(
int
id );
DLLPORT TextureHandler
*
operator
()(
int
id )
{
return
loadTexture( id );
}
public
:
typedef
enum
_Step
{
RIGHT, DOWN, LEFT, UP,
}
Step;
Bucket
*
target;
Step lastStep;
TThread thread;
DWORD threadID;
bool
stopped,
isRunning;
std::vector
<
TextureHandler
>
textureCache;
}
;
//
---------------------------------------------------------------------------------------------
typedef
enum
_OSType
{
Windows32s, WindowsNT3, Windows95, Windows98,
WindowsME, WindowsNT4, Windows2000, WindowsXP,
}
OSType;
//
---------------------------------------------------------------------------------------------
# include
"
random.h
"
//
---------------------------------------------------------------------------------------------
class
Renderer :
public
Mender
{
public
:
DLLPORT Renderer();
DLLPORT
virtual
~
Renderer();
void
begin();
void
pause();
void
resume();
void
end();
void
print(
int
msg_id,
);
void
registerPixels(
int
count);
BOOL post( UINT Msg, WPARAM wParam, LPARAM lParam );
void
getSysInfo();
void
getOSType( OSType
&
);
bool
isRightOS();
void
initScene();
void
wrapScene();
void
stuffBSP();
void
buildBSP( BSPNode
*
curNode, USHORT method, UINT curDepth, UINT curAxis );
void
initBSP( BSPNode
*
node );
void
sortBSP( BSPNode
*
node );
void
register_displaced_primitive( RayPrimitive
*
prim,
BSPNode
*
node, BSPNode
*
exclude );
void
renderPhotonMap();
void
buildKdtree();
void
precompute();
void
wait();
void
release();
void
clearDynamicData();
void
dispatch( TThread
&
thread,
int
_id_ );
Bucket
*
getBucket(
int
x,
int
y );
public
:
Bucket
**
buckets;
Tracer tracers[ MAX_THREAD_AMOUNT ];
TThread threads[ MAX_THREAD_AMOUNT ];
Scene
*
scene;
int
noXBuckets, noYBuckets;
PixelBuffer
*
pBuffer;
float
bias;
float
div_100_render_area;
UINT pixel_count;
int
last_percent;
UINT frameID;
int
id_count;
char
appPath[ MAX_PATH_LEN ];
//
random generators
CSobol
<
4
>
traceGen, giGen, fgGen;
}
;
//
---------------------------------------------------------------------------------------------
typedef
enum
_RenderState
{
RENDERING, NOT_RENDERING, PAUSE,
}
RenderState;
//
---------------------------------------------------------------------------------------------
//
_FLOAT :
# define FILTER_SIZE
100
# define REFRACTIVE_INDEX
101
# define GLOBALILLUM_RADIUS
102
# define CAUSTICS_RADIUS
103
# define FINALGATHER_MAX_RADIUS
104
# define FINALGATHER_MIN_RADIUS
105
# define F_STOP
106
# define CAMERA_ANGLE
107
# define CAMERA_ROLL
108
# define SHADING_RATE
109
# define MAX_DISPLACEMENT
110
# define GLOBALILLUM_ENERGY
111
# define GLOBALILLUM_DECAY
112
# define CAUSTICS_ENERGY
113
# define CAUSTICS_DECAY
114
# define SHADOW_OPACITY
115
# define OUTSIDE_BRIGHTNESS
116
# define RADIUS
117
//
_INTEGER :
# define THREAD_NUMBER
200
# define MAX_ANTIALIASING
201
# define MIN_ANTIALIASING
202
# define BUCKET_SIZE
203
# define TRACE_DEPTH
204
# define MAX_SUBDIVISION
205
# define BSP_SIZE
206
# define BSP_DEPTH
207
# define GLOBALILLUM_ACCURACY
208
# define GLOBALILLUM_TRACE_DEPTH
209
# define CAUSTICS_ACCURACY
210
# define CAUSTICS_TRACE_DEPTH
211
# define FINALGATHER_ACCURACY
212
# define FINALGATHER_TRACE_DEPTH
213
# define MOTIONBLUR_SEGMENT
214
# define DISPLACEMENT_PERIOD
215
# define GLOBALILLUM_PHOTON_NUMBER
216
# define CAUSTICS_PHOTON_NUMBER
217
# define VERTEX_BUFFER_SIZE
218
# define TRIANGLE_BUFFER_SIZE
219
# define IMAGE_WIDTH
220
# define IMAGE_HEIGHT
221
# define SEGMENT
222
//
_STRING :
# define NAME
300
# define FILE_NAME
301
# define FILTER
302
# define TIME_FILTER
303
# define BSP_METHOD
304
# define SURFACE_SHADER
305
# define LIGHT_SHADER
306
# define SHADOW_SHADER
307
# define DISPLACEMENT_SHADER
308
# define PHOTON_SHADER
309
# define EMITTER_SHADER
310
# define VOLUME_SHADER
311
# define COORDINATE_SYSTEM
312
# define MATERIAL
313
# define LENS_SHADER
314
# define IMAGER_SHADER
315
//
_BOOLEAN :
# define MEMORY_PINCH
400
# define ENABLE_GLOBALILLUM
401
# define ENABLE_CAUSTICS
402
# define ENABLE_FINALGATHER
403
# define ENABLE_MOTIONBLUR
404
# define ENABLE_DEPTHOFFIELD
405
# define RECEIVE_GLOBALILLUM
406
# define CAST_GLOBALILLUM
407
# define RECEIVE_CAUSTICS
408
# define CAST_CAUSTICS
409
# define RECEIVE_SHADOW
410
# define CAST_SHADOW
411
# define VISIBLE
412
# define REBUILD_NORMALS
413
# define TWO_FACED
414
# define SMOOTH
415
# define ENABLE_ATTENUATION
416
# define DIAGNOSTIC_MODE
417
//
_VECTOR2:
# define SHUTTER
500
# define CLIP
501
# define DISTANTLIGHT_RADIUS
502
# define SPOTLIGHT_ANGLE
503
//
_VECTOR3 :
# define AMBIENT_COLOR
600
# define CAMERA_POSITION
601
# define CAMERA_TARGET
602
# define ILLUMINATION
603
# define ATTENUATION
604
//
_VECTOR4 :
# define CONTRAST
700
# define TIME_CONTRAST
701
# define BACKGROUND_COLOR
702
//
---------------------------------------------------------------------------------------------
typedef
enum
_PrimitiveType
{
TRIANGLES,
}
PrimitiveType;
//
---------------------------------------------------------------------------------------------
class
Interface :
public
Renderer
{
friend
class
Parser;
public
:
DLLPORT Interface();
DLLPORT
~
Interface();
DLLPORT
int
read_scene(
const
char
*
name );
/**/
/*
1
*/
DLLPORT
int
world_begin();
/**/
/*
2
*/
DLLPORT
int
world_end();
/**/
/*
3
*/
DLLPORT
int
frame_begin();
/**/
/*
4
*/
DLLPORT
int
frame_end();
/**/
/*
5
*/
DLLPORT
int
group_begin(
const
char
*
name );
/**/
/*
6
*/
DLLPORT
int
group_end();
/**/
/*
7
*/
DLLPORT
int
init_instance(
const
char
*
name );
/**/
/*
8
*/
DLLPORT
int
object_begin(
const
char
*
name,
const
char
*
type );
/**/
/*
9
*/
DLLPORT
int
object_end();
/**/
/*
10
*/
DLLPORT
int
motion_begin();
/**/
/*
11
*/
DLLPORT
int
motion_end();
/**/
/*
12
*/
DLLPORT
int
vertex(
float
x,
float
y,
float
z,
float
u,
float
v );
/**/
/*
13
*/
DLLPORT
int
vertex(
int
id );
/**/
/*
14
*/
DLLPORT
int
normal(
float
x,
float
y,
float
z );
/**/
/*
15
*/
DLLPORT
int
primitive_begin(
const
char
*
type );
/**/
/*
16
*/
DLLPORT
int
primitive_end();
/**/
/*
17
*/
DLLPORT
int
texture(
const
char
*
name,
const
char
*
type );
/**/
/*
18
*/
DLLPORT
int
translate(
float
x,
float
y,
float
z );
/**/
/*
19
*/
DLLPORT
int
rotate(
float
x,
float
y,
float
z );
/**/
/*
20
*/
DLLPORT
int
scale(
float
x,
float
y,
float
z );
/**/
/*
21
*/
DLLPORT
int
material_begin(
const
char
*
name );
/**/
/*
22
*/
DLLPORT
int
material_end();
/**/
/*
23
*/
DLLPORT
int
light_begin(
const
char
*
name,
const
char
*
type );
/**/
/*
24
*/
DLLPORT
int
light_end();
/**/
/*
25
*/
DLLPORT
int
set_option(
int
name,
float
value );
/**/
/*
26
*/
DLLPORT
int
set_parameter(
const
char
*
name,
float
value );
/**/
/*
27
*/
DLLPORT
int
set_option(
int
name,
int
value );
/**/
/*
28
*/
DLLPORT
int
set_parameter(
const
char
*
name,
int
value );
/**/
/*
29
*/
DLLPORT
int
set_option(
int
name,
const
char
*
value );
/**/
/*
30
*/
DLLPORT
int
set_parameter(
const
char
*
name,
const
char
*
str );
/**/
/*
31
*/
DLLPORT
int
set_option(
int
name,
bool
value );
/**/
/*
32
*/
DLLPORT
int
set_parameter(
const
char
*
name,
bool
value );
/**/
/*
33
*/
DLLPORT
int
set_option(
int
name,
float
x,
float
y );
/**/
/*
34
*/
DLLPORT
int
set_parameter(
const
char
*
name,
float
x,
float
y );
/**/
/*
35
*/
DLLPORT
int
set_option(
int
name,
float
x,
float
y,
float
z );
/**/
/*
36
*/
DLLPORT
int
set_parameter(
const
char
*
name,
float
x,
float
y,
float
z );
/**/
/*
37
*/
DLLPORT
int
set_option(
int
name,
float
x,
float
y,
float
z,
float
w );
/**/
/*
38
*/
DLLPORT
int
set_parameter(
const
char
*
name,
float
x,
float
y,
float
z,
float
w );
/**/
/*
39
*/
DLLPORT
int
select_group(
const
char
*
name );
/**/
/*
40
*/
DLLPORT
int
delete_group(
const
char
*
name );
/**/
/*
41
*/
DLLPORT
int
select_object(
const
char
*
name );
/**/
/*
42
*/
DLLPORT
int
delete_object(
const
char
*
name );
/**/
/*
43
*/
DLLPORT
int
select_material(
const
char
*
name );
/**/
/*
44
*/
DLLPORT
int
delete_material(
const
char
*
name );
/**/
/*
45
*/
DLLPORT
int
select_light(
const
char
*
name );
/**/
/*
46
*/
DLLPORT
int
delete_light(
const
char
*
name );
/**/
/*
47
*/
DLLPORT
int
select_end();
DLLPORT
int
render_pause();
DLLPORT
int
render_resume();
DLLPORT
int
render_end();
DLLPORT
static
void
error(
int
id,
char
*
&
desc );
private
:
static
TThreadSpec loadProc( LPVOID );
private
:
TThread mainThread;
bool
worldBegin,
frameBegin,
groupBegin,
objectBegin,
motionBegin,
materialBegin,
lightBegin,
primitiveBegin;
RenderState renderState;
Material
*
pMtl;
Group
*
pGrp;
Object
*
pObj;
Light
*
pLight;
Vertex
*
pVtx;
Triangle
*
pTri;
int
key, vtx_id;
PrimitiveType primType;
Triangle tri;
}
;
}
//
---------------------------------------------------------------------------------------------
//
Eclinse files :
# include
"
algebra.h
"
# include
"
extern.h
"
# include
"
shader.h
"
# include
"
parser.h
"
# include
"
opengl.h
"
# include
"
window.h
"
# include
"
geometry.h
"
# include
"
photonmap.h
"
# include
"
resource.h
"
//
---------------------------------------------------------------------------------------------
#endif
查看全文
相关阅读:
《Eric带您走近Office 2010》系列专题来啦!
以人为本 体验至上(二)
以人为本 体验至上(一)
操作Static对象的多线程问题
TroubleShoot:SilverLight中Wcf调用时出现Not Found等错误
delegate与event的关系说明
SharePoint对象模型性能考量
SharePoint自带Silverlight WebPart中文输入问题处理
关于Wcf事件多次执行的问题
SharePoint中调试SilverLight程序
原文地址:https://www.cnblogs.com/len3d/p/370196.html
最新文章
cocos2dx 多触点监听
cocos2dx 切换场景动画
cocos2dx 分享某类的静态实例方法与调用
cocos2dx 自带11种粒子特效
cocos2dx CCAnimation实现动画
cocos2dx 22种特效
cocos2dx 粒子移动类型
开发android应用程序的基本步骤及RSS、SAX简介
objectc里self与super的区别
我来“广播”你的“意图”——Intent和Broadcast
热门文章
eclipse 断点调试快捷键
Activity属性设置大全
Service及Service与Activity通信
java修饰符
RAM随机存取存储器
Android Permission(授权)大全
MSSQL数据库中SQL锁机制和事务隔离级别
正则表达式收藏【日期的验证表达式】
以人为本 体验至上(三)
在 JumpList 中将我们应用程序对应的常用资源锁定到列表
Copyright © 2011-2022 走看看