1

私は 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);
4

2 に答える 2

1

data->dir一定です。これは、変更できないことを意味し、別の値を割り当てようとしているため、コンパイラが怒っています。詳細についてはconst-correctnessを参照してください。

于 2011-11-12T01:29:10.667 に答える
0

このエラーは、constオブジェクトで非constメンバー関数を呼び出そうとしているために発生します。コードのある時点で、の代入演算子を呼び出していますconst vec4<double>

operator=オブジェクトに割り当てると、割り当てられているオブジェクトが変更されるため(新しい値を与えるため)、代入演算子( )は非定数です。

正確に問題が発生している場所は、例からは明らかではありません。それでも問題が解決しない場合は、例を、問題を示す最小限の完全なプログラムに減らしてみてください。さらに説明できます。

于 2011-11-12T01:34:28.137 に答える