前提
現在iPhone並びにiPadにて、ポリゴン描画処理を実装しております。
ここで、以下の関数を利用してポリゴン描画を行っているのですが、指定したはずの領域にポリゴンが描画されません。
試したこと
以下のソースにおけるDrawPolygonに、_x=0,_y= 0,_w=mWidth,_h=mHeightを入れた、画面全体を覆うポリゴンの表示は
正しい描画が確認できています。
ただ、画面全体でない任意の値を入れた場合、表示がされていない、もしくは領域外に表示が行われている可能性がでており
想定した通りの処理になっておりません。
同様に、MakeVertexBufferで生成されるデバイス正規化座標を、GL.VertexPointerで直値指定する処理も試みましたが
失敗しております。
該当のソースコード
C#
1 //=================================================== 2 // ポリゴン描画 3 //=================================================== 4 public void DrawPolygon(int _x, int _y, int _w, int _h, float rr, float gg, float bb, float aa) 5 { 6 // テクスチャのバインドを外す 7 GL.Disable((All)EnableCap.Texture2D); 8 GL.BindTexture(All.Texture2D, 0); 9 10 // ポリゴン描画 11 GL.Color4(rr, gg, bb, aa); 12 GL.VertexPointer(3, All.Float, 0, MakeVertexBuffer(_x, _y, _w, _h)); 13 GL.TexCoordPointer(2, All.Float, 0, MakeFullSizeUVBuffer()); 14 GL.DrawArrays(All.TriangleStrip, 0, 4); 15 16 // テクスチャを有効に戻す 17 GL.Enable((All)EnableCap.Texture2D); 18 } 19 20 //=================================================== 21 // 頂点バッファの生成 22 //=================================================== 23 public float[] MakeVertexBuffer(int _x, int _y, int _w, int _h) 24 { 25 // ウィンドウ座標を正規デバイス座標に変換 26 float left = ((float)_x / (float)mWidth ) * 2.0f - 1.0f; 27 float top = ((float)_y / (float)mHeight) * 2.0f - 1.0f; 28 float right = ((float)(_x + _w) / (float)mWidth ) * 2.0f - 1.0f; 29 float bottom = ((float)(_y + _h) / (float)mHeight) * 2.0f - 1.0f; 30 31 // 頂点バッファの生成 32 float[] vertexs = 33 { 34 left, top, 0.0f, //頂点0 35 left, bottom, 0.0f, //頂点1 36 right, top, 0.0f, //頂点2 37 right, bottom, 0.0f, //頂点3 38 }; 39 return MakeFloatBuffer(vertexs); 40 } 41 42 //=================================================== 43 // 100%サイズUVバッファの生成 44 //=================================================== 45 public float[] MakeFullSizeUVBuffer() 46 { 47 float[] fullSize = 48 { 49 0.0f, 0.0f, 50 0.0f, 1.0f, 51 1.0f, 0.0f, 52 1.0f, 1.0f, 53 }; 54 return MakeUVBuffer(fullSize); 55 } 56 57 //=================================================== 58 // UVバッファの生成 59 //=================================================== 60 public float[] MakeUVBuffer(float[] uv) 61 { 62 return MakeFloatBuffer(uv); 63 } 64 65 //=================================================== 66 // float配列をFloatBufferに変換 67 //=================================================== 68 public float[] MakeFloatBuffer(float[] array) 69 { 70 return (array); 71 }
補足
処理内のmWidth、mHeightは、デバイスのピクセル幅となります(ポイント値ではありません)。
動作確認は、VisualStudio 2019のエミュレータ、iPad Air(4th generation)で行っております。
それでは以上、何かお気付きの点がございましたら、どうぞご指摘をお願いいたします。
回答1件
あなたの回答
tips
プレビュー