gpt4 book ai didi

c++ - Qt3D:使用 Qt3DRender::QLayerFilter

转载 作者:行者123 更新时间:2023-12-01 14:43:48 24 4
gpt4 key购买 nike

我正在尝试使用图层过滤,如 this answer 所示。 .为此我写了一个简单的测试(见下文)。如果我将代码从 My3DWindow 类传输到 main.cpp - 此代码有效。My3DWindow 类中的错误在哪里?完整的测试项目可以查看here .

main.cpp

int main(int argc, char *argv[])
{
QGuiApplication application(argc, argv);
auto window = new My3DWindow;

auto sphere1 = new Qt3DCore::QEntity(window->Scene());
auto sphere2 = new Qt3DCore::QEntity(window->Scene());

auto transform1 = new Qt3DCore::QTransform;
transform1->setTranslation(QVector3D(0.0f, 0.0f, -10.0f));

auto transform2 = new Qt3DCore::QTransform;
transform2->setTranslation(QVector3D(-10.0f, 0.0f, 0.0f));

auto material1 = new Qt3DExtras::QPhongMaterial;
material1->setAmbient(Qt::blue);

auto material2 = new Qt3DExtras::QPhongAlphaMaterial;
material2->setAmbient(Qt::red);

auto spheremesh = new Qt3DExtras::QSphereMesh;
spheremesh->setRadius(15.0);
spheremesh->setSlices(32);
spheremesh->setRings(32);

sphere1->addComponent(transform1);
sphere1->addComponent(material1);
sphere1->addComponent(spheremesh);
sphere1->addComponent(window->OpaqueLayer());

sphere2->addComponent(transform2);
sphere2->addComponent(material2);
sphere2->addComponent(spheremesh);
sphere2->addComponent(window->TransparentLayer());

window->show();
return application.exec();
}

My3DWindow 类:

My3DWindow::My3DWindow(QScreen *screen):
Qt3DExtras::Qt3DWindow(screen)
{
m_Scene = new Qt3DCore::QEntity;
setRootEntity(m_Scene);

auto renderSurfaceSelector = new Qt3DRender::QRenderSurfaceSelector(m_Scene);
renderSurfaceSelector->setSurface(this);
auto clearBuffers = new Qt3DRender::QClearBuffers(renderSurfaceSelector);
clearBuffers->setBuffers(Qt3DRender::QClearBuffers::AllBuffers);
clearBuffers->setClearColor(Qt::gray);

auto viewport = new Qt3DRender::QViewport(renderSurfaceSelector);
auto cameraSelector = new Qt3DRender::QCameraSelector(viewport);
m_Camera = new Qt3DRender::QCamera(cameraSelector);
m_Camera->lens()->setPerspectiveProjection(45.0f, 16.0f/9.0f, 0.1f, 1000.0f);
m_Camera->setPosition(QVector3D(0.0f, 0.0f, 100.0f));
m_Camera->setViewCenter(QVector3D(0.0f, 0.0f, 0.0f));

auto cameraController = new Qt3DExtras::QFirstPersonCameraController(m_Scene);
cameraController->setCamera(m_Camera);

m_TransparentLayer = new Qt3DRender::QLayer;
auto transparentFilter = new Qt3DRender::QLayerFilter(m_Camera);
transparentFilter->addLayer(m_TransparentLayer);

m_OpaqueLayer = new Qt3DRender::QLayer;
auto opaqueFilter = new Qt3DRender::QLayerFilter(m_Camera);
opaqueFilter->addLayer(m_OpaqueLayer);

setActiveFrameGraph(renderSurfaceSelector);
}

最佳答案

关于主要问题的正确代码如下。其余问题描述here .

My3DWindow 类:

My3DWindow::My3DWindow(QScreen *screen):
Qt3DExtras::Qt3DWindow(screen)
{
m_Scene = new Qt3DCore::QEntity;
setRootEntity(m_Scene);

auto renderSurfaceSelector = new Qt3DRender::QRenderSurfaceSelector(m_Scene);
renderSurfaceSelector->setSurface(this);
auto clearBuffers = new Qt3DRender::QClearBuffers(renderSurfaceSelector);
clearBuffers->setBuffers(Qt3DRender::QClearBuffers::AllBuffers);
clearBuffers->setClearColor(Qt::gray);

auto viewport = new Qt3DRender::QViewport(renderSurfaceSelector);
auto cameraSelector = new Qt3DRender::QCameraSelector(viewport);

m_Camera = new Qt3DRender::QCamera(cameraSelector);
m_Camera->lens()->setPerspectiveProjection(45.0f, 16.0f/9.0f, 0.1f, 1000.0f);
m_Camera->setPosition(QVector3D(0.0f, 0.0f, 100.0f));
m_Camera->setViewCenter(QVector3D(0.0f, 0.0f, 0.0f));

cameraSelector->setCamera(m_Camera);

auto cameraController = new Qt3DExtras::QFirstPersonCameraController(m_Scene);
cameraController->setCamera(m_Camera);

// именно в таком порядке: m_OpaqueLayer, m_TransparentLayer
m_OpaqueLayer = new Qt3DRender::QLayer;
auto opaqueFilter = new Qt3DRender::QLayerFilter(m_Camera);
opaqueFilter->addLayer(m_OpaqueLayer);

m_TransparentLayer = new Qt3DRender::QLayer;
auto transparentFilter = new Qt3DRender::QLayerFilter(m_Camera);
transparentFilter->addLayer(m_TransparentLayer);

setActiveFrameGraph(renderSurfaceSelector);
}

主要.cpp:

My3DWindow window;

代替

auto window = new My3DWindow;

关于c++ - Qt3D:使用 Qt3DRender::QLayerFilter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59437118/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com