Параметр текстуры Qt3D - PullRequest
       4

Параметр текстуры Qt3D

0 голосов
/ 31 января 2019

Я использую Qt3D (5.11), и у меня возникают утверждения, когда я пытаюсь установить значение QParameter, которое будет использоваться пользовательским фрагментным шейдером.Вот фрагмент кода, который, кажется, не работает:

auto entity = new Qt3DRender::QEntity( mRootEntity );
auto material = new Qt3DRender::QMaterial( entity );

// Set up the custom geometry and material for the entity, which works
// fine in tests as long as the fragment shader does not use texture mapping

auto image = new Qt3DRender::QTextureImage( entity );
image->setSource( QString( "qrc:/image.png" ) );

auto texture = new Qt3DRender::QTexture2D( entity );
texture->addTextureImage( image );

material->addParameter( new QParameter( "imageTexture", texture, entity ) );

Я включил только биты кода, необходимые для этого вопроса:

Это правильный способустановить простой параметр текстуры?Если нет, то чего мне не хватает, чтобы установить простое изображение?

Обратите внимание, что qrc:/image.png - это изображение 256x256, которое я без проблем использовал в другом месте этого проекта.

Код компилируется нормально, но когда я запускаю его, я получаю утверждение со следующим сообщением: ASSERT: "texture" in file texture\textureimage.cpp, line 94

Я использую VS2017 в Windows 10 с Qt 5.11.

1 Ответ

0 голосов
/ 01 февраля 2019

Я наткнулся на проблему.Воспитание от QTextureImage до entity приводит к утверждению.Полное отключение родительского элемента (фактически установив его на nullptr) или родительское значение на texture устраняет проблему.

Вот некоторый рабочий код:

auto texture = new Qt3DRender::QTexture2D( entity );
auto image = new Qt3DRender::QTextureImage( texture );
image->setSource( QString( "qrc:/image.png" ) );
texture->addTextureImage( image );

material->addParameter( new QParameter( "imageTexture", texture, entity ) );

Это, вероятно,ошибка?Если кто-то знает, почему QTextureImage нельзя безопасно связать с entity, добавьте комментарий.

...