2012-04-06 26 views
1

画面上にピクセルを描画するのに少し助けが必要です。私が書いたコードはシミュレータ上で正常に動作しますが、私がデバイスにデプロイすると、ガベージが出力されます。私は、シミュレータ上で実行するとOpenGL Es 2.0 GLKit Draw Pixel

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect 
{ 
    GLfloat points[] = 
    { 
     110.0f, 110.0f, 
     111.0f, 110.0f, 
     110.0f, 111.0f, 
     111.0f, 111.0f, 

     112.0f, 112.0f, 
     113.0f, 112.0f, 
     112.0f, 113.0f, 
     113.0f, 113.0f, 
    }; 

    glClearColor(1.0f, 0.0f, 1.0f, 1.0f); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    GLKMatrix4 modelViewMatrix = GLKMatrix4MakeTranslation(0.0f, 0.0f, 0.0f); 
    self.effect.transform.modelviewMatrix = modelViewMatrix; 


    // Prepare the effect for rendering 
    [self.effect prepareToDraw]; 

    glEnableVertexAttribArray(GLKVertexAttribPosition); 
    glVertexAttribPointer(GLKVertexAttribPosition, 2, GL_FLOAT, GL_FALSE, 2*4, points); 
    glDrawArrays(GL_POINTS, 0, 8); 

} 

が、それは動作します:私はポイント/ピクセルを描画していますどこ

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]; 

    if (!self.context) { 
     NSLog(@"Failed to create ES context"); 
    } 

    GLKView *view = (GLKView *)self.view; 
    view.context = self.context; 
    view.drawableDepthFormat = GLKViewDrawableDepthFormat24; 

    [EAGLContext setCurrentContext:self.context]; 

    self.effect = [[GLKBaseEffect alloc] init]; 


    self.effect.useConstantColor = GL_TRUE; 

    self.effect.constantColor = GLKVector4Make(
               0.0, // Red 
               0.0, // Green 
               0.0, // Blue 
               1.0f);// Alpha 

    GLKMatrix4 projectionMatrix = GLKMatrix4MakeOrtho(0, 480, 0, 320, -1024, 1024); 
    self.effect.transform.projectionMatrix = projectionMatrix; 

} 

そして、ここにある:私はここにGLKViewControllerを設定しているとのviewDidLoad

だ:だからここに私のコードですそれに応じてピクセルを描画しますが、iPod4にデプロイするときにはゴミが表示されます。私は初心者ですので、簡単なピクセルを表示するのに役立ちます。

答えて

2

ここでは、デフォルト値がシミュレータとデバイスで異なるため、組み込みのgl_PointSize変数を頂点シェーダに設定する必要があると考えています。

this questionの回答がさらに説明されています。

+1

これは正しい説明のようですが、GLKBaseEffectを使用している場合、頂点シェーダにアクセスすることはできません。 GLKitは簡単な表示設定とバッファー回避には最適ですが、GLKBaseEffectに対して真剣にアドバイスし、代わりに独自のシェーダーを書くことをお勧めします。 –

+0

GLKBaseEffectを避ける限り、GLKViewでカスタムシェーダーを使用できますか?私はこれをうまく動作させるのに問題がありますが、おそらくコードに問題があります。 –

+2

はい、私は間違いなくそれをお勧めします!真のOpenGL ES愛好家は、ビューとバッファを完全に制御することを好むが、GLKViewが好きなのは、エンドコードをよりリーンで迷惑なものにするからです。 「Learn as you go」は、モバイルグラフィックスを搭載したゲームの名前です。 –