2016-10-12 8 views
-2

私は基本的に、このアルゴリズムを使用してゲームでフラットプレーンの配列を生成していますが、プログラムを実行すると例外が発生するため、 (GLuintはOpenGLのunsigned intです)配列を作成するときに例外がスローされる

const GLuint planeDimension = 30.0f; 
const GLuint half = planeDimension/2; 
const GLuint verticesCount = planeDimension * planeDimension; 
int counter = 0; 
GLfloat planeVertices[verticesCount]; 

for (GLuint length = 0; length < planeDimension; length++) { 
    for (GLuint width = 0; width < planeDimension; width++) { 
     planeVertices[counter++] = length - half; 
     planeVertices[counter++] = 0.0f; 
     planeVertices[counter++] = width - half; 
    } 
} 
+0

のほとんどをあなたは3回カウンターインクリメントを呼び出します。それは2つです。あなたの配列はそれの3倍にはなりません。 –

答えて

1

ループ内の配列の外側にアクセスしています。あなたのループはplaneVerticesの各要素に対して1回の反復を持ちます。しかし、毎回counterを3回繰り返しています。したがって、すべてのループのうちの約1/3が配列の最後に到達すると、配列の外側に書き始めることになり、未定義の動作が発生します。

あなたは何をしようとしているのか分かりません。ループのたびに配列の3つの異なる要素を書いているのはなぜですか?だから、それを修正する方法が明確ではない。あなたは、単にそれが大として3回を宣言することができます:

GLfloat planeVertices[verticesCount * 3]; 

それとも、2次元配列として宣言できます。

GLfloat planeVertices[verticesCount][3]; 

次に、あなたのループはどうなる:

planeVertices[counter][0] = length - half; 
planeVertices[counter][1] = 0.0f; 
planeVertices[counter][2] = width - half; 
counter++; 
関連する問題