Форум программистов, компьютерный форум, киберфорум
OpenGL
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
129 / 17 / 5
Регистрация: 23.03.2020
Сообщений: 103
1

Странная работа функции перемещения модели

28.06.2021, 21:43. Показов 449. Ответов 1

Author24 — интернет-сервис помощи студентам
Делаю собственную 3д графику на opengl. Решил сделать функцию перемещения моделей. Модель в коде представляет из себя два числа, с какого по какой полигоны принадлежат ей. Когда двигаю или перемещаю модель функциями, которые я сделал, она конечно перемещается, но при этом искажается, что точно не приемлемо. Возможно проблема в том, что я рисую полигоны с помощью VBO, больше у меня догадок нет, нигде ничего не округляется и вроде как нет причин такого странного поведения. Помогите пожалуйста с проблемой, вод код
Main
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int main()
{
    WindowInit();
    Background bg("bg.png");
    Object Mash = LoadModel("mash.obj", Point(-1, 0, 2), Point(2, 2, 2));
    Object Star = LoadModel("star.obj", Point(), Point(1, 1.3f, 1));
    Init(); Clock clock;
    float alltime = 0; int vall = 10;
    Star.Transfer(Star.GetCentre().x, Star.GetCentre().y, Star.GetCentre().z - 2f);
    while (work)
    {
        TimesGone = clock.getElapsedTime().asMilliseconds();
        clock.restart(); FPS = int(1000 / TimesGone); Control();// + abs(int(alltime) % (vall * 2)) - vall
        Event event; while (window.pollEvent(event)) { if (event.type == Event::Closed) window.close(); }
        //cout << Star.GetCentre().z << " " << alltime << endl;
        alltime += TimesGone * 0.00001;
        window.clear();
        //bg.Update();
        DrawAll();
        window.display();
    }
    UnInit();
    return 0;
}
Функция перемещения (да, мне было лень делать это по-другому)
C++
1
2
3
4
void Transfer(float x, float y, float z)
    {
        Move(x - Centre.x, y - Centre.y, z - Centre.z);
    }
Функция движения объекта
C++
1
2
3
4
5
void Move(float x, float y, float z)
    {
        for (int i = FirstPGnum; i < LastPGnum; i++) for (int u = 0; u < 3; u++) AllV[AllPG[i].GetPointNumb(u)].Move(x, y, z);
        Centre.Move(x, y, z);
    }
Функция движения вершины
C++
1
2
3
4
5
6
7
8
void Move(float X, float Y = 0, float Z = 0)
      {
          pos.Move(X, Y, Z);
          float newcord[3] = {pos.x, pos.y, pos.z};
          glBindBuffer(GL_ARRAY_BUFFER, vertexVBO);
          glBufferSubData(GL_ARRAY_BUFFER, sizeof(float) * 3 * mynum, sizeof(newcord), newcord);
          glBindBuffer(GL_ARRAY_BUFFER, 0);
      }
И вот ещё фотографии, слева модель, которую я никак не трогал, а справа та, которую я попытался передвинуть. Чем дальше перемещаю, тем сильнее деформация.
Миниатюры
Странная работа функции перемещения модели   Странная работа функции перемещения модели   Странная работа функции перемещения модели  

0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.06.2021, 21:43
Ответы с готовыми решениями:

Странная работа функции СЧЁТЕСЛИ
Привет всем! Столкнулся со странной работой функции СЧЁТЕСЛИ: В ячейках табеля занесены значения:...

Странная работа функции Строки Найти()
Понадобилось распарсерить табличку из странички, выделил таблицу, стал выделять строки и функция...

Странная работа функции Serial.parseInt()
Здравствуйте! При введенном правильном пароле строка &quot;activate == LOW;&quot; будто игнорируется и не...

Разработка модели перемещения окна
Доброго времени суток!:) Нужно разработать модель перемещения окна. И нужна ваша помощь в этом...

1
129 / 17 / 5
Регистрация: 23.03.2020
Сообщений: 103
29.06.2021, 11:55  [ТС] 2
Уже не важно, у меня были полигоны, использующие одну и ту же вершину, и из-за немного кривого алгоритма я некоторые вершины перемещал несколько раз.
0
29.06.2021, 11:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.06.2021, 11:55
Помогаю со студенческими работами здесь

Ошибка перемещения агентов в иерархической модели
Доброго времени суток! Есть иерархическая модель, в которой есть два типа агентов города и люди,...

Работа перемещения заряда.
по проводу 10 ом в течении минуты прошел заряд 60 кулонов правильно ли я посчитал что работа при...

Странная работа ПК
Всем привет. Вчера все было нормально, сегодня начал заходить в игру - начал замечать что при...

Странная работа Wi-Fi
Вчера начал пропадать интернет т.е. есть, рраз на пол минуты - минуту отключается и снова есть,...

Странная работа БД
Спасибо всем тем, кто решил откликнуться. Сначала лирика: Имеется проект &quot;Калькулятор&quot;, созданы...

Странная работа vk.com
Недавно я проапгрейдил комп, поставил новую мать, ссд и проц, и сверху на ссдшник накатил новую...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru