📄 mlrinfinitelightwithfalloff.hpp
字号:
//===========================================================================//
// Copyright (C) Microsoft Corporation. All rights reserved. //
//===========================================================================//
#pragma once
#define MLR_MLRINFINITELIGHTWITHFALLOFF_HPP
#include "MLR.hpp"
namespace MidLevelRenderer {
//##########################################################################
//############## MLRInfiniteLightWithFalloff #########################
//##########################################################################
class MLRInfiniteLightWithFalloff:
public MLRLight
{
public:
static void
InitializeClass();
static void
TerminateClass();
MLRInfiniteLightWithFalloff(ClassData *class_data=MLRInfiniteLightWithFalloff::DefaultData);
MLRInfiniteLightWithFalloff(
ClassData *class_data,
Stuff::MemoryStream *stream,
int version
);
MLRInfiniteLightWithFalloff(
ClassData *class_data,
Stuff::Page *page
);
~MLRInfiniteLightWithFalloff();
void
Save(Stuff::MemoryStream *stream);
void
Write(Stuff::Page *page);
virtual void
LightVertex(const MLRVertexData&);
virtual LightType
GetLightType()
{ Check_Object(this); return InfiniteLightWithFallOff; }
//
// light falloff. The light is infinite if the GetFalloffDistance
// function return false. Lights default to infinite unless
// SetFalloffDistance is called
//
void
SetFalloffDistance(
Stuff::Scalar n,
Stuff::Scalar f
);
bool
GetFalloffDistance(
Stuff::Scalar& n,
Stuff::Scalar& f
);
inline Stuff::Scalar
GetFalloffNear()
{ Check_Object(this); return innerRadius; }
inline Stuff::Scalar
GetFalloffFar()
{ Check_Object(this); return outerRadius; }
bool
GetFalloff(const Stuff::Scalar& length, Stuff::Scalar& falloff)
{
Check_Object(this);
Verify(length>0.0f);
if(length <= innerRadius)
{
falloff = 1.0f;
return true;
}
if (length >= outerRadius)
{
return false;
}
Verify(outerRadius - innerRadius > Stuff::SMALL);
falloff = (outerRadius - length) * oneOverDistance;
return true;
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Class Data Support
//
public:
static ClassData
*DefaultData;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Testing
//
public:
void
TestInstance();
protected:
Stuff::Scalar
innerRadius, outerRadius, oneOverDistance;
};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -