📄 mlrlight.hpp
字号:
//===========================================================================//
// Copyright (C) Microsoft Corporation. All rights reserved. //
//===========================================================================//
#pragma once
#define MLR_MLRLIGHT_HPP
#include "MLR.hpp"
namespace MidLevelRenderer {
class GOSVertexPool;
class MLRLightMap;
struct MLRVertexData {
Stuff::Point3D *point;
#if COLOR_AS_DWORD
DWORD *color;
#else
Stuff::RGBAColor *color;
#endif
Stuff::Vector3D *normal;
int index;
};
//##########################################################################
//######################### MLRLight #################################
//##########################################################################
class MLRLight:
public Stuff::RegisteredClass
{
public:
static void
InitializeClass();
static void
TerminateClass();
MLRLight(ClassData *class_data);
MLRLight(
ClassData *class_data,
Stuff::MemoryStream *stream,
int version
);
MLRLight(
ClassData *class_data,
Stuff::Page* page
);
~MLRLight();
static MLRLight*
Make(
Stuff::MemoryStream *stream,
int version
);
static MLRLight*
Make(Stuff::Page *page);
virtual void
Save(Stuff::MemoryStream *stream);
virtual void
Write(Stuff::Page *page);
enum LightType {
AmbientLight = 0,
InfiniteLight,
InfiniteLightWithFallOff,
PointLight,
SpotLight,
LookUpLight
};
virtual LightType
GetLightType() = 0;
virtual void
LightVertex(const MLRVertexData&) = 0;
void SetIntensity (Stuff::Scalar _int)
{ Check_Object(this); intensity = _int; };
Stuff::Scalar GetIntensity ()
{ Check_Object(this); return intensity; };
void SetColor(Stuff::RGBColor col)
{ Check_Object(this); color = col; }
void SetColor(Stuff::Scalar, Stuff::Scalar, Stuff::Scalar);
void GetColor(Stuff::RGBColor& col)
{ Check_Object(this); col = color; };
void GetColor(Stuff::Scalar&, Stuff::Scalar&, Stuff::Scalar&);
void GetInWorldPosition(Stuff::Point3D& pos)
{ Check_Object(this); pos = lightToWorld; };
void GetInWorldDirection(Stuff::UnitVector3D& dir)
{ Check_Object(this); lightToWorld.GetLocalForwardInWorld(&dir); };
void GetInShapePosition(Stuff::Point3D& pos)
{ Check_Object(this); pos = lightToShape; };
void GetInShapePosition(Stuff::LinearMatrix4D& pos)
{ Check_Object(this); pos = lightToShape; };
void GetInShapeDirection(Stuff::UnitVector3D& dir)
{ Check_Object(this); lightToShape.GetLocalForwardInWorld(&dir); };
void SetLightToWorldMatrix(const Stuff::LinearMatrix4D&);
const Stuff::LinearMatrix4D&
GetLightToWorldMatrix()
{ Check_Object(this); return lightToWorld; };
virtual
void SetLightToShapeMatrix(const Stuff::LinearMatrix4D&);
const Stuff::LinearMatrix4D&
GetLightToShapeMatrix()
{ Check_Object(this); return lightToShape; };
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Light Map Support
//
virtual MLRLightMap *
GetLightMap()
{Check_Object(this); return NULL; }
int
GetLightMask()
{Check_Object(this); return lightMask;}
void
SetDynamicLight()
{Check_Object(this); lightMask |= MLRState::TerrainLightingMode;}
void
SetStaticLight()
{Check_Object(this); lightMask &= ~MLRState::TerrainLightingMode;}
void
SetName(const char *name)
{Check_Object(this); lightName = name;}
const char*
GetName()
{Check_Object(this); return lightName;}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class Data Support
//
public:
static ClassData
*DefaultData;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Testing
//
public:
void
TestInstance();
protected:
Stuff::Scalar
intensity;
Stuff::RGBColor
color;
Stuff::LinearMatrix4D
lightToWorld, lightToShape;
int
lightMask;
Stuff::MString
lightName;
};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -