2012-03-12 18 views
3

ポイントを描画するための単純なOpenGL ES 2.0コードがあります。ここではVAOのセットアップです:glDrawArrays(GL_POINTS、0 4)は、iOS 5.0とOpenGL ES 2.0でポイントを描画しません

static const GLfloat squareVertices[] = { 
     -0.5f, -0.5f, -1.0f, 
     0.5f, -0.5f, -1.0f, 
     0.5f, 0.5f, -1.0f, 
     -0.5f, 0.5f, -1.0f 
    }; 

    static const GLfloat squareColors[] = { 
     1.0f, 0.0f, 0.0f, 1.0f, 
     0.0f, 1.0f, 0.0f, 1.0f, 
     0.0f, 0.0f, 1.0f, 1.0f, 
     1.0f, 0.0f, 1.0f, 1.0f 
    }; 
    glGenVertexArraysOES(1, &_vertexArray); 
    glBindVertexArrayOES(_vertexArray); 

    glGenBuffers(1, &_vertexBuffer); 
    glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer); 
    glBufferData(GL_ARRAY_BUFFER, sizeof(squareVertices), squareVertices, GL_STATIC_DRAW); 

    glEnableVertexAttribArray(ATTRIB_VERTEX); 
    glVertexAttribPointer(ATTRIB_VERTEX, 3, GL_FLOAT, GL_FALSE, 0, 0); 

    glGenBuffers(1, &_colorP_VBO); 
    glBindBuffer(GL_ARRAY_BUFFER, _colorP_VBO); 
    glBufferData(GL_ARRAY_BUFFER, sizeof(squareColors), squareColors, GL_STATIC_DRAW); 

    glEnableVertexAttribArray(ATTRIB_COLOR); 
    glVertexAttribPointer(ATTRIB_COLOR, 4, GL_FLOAT, GL_FALSE, 0, 0); 
    glBindVertexArrayOES(0); 

、ここでレンダリングコードです:私はGL_LINE_LOOPを使用するか、それが画面上にカラフルな四角形を描画GL_TRIANGLE_FANとき

[glView setDisplayFramebuffer:glView.viewFrameBuffer]; 

    glUseProgram(simpleShaderProgram); 
    glBindVertexArrayOES(_vertexArray); 

// glLineWidth(5.0f); 
//  glDrawArrays(GL_LINE_LOOP, 0, 4); 
//  glDrawArrays(GL_TRIANGLE_FAN, 0, 4); 
// glEnable(GL_POINT_SMOOTH); 

    glPointSize(25.0f); 
    glDrawArrays(GL_POINTS, 0, 4); 

    glBindVertexArrayOES(0); 

    glUseProgram(0); 

    glBindFramebuffer(GL_FRAMEBUFFER, 0); //unbind the FBO 
    [glView presentFramebuffer:glView.viewFrameBuffer]; 

。しかし、私がGL_POINTSを使うとき、レンダラーは頂点を描画せず、スクリーンは空白です。 誰かが私に不足していることを教えていただければ幸いです。 おかげ

以下は、私の頂点とフラグメントシェーダです:

attribute vec4 position; 
attribute vec4 v_color; 

varying vec4 colorVarying; 


void main() 
{ 
    colorVarying = v_color; 
    gl_Position = position; 

} 

------------------------------------------------ 
precision mediump float; 
varying vec4 colorVarying; 


void main() 
{ 
    gl_FragColor = colorVarying; 
} 
+0

あなたはES 2.0を使用しているので、 'glPointSize'呼び出しはおそらく何もしません。ポイントサイズはシェーダーの内側に設定する必要があります。頂点シェーダーも投稿してください。 –

+0

頂点シェーダコードを追加しました。私の問題は、画面にポイントが表示されないことです。 1ピクセルでもない。 – sia

+1

gl_PointSize = 5.0;頂点シェーダでトリックを行いました。助けてくれてありがとう! – sia

答えて

4

あなたはES 2.0を使用しているので、glPointSize()コールは、おそらく何もしません。ポイントサイズは、gl_PointSize組み込みの出力変数を使用して、シェーダー内で設定する必要があります。

関連する問題