Я новичок в C ++, и то, что я работаю над документами, говорит мне посмотреть на пример кода, только он ничего не объясняет, поэтому я пытаюсь его расшифровать.
я наткнулся на это объявление функции, но я не до конца ее понимаю.
только первая функция
я получаю под частью, что я не получаю, это после MHWRender :: MPxShaderOverride (obj), а затем он начинается как список аргументов (или как его называют, я не знаю)
и я думаю, где я мог бы найти, что указанные входные данные будут.
опять же, я понятия не имею, что это делает, поэтому я немного растерялся в том, как это объяснить.
Полный код можно найти здесь:
http://help.autodesk.com/view/MAYAUL/2016/ENU/?guid=__cpp_ref_hw_phong_shader_2hw_phong_shader_8cpp_example_html
hwPhongShaderOverride(const MObject& obj)
: MHWRender::MPxShaderOverride(obj)
, fShaderNode(NULL)
, fTextureData(NULL)
, fDrawUsingShader(true) // Disabling this will use fixed-function which only has an OpenGL implementation
, fShaderBound(false)
, fTexture(NULL)
, fInColorPass(false)
, fColorShaderInstance(NULL)
, fInShadowPass(false)
, fShadowShaderInstance(NULL)
, fTransparency(0.0f)
{
// Create a shader instance to use for drawing
//
if (fDrawUsingShader)
{
createShaderInstance();
}
fAmbient[0] = fAmbient[1] = fAmbient[2] = 0.0f;
fDiffuse[0] = fDiffuse[1] = fDiffuse[2] = fDiffuse[3] = 0.0f;
fSpecular[0] = fSpecular[1] = fSpecular[2] = 0.0f;
fShininess[0] = fShininess[1] = fShininess[2] = 500.0f;
}
// override blend state when there is blending
static const MHWRender::MBlendState *sBlendState;
// Current hwPhongShader node associated with the shader override.
// Updated during doDG() time.
hwPhongShader *fShaderNode;
// Shader inputs values including transparency
float fTransparency;
float fAmbient[3];
float fDiffuse[4];
float fSpecular[3];
float fShininess[3];
// Temporary system buffer for creating textures
unsigned char* fTextureData;
// Pass tracking
bool fInColorPass;
bool fInShadowPass;
// Draw with texture or shader flag
bool fDrawUsingShader;
// VP2 texture
MHWRender::MTexture *fTexture;
// VP2 color shader
MHWRender::MShaderInstance *fColorShaderInstance;
// VP2 shadow shader
MHWRender::MShaderInstance *fShadowShaderInstance;
mutable bool fShaderBound;
Это конструктор класса. Класс назван hwPhongShaderOverrideMObject
и это вытекает из MHWRender::MPxShaderOverride
Например:
class hwPhongShaderOverrideMObject : public MHWRender::MPxShaderOverride
{
...
};
hwPhongShaderOverride(const MObject& obj)
указывает, что этот конструктор принимает один аргумент в качестве входных данных, константную ссылку на MObject
пример. Конструктор объявляется и реализуется встроенным внутри самого объявления класса, а не реализуется отдельно от его объявления. Оба подхода разрешены в C ++.
Все между :
а также {
это список инициализации для конструктора. Он инициализирует членов класса.
:
начинается список инициализации.
MHWRender::MPxShaderOverride(obj)
передает входной объект в конструктор базового класса. Базовые классы всегда должны быть построены первыми.
, fShaderNode(NULL)
инициализирует fShaderNode
член NULL.
, fTextureData(NULL)
инициализирует fTextureData
член NULL.
И так до {
достигнут конец списка инициализации. Тогда тело конструктора вводится, как и любая другая функция, после того, как члены класса были инициализированы первыми.
Ниже приведен конструктор.
hwPhongShaderOverride(const MObject& obj)
: MHWRender::MPxShaderOverride(obj)
, fShaderNode(NULL)
, fTextureData(NULL)
, fDrawUsingShader(true) // Disabling this will use fixed-function which only has an OpenGL implementation
, fShaderBound(false)
, fTexture(NULL)
, fInColorPass(false)
, fColorShaderInstance(NULL)
, fInShadowPass(false)
, fShadowShaderInstance(NULL)
, fTransparency(0.0f)
{
// Create a shader instance to use for drawing
//
if (fDrawUsingShader)
{
createShaderInstance();
}
fAmbient[0] = fAmbient[1] = fAmbient[2] = 0.0f;
fDiffuse[0] = fDiffuse[1] = fDiffuse[2] = fDiffuse[3] = 0.0f;
fSpecular[0] = fSpecular[1] = fSpecular[2] = 0.0f;
fShininess[0] = fShininess[1] = fShininess[2] = 500.0f;
}
Это использует список инициализаторов инициализировать свои переменные-члены, вызывая их конструкторы. hwPhongShaderOverride
наследуется от MHWRender::MPxShaderOverride
так он называет MHWRender::MPxShaderOverride
конструктор в качестве первого элемента в списке инициализатора (т.е. MHWRender::MPxShaderOverride(obj)
,
Вы можете переключаться fDrawUsingShader
создать экземпляр шейдера (как видно в теле конструктора). После этого он добавляет некоторые начальные значения к четырем массивам fAmbient
, fDiffuse
, fSpecular
, а также fShininess
,