I’m trying to generate points for a sphere by subdividing the space of spherical coordinate in res sector and res slices.
At first I did my own implementation, but it wasn’t working. After a while I looked online and I copied Songho implementation and others as well.
But I still have the same issue:
The points are not evenly spaced in the sphere, creating a strip.
This is the code I’m using to generate the sphere:
float sectorStep = 2 * PI / res;
float stackStep = PI / res;
float sectorAngle, stackAngle;
for(int i = 0; i <= res; ++i){
stackAngle = PI / 2 - i * stackStep;
float xy = r * sinf(stackAngle);
float z = r * cosf(stackAngle);
for(int j = 0; j <= res; ++j){
sectorAngle = j * sectorStep;
float x = xy * sinf(sectorAngle);
float y = xy * cosf(sectorAngle);
vertices.push_back(glm::vec3(x,y,z));
}
}
glGenVertexArrays(1, &VAO);
glGenBuffers(1, &verticesVBO);
glBindVertexArray(VAO);
glBindBuffer(GL_ARRAY_BUFFER, verticesVBO);
glBufferData(GL_ARRAY_BUFFER, vertices.size(), vertices.data(), GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(0);
glBindVertexArray(0);
And here it’s how I draw it:
glm::mat4 projection = glm::perspective(glm::radians(camera.getFOV()), (float) SCR_WIDTH / (float) SCR_HEIGHT, 0.1f, 100.0f);
glm::mat4 view = camera.getViewMatrix();
glm::mat4 model = glm::mat4(1.0f);
shader.use();
shader.setUniform("projection_view", projection*view);
shader.setUniform("model", model);
glBindVertexArray(sphere.VAO);
glDrawArrays(GL_POINTS, 0, sphere.vertices.size());
I wanted to draw the vertices first and then move to drawing the triangles.
Sorry if this is a stupid question.