【发布时间】:2011-11-12 01:26:24
【问题描述】:
我正在使用 OpenGL 来渲染相机透视图,并且在我的代码中的一个点我试图获取光的方向(此处显示为“Vector4”类型)并将其乘以“Matrix4x4”类型的矩阵" 代表模型视图转换(对不起,如果这没有任何意义,这是一个学校项目,因此我仍在学习这些东西)无论如何,我的代码如下......
Vector4 lightDirection = data->dir * follow->getModelviewMatrix().getInverse().getTranspose();
data->dir = lightDirection;
setLight(*data);
这给了我以下错误:
passing 'const vec4<double>' as 'this' argument of 'vec4<T>& vec4<T>::operator=(const vec4<T>&)[with T = double]' discards qualifiers
同样,大部分代码都是为类预先编写的(即向量和矩阵类型),但如果有人能帮助我破译错误的含义,将不胜感激!我可以根据需要提供更多信息。
我认为 'data' 或 'data->dir' 是 const,但我找不到它们中的任何一个。 'dir' 是 SceneLightData 类型,当它被添加时,我正在这样做:
void Scene::addLight(const SceneLightData &sceneLight)
{
SceneLightData light = sceneLight;
m_lights.push_back(&light);
}
错误发生在这一行:
data->dir = lightDirection;
编辑
问题解决了。感谢大家!解决方案:
void Scene::addLight(const SceneLightData &sceneLight)
{
SceneLightData* light = new SceneLightData;
*light = sceneLight;
m_lights.push_back(light);
}
和
SceneLightData* data = m_lights[i];
data->dir = data->dir * follow->getModelviewMatrix().getInverse().getTranspose();
setLight(*data);
【问题讨论】:
-
Vector4是typedef还是const vec4<double>? -
哦,等等,您在
data->dir = lightDirection;? 的行上收到此错误? -
light在退出addLight时不再存在,因此您添加到m_lights的指针将在函数返回时无效。你应该做m_lights.push_back(new SceneLightData(sceneLight));并确保它在从m_lights删除或Scene破坏时被删除。 -
data的类型是什么?请提供data的声明,以及它碰巧是什么类型的定义(或指向的类型的定义)。
标签: c++ constants qualifiers