所以我有这个代码。我的目标基本上是绘制不同数量的积分。正如您所看到的,此代码应该基于数组绘制点,并且每当用户点击时,都会添加更多点。不过有些事情很古怪!
基本上一切都很好,直到你点击并添加一个点。当您添加一个点时,仅绘制第一个和新点。下面是每个数组大小发生的事情
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)
}
答案 0 :(得分:1)
您错误地使用了glVertexAttribPointer
。其size
参数不描述数组的大小,而是描述每个单一数组元素的大小。它允许您指定标量(大小为1)或具有2到4维的向量。除了1,2,3和4之外的其他值将导致GL_INVALID_VALUE
错误,并且调用没有进一步的效果。