私は OpenGL を使用してカメラの視点をレンダリングしています。コードの 1 つのポイントで、光の方向 (ここでは「Vector4」タイプとして示されています) を取得し、それを「Matrix4x4」タイプのマトリックスで乗算しようとしています。 Modelview 変換 (これが意味をなさない場合は申し訳ありません。これは学校のプロジェクトのためです。そのため、私はまだこのことについて学んでいます) とにかく、私のコードは次のようになります...
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);