Assimp загружает вершины, но модель не отображается - PullRequest
0 голосов
/ 19 июня 2019

IDE: xcode

Система: MacOS

Что я пытаюсь сделать

Мой проект [репо] находится в точке, где я успешно выполнил работу skybox [ссылка на учебник] , но я борюсь с загрузкой модели assimp [учебник ссылка] .

проблема

Я не получаю никаких ошибок. Модель просто не загружается в окно, хотя я добавил cout << vertices.data() << endl; [ссылка на строку github] на соответствующей строке в model.h [ссылка на строку github] после того, как он инициализируется в main.cpp [ссылка на строку github] , которая печатает 0x106e6b000, поэтому вершины моделей загружаются.

Тем не менее, окно остается пустым, кроме цвета фона. В уроке [ссылка на видео на YouTube с отметкой времени] , которому я добросовестно следовал, он работает.

Что я пытаюсь получить:

Я пытаюсь визуализировать модель nanosuit.obj, которая, как оказалось, имеет красный цвет. ourModel.Draw( shader ); должна нарисовать ее, но не делает, или она не отображается. По какой-то причине он не отображается, несмотря на отсутствие ошибок, которые не могут быть найдены или вызвали исключения.

Я бы с удовольствием дал MCVE, но код в нем очень сильно взаимосвязан, отсюда и ссылки на github.

Насколько я могу сказать, это должно нарисовать модель, если она не жалуется.

// Draw the loaded model
        glm::mat4 model;
        model = glm::translate( model, glm::vec3( 0.0f, -1.75f, 0.0f ) ); // Translate it down a bit so it's at the center of the scene
        model = glm::scale( model, glm::vec3( 0.2f, 0.2f, 0.2f ) ); // It's a bit too big for our scene, so scale it down
        glUniformMatrix4fv( glGetUniformLocation( shader.Program, "model" ), 1, GL_FALSE, glm::value_ptr( model ) );
        ourModel.Draw( shader );

Материал, который я пробовал:

  • Вращение камеры, чтобы проверить, отображается ли модель за пределами моего поля зрения
  • играет с масштабированием
  • загрузка других .obj с
  • печать переменных, которые передаются, только чтобы увидеть, что действительно загружается модель, просто не отображается

enter image description here

Я пытаюсь не кодировать дамп, отсюда и ссылки на строки. Не стесняйтесь сказать мне, если вы хотите фрагменты кода. Я как бы потерялся здесь из-за того, почему это происходит.

Edit:

@ Ботье предложил мне попробовать следующие вещи:

  1. modelLoading.frag [repo, line link] для применения красного цвета вместо текстур, чтобы минимизировать риск того, что что-то не так с текстурами моделей. Был неэффективен. До сих пор нет модели.
     void main( )
        {
            //color = vec4( texture( texture_diffuse, TexCoords ));
            color = vec4( 1.0f, 0.0f, 0.0f, 1.0f);
        }
  1. In model.h, отредактировано cout << vertices.size() << endl; [репо, ссылка на линию] печатает, что правильно для модели nanosuit.obj из учебника. У меня там была планета, которая не была частью учебника, поэтому 0x106e6b000 из ранее. Я теперь получаю за vertices.size():

    156 15222 19350 78 6804 7248 8316

    Итак, модель определенно загружается, но не рендерится. Проблема должна быть у меня где-то после загрузки модели, но до рендеринга.

1 Ответ

2 голосов
/ 20 июня 2019

Понял. Модель никогда не была инициализирована. Учебное пособие было до 2018 года, когда GLM отказался от автоматической инициализации.

В опубликованном мной фрагменте была ошибка.

Это должно быть:

// Draw the loaded model
glm::mat4 model = glm::mat4(1.0f); 

Вместо:

// Draw the loaded model
glm::mat4 model;

Что случилось?

Моя версия GLM - 0.9.9.3, в то время как учебные пособия, скорее всего, предварительно 0.9.9.0, версия, в которой они изменились.

Отмечено, что многие учебники используют этот код.

Тот , с которым я работал , не тоже не менял .

Вы можете проверить свою версию GLM в xcode, нажав на проект в в браузере файлов, выбрав приложение в списке Tartget, а затем

Настройки сборки> Пути поиска> Пути поиска по заголовкам

Дважды щелкните, чтобы открыть список.

...