OpenTKOpenTKがGitHubで更新されるようになりました。NuGetから手に入れることができるようになりました。Coreに対応する機運があるようです。動的にモデル変形-VBO[3]形が変化するものを描画する今回は、描画ごとに物体の形状が変化するものを描画させます。今までは、物体を別の角度から見ることはあっても、その形を変化させることはありませんでした。そのため、一度物体のデータを送り込んでしまえば、それをずっと使い続ければよかったわけです。その処理は特に難しいものでは無く、記述する場所とオプションを変更すればOKです。構造体を用いる形状が変化するだけではプログラミング面ではあまり変化がないため、今回は構造体を使って頂点情報を定義します。それに伴って、VBOの数が1つになります。これは、一つのVBOに複数の頂点情報をまとめて格納できるためです。頂点情報の場所の指定(GL.VertexPointer等)の処理で注意が必要です。波を描画ソースコードは、OpenGLの処理自体の記述はあまり変わっていません。Marshal.SizeOf(default(Vertex));}Vertex(=頂点)には、一つのオブジェクトで位置、法線、色の情報を持たせます。Sizeは、この構造体の一つのオブジェクトの大きさです。ibo);今回はVBOもIBOも一つづつ使います。データを送り込む処理は、描画前に毎回行うことにしました。ibo);//バッファを1コ削除GL.DisableClientState(ArrayCap.VertexArray);//VertexArrayを無効化GL.DisableClientState(ArrayCap.NormalArray);//NormalArrayを無効化GL.DisableClientState(ArrayCap.ColorArray);//ColorArrayを無効化バッファの開放は忘れずに。0);300行目と304行目でGL.BufferData関数を使って、描画ごとにデータを送ってますが、最後の引数に注目してください。BufferUsageHint.DynamicDrawと指定してあります。これはバッファのアクセスに関する情報をGPUに伝え、より効果的な使い方をするような工夫です。DynamicDrawは、もっとも頻繁に内容が変わることを示します。323行目、326行目、329行目で、ひも付けされたVBOの中の情報の位置を指定しています。今までのものは第3引数が0でしたが、これは0を指定することでデータがぎっしり詰まっていることを伝えていました(関数の仕様)。位置情報はVertex.Sizeごとに現れ、その中でのずれは0、法線情報はVertex.Sizeごとに現れ、その中でのずれはVertex3の大きさ、色情報はVertex.Sizeごとに現れ、その中でのずれはVertex3の大きさ×2、ということになります。第4引数Offset(=0,Vector3.SizeInBytes等)波のモデルの生成部分は、グラフィックスの処理とは関係が無いので詳しくは書きません。中心からの距離と時間からある地点での高さを、関数を使って求め、その関数の導関数を使って法線を求めます。座標によって色を付けます。MasuqaT.NET。