不能得出不同数量的分数

时间:2015-11-28 18:44:41

标签: ios swift opengl-es opengl-es-2.0 glkit

所以我有这个代码。我的目标基本上是绘制不同数量的积分。正如您所看到的,此代码应该基于数组绘制点,并且每当用户点击时,都会添加更多点。不过有些事情很古怪!

基本上一切都很好,直到你点击并添加一个点。当您添加一个点时,仅绘制第一个和新点。下面是每个数组大小发生的事情

  1. 第一点绘制
  2. 绘制两点
  3. 绘制所有三个点
  4. 仅限第一个和最后一个
  5. 第一个和最后两个
  6. 什么都没发生。
  7. 8-(可能是无限)没有任何事情发生。只有第一点

    var vVertices:[GLfloat] = [0, 0, 0,
        -1, 0, 0,
        0.5, 0.5, 0]
    // var vVertices:[GLfloat] = []
    var VAO:GLuint = 0
    var VBO:GLuint = 0
    
    var cc:GLfloat = 0.0
    override func glkView(view: GLKView, drawInRect rect: CGRect) {
    
    
    
    
        glClearColor(cc, 0.65, 0.65, 1.0)
        glClear(GLbitfield(GL_COLOR_BUFFER_BIT) | GLbitfield(GL_DEPTH_BUFFER_BIT))
        cc += 0.001
    
        //Activate the shader
        glUseProgram(program);
        glEnable(GLenum(GL_POINT_SMOOTH))
        let loc = glGetUniformLocation(program, "color")
        if (loc != -1)
        {
            //Pass the color
            glUniform4f(loc, 0, 0, 1, 1)
        }
        let loc2 = glGetUniformLocation(program, "pointSize")
        if (loc != -1)
        {
            //Pass the point size
            glUniform1f(loc2, 20)
        }
    
    
        // Load the vertex data
        let pointsc = vVertices.count / 3
        print(pointsc)
    
        glVertexAttribPointer(0, GLint(pointsc), GLenum(GL_FLOAT), GLboolean(GL_FALSE), 0, vVertices);
        glEnableVertexAttribArray(0);
        glDrawArrays(GLenum(GL_POINTS), 0, GLint(pointsc));
    
    
    
    }
    
    func placePoint(x: GLfloat, y: GLfloat)
    {
    
    }
    
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        vVertices.append(GLfloat(arc4random_uniform(10)) / 10.0)
        vVertices.append(GLfloat(arc4random_uniform(10)) / 10.0)
        vVertices.append(0)
    }
    

1 个答案:

答案 0 :(得分:1)

您错误地使用了glVertexAttribPointer。其size参数不描述数组的大小,而是描述每个单一数组元素的大小。它允许您指定标量(大小为1)或具有2到4维的向量。除了1,2,3和4之外的其他值将导致GL_INVALID_VALUE错误,并且调用没有进一步的效果。