无法绘制不同数量的点

Cant draw a varying amount of points

所以我有这段代码。我的目标基本上是绘制不同数量的点。如您所见,此代码应该基于数组绘制点,并且每当用户点击时都会添加更多点。然而,事情变得古怪!

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

  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)
    }
    

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