2012-03-12 2 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 사용할 때 렌더러 정점 그리기 및 화면이 비어 있습니다. 누군가 내가 무엇을 놓치고 있는지 알려 주시면 감사하겠습니다. 당신은 ES 2.0을 사용하여, 그렇게하고

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

glPointSize() 호출은 아마 아무것도하지 않습니다 감사

다음은 내 정점과 프래그먼트 쉐이더입니다. 출력 크기가 내장 된 gl_PointSize을 사용하여 포인트 크기를 쉐이더 ​​내부에서 설정해야합니다.

관련 문제