-1対1はクリッピングスペースです。画面に表示されたときに座標空間がクリッピング空間にある場合は、射影行列を使用して空間を変換するのを忘れたと思います。使用している場合GLKBaseEffect
(どこでもメモリリークが発生する傾向があるため、後でお勧めしません)<baseEffect>.transform.projectionMatrix
、スペースを正しく変換するマトリックスに設定する必要があります。例えば、
GLKBaseEffect* effect = [[GLKBaseEffect alloc] init];
GLKMatrix4 projectionMatrix = GLKMatrix4MakeOrtho(0, <width>, 0, <height>, 0.0f, 1.0f);
self.effect.transform.projectionMatrix = projectionMatrix;
width
height
デバイスの画面// GLKView
etcの幅と高さになります。これは、渡した座標に自動的に適用されるため、画面の左下隅を原点として、軸上で0から軸上および軸<width>
上で0からの範囲の通常の座標を使用できます。x
<height>
y
私のようなカスタムシェーダーを使用している場合は、次を使用して投影行列を均一に渡すことができます。
glUniformMatrix4fv(shaderLocations.projectionMatrix,1,0,projection.m)
ここprojection
で、は行列であり、shaderLocations.projectionMatrix
はユニフォームの識別子です。彼らが言うように、その名前です。次に、位置に射影行列を掛ける必要があります。
マトリックスを手動で渡すか、正しいプロパティをに設定することにより、クリッピングスペースから変換した後、GLKBaseEffect
OpenGLスペースとUIKitスペースの唯一の違いは、y
軸が反転することです。touches
このようなメソッドとジェスチャレコグナイザーを介して受け取ったタッチを変換します。
CGPoint openGLTouch = CGPointMake(touch.x, self.view.bounds.size.height - touch.y);
質問がある場合は明確にするために最善を尽くしますが、私自身はOpenGLに比較的慣れていないことを覚えておいてください。:)