我正在尝试画一个球体,我是OpenGL的首发,我正在关注一个网站,并试图根据我的需要转换东西,但它甚至不到一半的范围。我写的代码是
for(unsigned int stackNumber = 0; stackNumber <= stacks; ++stackNumber)
{
for (unsigned int sliceNumber = 0; sliceNumber < slices; ++sliceNumber)
{
float theta = stackNumber * PI / stacks;
float phi = sliceNumber * 2 * PI / slices;
float sinTheta = std::sin(theta);
float sinPhi = std::sin(phi);
float cosTheta = std::cos(theta);
float cosPhi = std::cos(phi);
vertex.xyzw[0] = radius * cosPhi * sinTheta;
vertex.xyzw[1] = radius * sinPhi * sinTheta;
vertex.xyzw[2] = radius * cosTheta;
//vertex.xyzw[3] = 0.0f;
vertices.push_back(vertex);
}
}
int n = 0;
//int x = stacks*(slices + 1)*2;
//index = new GLuint[x];
for (unsigned int stackNumber = 0; stackNumber < stacks; ++stackNumber)
{
for (unsigned int sliceNumber = 0; sliceNumber <= slices; ++sliceNumber)
{
index.push_back((stackNumber * slices) + (sliceNumber % slices));
index.push_back(((stackNumber + 1) * slices) + (sliceNumber % slices));
}
}
但是它只绘制了球体的一半,但是当我运行导师制作的代码时,它会绘制完整的球体,我应该添加什么以使它成为完整的球体。
目前我没有使用GL深度测试或投影,视图等任何东西。尽量让它尽可能简单,因为我只是一个启动器。想逐步增加所有内容。我在glDrawElements中绘制元素直到index.size()。
另外我想提一下我正在使用TRIANGLE_STRIP
glVertexPointer(3, GL_FLOAT, 0, (char*)NULL + 0);
glEnableClientState(GL_VERTEX_ARRAY);
glDrawElements(GL_TRIANGLE_STRIP, index.size(), GL_UNSIGNED_SHORT, (char*)NULL + 0);