maya api — Что это за объявление C ++ Function

Я новичок в 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;

-1

Решение

Это конструктор класса. Класс назван 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.

И так до { достигнут конец списка инициализации. Тогда тело конструктора вводится, как и любая другая функция, после того, как члены класса были инициализированы первыми.

6

Другие решения

Ниже приведен конструктор.

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,

2

По вопросам рекламы [email protected]