Поэтому я собираюсь показать здесь основной код это неправильно, хотя и связано с сутью всего этого. Этот код построен в Linux с использованием glew, glm, webp и использует C++20 для pi.
Суть здесь: https://gist.github.com/ Hydrodog/b8b54b9a26fb0c1af978eda7bfbd32d2
Неверный код кода заключается в создании треугольной полосы для сферы. Я попробовал его распечатать, и он мне кажется хорошим, но явно что-то не так (хотя и чрезвычайно интересно).
Чтобы упростить задачу, я уменьшил количество точек вокруг долготу до 3 (так что это треугольник вокруг экватора) и 5 для широты
z= -0,866025 z=-0,5 z=-2.22045e-16 z=0,5 z=0,866025
@z=-.866
(x,y) = (0,5, 0) (-0,25, 0,433013) (-0,25, -0,433013)
Я пытаюсь построить треугольную полосу вот так:
Код: Выделить всё
0 1 2
3 4 5
Код: Выделить всё
5
3
Код: Выделить всё
3 4 5
6 7 8
Вот код, генерирующий вершины и индексы:
Код: Выделить всё
Sphere::Sphere(double r, uint32_t latRes, uint32_t lonRes) : latRes(latRes), lonRes(lonRes),
resolution((2*latRes-1)*lonRes + 2) {
progid = loadShaders("06b_texturepoints.vert", "06b_textures.frag");
// progid = loadShaders("03gouraud.vert", "03gouraud.frag");
double dlon = 2.0*numbers::pi / lonRes, dlat = numbers::pi / (2*latRes);
double z;
double lat = -numbers::pi/2 + dlat; // latitude in radians
double rcircle;
float vert[resolution*5]; // x,y,z,u,v
uint32_t c = 0;
for (uint32_t j = 0; j < 2*latRes-1; j++, lat += dlat) {
//what is the radius of hte circle at that height?
rcircle = r* cos(lat); // size of the circle at this latitude
z = r * sin(lat); // height of each circle
cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79340880/horribly-deconstructed-sphere-in-opengl-i-cant-find-the-bug[/url]
Мобильная версия