Помощь с рендером необычной сферы.
Есть код сферы, мне нужно на каждой вершине у всех полигонов отрисовать кружок. Нарисовать я сам смогу, но не пойму как указать координаты. Если это возможно с этим кодом, то помогите, пожалуйста. :D
Вот сам класс:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
class Sphere {
protected:
std::vector<float> vertices;
std::vector<float> normals;
std::vector<float> texcoords;
std::vector<USHORT> indices;
public:
Sphere(float radius, unsigned int rings, unsigned int sectors) {
float const R = 1. / (float)(rings - 1);
float const S = 1. / (float)(sectors - 1);
int r, s;
vertices.resize(rings * sectors * 3);
normals.resize(rings * sectors * 3);
texcoords.resize(rings * sectors * 2);
std::vector<GLfloat>::iterator v = vertices.begin();
std::vector<GLfloat>::iterator n = normals.begin();
std::vector<GLfloat>::iterator t = texcoords.begin();
for (r = 0; r < rings; r++) for (s = 0; s < sectors; s++) {
float const y = sin(-(M_PI / 2) + M_PI * r * R);
float const x = cos(2 * M_PI * s * S) * sin(M_PI * r * R);
float const z = sin(2 * M_PI * s * S) * sin(M_PI * r * R);
*t++ = s * S;
*t++ = r * R;
*v++ = x * radius;
*v++ = y * radius;
*v++ = z * radius;
*n++ = -x;
*n++ = -y;
*n++ = -z;
}
indices.resize(rings * sectors * 4);
std::vector<GLushort>::iterator i = indices.begin();
for (r = 0; r < rings - 1; r++) {
for (s = 0; s < sectors - 1; s++) {
*i++ = (r + 1) * sectors + s;
*i++ = (r + 1) * sectors + (s + 1);
*i++ = r * sectors + (s + 1);
*i++ = r * sectors + s;
}
}
}
void drawSphere(float x, float y, float z) {
}
};
По дате
По Рейтингу