"lights[i].position"
В отличие от некоторых языков сценариев, C ++ не имеет механизма для применения кода к строковому литералу.Таким образом, "lights[i].position"
всегда является именно этой строкой.«я» не признается чем-то особенным;это символ 'i'.
Что вы действительно хотите сделать, это сгенерировать строку на основе переменной i
.Что можно сделать достаточно легко:
std::ostringstream strm;
strm << "lights[" << i << "]";
std::string light = strm.str();
Есть более эффективные способы сделать это, но это самый простой способ в C ++.В любом случае, если производительность действительно имеет значение, вы не будете запрашивать единообразные местоположения во время выполнения.
Теперь вам нужно сгенерировать строку для каждого отдельного доступа к унифицированному элементу, а затем использовать эту строку для доступа к этому унифицированному члену.,Таким образом, для каждого доступа вы должны сделать следующее:
std::string str = light + ".position";
glUniform3f(glGetUniformLocation(program, str.c_str()),
activeLights[i].position.x,
activeLights[i].position.y,
activeLights[i].position.z
);
Вы можете повторно использовать str
вместо определения новых строк.