0

私が持っているもの: GLKViewController とそれに関連付けられたビューで、予想される位置、スケール、色などでキューブ オブジェクトを描画します (必要に応じて回転します:)。

*私が欲しいもの:立方体ではなく、頂点ペアの配列であるジオメトリを持つオブジェクトを指定し、GLKit (暗黙: OpenGL-ES-2) に頂点の各ペアを線分として描画するよう説得したいと思います私のビュースペースで。

注: 私の線分はライン ストリップを形成しないため、ライン ストリップはありません。私の線分は、メッシュ (またはその他のジオメトリ) の一部として三角形を形成しません。これらは、空間内の個々の線分であり、互いに関係はありません。「ピックアップ スティック」などを考えてみてください。

私が試したこと:次のような頂点ペア (GLKVector3) と頂点カラー (GLKVector4) の配列を作成しました。

lineVertices  = calloc (verts, sizeof(GLKVector3));
colorVertices = calloc (verts, sizeof(GLKVector4));

lineVertices[index++] = GLKVector3Make(x, 0, z);
lineVertices[index++] = GLKVector3Make(x2, 0, z2);
// etc., snip
colorVertices[cIndex++] = GLKVector4Make(1, 0.0, 1, 1);
// etc., snip

...そして、次のように描画しようとしました:

glEnable(GL_DEPTH_TEST);

glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition, 2,   // ** WRONG ** "2" should be "3"
                          GL_FLOAT, GL_FALSE, 0, lineVertices);

glEnableVertexAttribArray(GLKVertexAttribColor);
glVertexAttribPointer(GLKVertexAttribColor, 4,
                              GL_FLOAT, GL_FALSE, 0, colorVertices);

glDrawArrays(GL_LINES, 0, lineVertCount);

glDisableVertexAttribArray(GLKVertexAttribPosition);
glDisableVertexAttribArray(GLKVertexAttribColor);

(同じインフラストラクチャを使用するキューブ オブジェクトが正しく描画されるという事実によって証明されるように、このコードはすべて適切な場所にあります。)

私がそれを試したときに得られるもの: 私の線分の一部だけが描画され、それらはあらゆる方向を指しているように見えます。描かれた線分のパターンがよく分からない。私の lineVertices 配列が正しい(チェックされている)ことを除いて、ランダムなメモリを取得しているかのようです。

宿題が完了しました: SO の質問に近いものがたくさんありますが、ほとんどはライン ストリップや三角形メッシュに発展するか、まったく当てはまらないものです。セットアップの問題に関連するものもあります(私のキューブは問題なく描画されるため、すでに排除されています)。他のSO以外の回答、チュートリアルなどについても同様です。

注: ビルトイン シェーダーに依存しています (つまり、アプリに create-shader コードがありません)。

私の最終結果のジオメトリは立方体ではありませんが、ここでは概念実証として基本的なワイヤフレーム立方体を描画しても問題ありません。繰り返しますが、三角形やラインストリップを使用せずに、最終結果はそれらに適していないためです。

私が探している裸線セグメントの描画を行うサンプルコードへのポインタを誰か教えてもらえますか?

ありがとう!

4

1 に答える 1