Я хочу нарисовать сферу с помощью VBO для координат вершин, цветов и UV для текстуры. Моя проблема в том, что сфера не «закрыта», есть дыра в начале координат. Я знаю, что это связано с тем, что мой код зависит от (1/сегментов) расстояния между каждой вершиной; Я работаю с сегментами = 40. Я знаю, что если я подниму это значение, отверстие будет ниже, но программа будет медленнее. Я не знаю, есть ли способ устранить дыру без повышения переменной.Неполная сфера OpenGL
Вот код:
for(int i = 0; i <= segments; i++){
double lat0 = pi * (-0.5 + (double)(i - 1)/segments);
double z0 = sin(lat0);
double zr0 = cos(lat0);
// lat1 = [-pi/2..pi/2]
double lat1 = pi * (-0.5 + (double)i/segments);
double z1 = sin(lat1);
double zr1 = cos(lat1);
for (int j = 0; j <= segments; j++){ // Longitud
// lng = [0..2*pi]
double lng = 2 * pi * (double)(j - 1)/segments;
double x = cos(lng);
double y = sin(lng);
//glNormal3f(x * zr0, y * zr0, z0); // Normals
ballVerts.push_back(x * zr0); //X
ballVerts.push_back(y * zr0); //Y
ballVerts.push_back(z0); //Z
ballVerts.push_back(0.0f);
ballVerts.push_back(0.0f);
ballVerts.push_back(0.0f);
ballVerts.push_back(1.0f); //R,G,B,A
texX = abs(1 - (0.5f + atan2(z0, x * zr0)/(2.0 * pi)));
texY = 0.5f - asin(y * zr0)/pi;
ballVerts.push_back(texX); // Texture coords
ballVerts.push_back(texY); // U, V
//glNormal3f(x * zr1, y * zr1, z1); //Normals
ballVerts.push_back(x * zr1); //X
ballVerts.push_back(y * zr1); //Y
ballVerts.push_back(z1); //Z
ballVerts.push_back(0.0f);
ballVerts.push_back(0.0f);
ballVerts.push_back(1.0f);
ballVerts.push_back(1.0f); //R,G,B,A
texX = abs(1 - (0.5f + atan2(z1, x * zr1)/(2.0 * pi)));
texY = 0.5f - asin(y * zr1)/pi;
ballVerts.push_back(texX); // Texture coords
ballVerts.push_back(texY);
}
}
// Create VBO....
И это выход у меня есть:
Большое спасибо! Это было очень легко понять! Теперь я это вижу. – MikeFadeCrew