无法绘制不同数量的点
Cant draw a varying amount of points
所以我有这段代码。我的目标基本上是绘制不同数量的点。如您所见,此代码应该基于数组绘制点,并且每当用户点击时都会添加更多点。然而,事情变得古怪!
基本上一切都很好,直到您点击并添加一个点。当您添加一个点时,只会绘制第一个点和新点。这是每个数组大小发生的情况
- 绘制第一个点
- 抽到两分
- 三个点都画好了
- 只抽取第一张和最后一张
- 前两个
- 没有任何反应。
没有任何反应 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
错误并且调用没有进一步的效果。
所以我有这段代码。我的目标基本上是绘制不同数量的点。如您所见,此代码应该基于数组绘制点,并且每当用户点击时都会添加更多点。然而,事情变得古怪!
基本上一切都很好,直到您点击并添加一个点。当您添加一个点时,只会绘制第一个点和新点。这是每个数组大小发生的情况
- 绘制第一个点
- 抽到两分
- 三个点都画好了
- 只抽取第一张和最后一张
- 前两个
- 没有任何反应。
没有任何反应 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
错误并且调用没有进一步的效果。