Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
QT3D³¡¾°µÄ¿ìËÙ»æÖÆ
 
  10822  次浏览      27
 2019-4-2
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚcsdn£¬½«»ùÓÚQT3Dµ±ÖеÄÀý³ÌBASIC 3Dµ±ÖеĴúÂëÒ»²½²½µÄͨ¹ý½²½â²¢ÐÞ¸ÄÆä´úÂë¿ÉÒÔÕæÕýʵÏÖÒ»¸ö»ùÓÚQTµÄ»­²¼¡£

QT3D³¡¾°ÌṩÁËÒ»ÖÖ¿ìËÙÉèÖÃ3D³¡¾°µÄÒ»ÖÖ·½Ê½£¬Óû§Æ¾½è×Å·â×°ºÃµÄʵÌå¿ÉÒÔ¿ìËÙµÄÔÚ¶¥²ãʵÌ壨»­²¼£©µ±ÖÐÔö¼Ó¸÷ÖÖ¸÷ÑùµÄʵÌ壬²¢ÇÒͨ¹ý3DMaxÈí¼þ¹¹ÔìµÄOBJÎļþÓëQT3DʵÏÖÐÅÏ¢½»»¥¿ÉÒԵİïÖúÓû§°ÚÍÑOpenGLµÄÓôúÂë»æÖÆÍ¼Ðεķ±Ëö¡£±¾ÈËÔÚ×öÕâ·½ÃæµÄ¹¤×÷ʱҲ¿´Á˺ܶàÀ´×ÔCSDNµÄÎÄÕ£¬µ«ÊÇÖ±½Ó½«·â×°ºÃµÄ3DʵÌå·ÅÈë»­²¼µÄÀý×ÓÓеãÉÙ£¨ÊDz»ÊÇ´ó¼Ò¾õµÃÌ«¼òµ¥ÁË£¿£©£¬ËùÒÔ×÷Ϊһ¸öQT 3D½¨Ä£µÄС°×£¬ÎÒÒ²¼òÒªµÄ̸һ̸Õâ·½ÃæµÄÈÏʶ¡£

ÔÚÕâÀÎÒÃǽ«ÊµÏֵĴúÂëÓÐ×ÅÈçϵÄÐÔÖÊ£º

»ùÓÚÔ­³ÌÐòµÄ¼Ü¹¹½«QT3DµÄ×¢²áÒÔ¼°ÉãÏñ»ú°Ú·Å¶¼·ÅÔÚÁËmainº¯Êýµ±ÖУ¬Ô­³ÌÐòµÄ´úÂë¿ÉÒÆÖ²ÐԽϲËùÒÔÎÒÃǽ«Óë»­²¼ÕûÌåÏÔʾÎ޹صÄÄÚÈݶ¼¼ÓÈëµ½»­²¼ËùÔÚµÄÀຯÊýµ±ÖС£

ÓÉÓÚÔ­ÓдúÂëÊÇÓÃÁËQTµÄ»ù±¾ÊµÌ壬ÕâÖÖʵÌå²»Äܱ»Óû§×ÔÐж¨Ò壬ֻÄÜ´ÓÑÕÉ«£¬°Ú·Å×ø±ê£¨setTranslation)µÈһЩÓÐÏÞµÄÉèÖ÷½Ê½È¥ÉèÖÃʵÌå¡£ËùÒÔÎÒÃǵÄÄ¿±êÊÇÖð½¥ÓÃ×Ô¼ºµÄʵÌåÈ¥Ìæ»»Ô­ÓгÌÐòµÄ»ù±¾ÊµÌ壬´ïµ½3D½¨Ä£µÄ³õ²½Ä¿µÄ¡£

ÕâÀïÊ×ÏÈÒª¶ÔQT 3Dµ±ÖÐÀý×Ó´úÂë½øÐзÖÎö£¬ÎÒÓõ½µÄÊÇQT5.6.0°æ±¾£¬ÓÃQT5ÒÔÉϰ汾µÄͯЬ¿ÉÒÔÍêÈ«²Î¿¼±¾Íèµ±ÖжԴúÂëµÄ·ÖÎö£¬ÓÉÓÚQT5ºÍQT4Í·Îļþ²î±ð»¹ÊÇÂù´óµÄ£¬ËùÒÔÓÃQT4µÄ¿ÉÒÔ´óÖÂÁ˽âÒ»ÏÂ˼Ïë¡££¨QT4µ±ÖÐÓÐЩÀàÔÚQT5µ±ÖÐÊÇ·ÏÆúµÄ£¬¶øQT5ÔÚ±ãÒ˵±Öв¢²»»á¸æËßÄãȱÉÙµÄÍ·Îļþ£¬Õâµã·Ç³£µ°ÌÛ£©

Ê×ÏÈ´ò¿ªQT£¬½øÈëµ½³ÌÐò³õʼ½çÃæ¡£

ÔÚËÑË÷½çÃæÊäÈë¡°3D¡±£¬µÃµ½µÄÈçÏÂͼËùʾ¡£

Ñ¡ÔñÓÒϽǵġ°QT 3D Basic Shapes C++ Example¡±¹¤³Ì£¬µÃµ½»¶Ó­½çÃæ£¬´ËʱÔÙ´ÎÑ¡ÔñÕâ¸ö¹¤³Ì¾Í¿ÉÒԵõ½¹¤³ÌµÄÔ´´úÂëÈçÏÂËùʾ¡£

QT¾ßÓзdz£ºÃµÄÏÖ´ú±àÒëÆ÷Ëù¾ßÓеĴúÂëʵʱ²é´í¹¦ÄÜ£¬Ò»Ð©±È½Ï»ù±¾µÄÓï·¨´íÎó»áÔÚÄãдÈë´úÂëµÄʱºòʵʱÏÔʾ³öÀ´£¬ËùÒÔÒ»µ©¿´µ½ÄãµÄ´úÂëÏÂÃæÓÐ×ÅÒ»ÌõÏߣ¨¿ÉÄÜÊǺìÉ«µÄÒ²¿ÉÄÜÊdzÈÉ«µÄ£©ÄÇô¾Í»á±íÃ÷Õâ¾ä»°Ò»¶¨ÊÇÓÐÎÊÌâµÄ£¬¶øÇÒÊǽÏΪ»ù±¾µÄÎÊÌâ¡£

ÏÂÃæ¿ªÊ¼¶ÔÕâ¸ö»ù±¾µÄ3D³ÌÐò½øÐÐһЩ·ÖÎö£¬ÔÚ·ÖÎö֮ǰÓбØÒª½«Õâ¸ö³ÌÐòµÄ¹¦ÄÜÑÝʾÒÔÏÂʹµÃ¸÷λ¶ÔÕâ¸ö³ÌÐòµÄ´óÌåÂöÂçÓÐÒ»¸ö»ù±¾µÄÈÏʶ£¬µã»÷×óϽǵÄÔËÐУ¨ÂÌÉ«Èý½Ç£©°´Å¥¾Í¿ÉÒÔÏÔʾ³öÀ´±¾³ÌÐò»ù±¾µÄ3D½¨Ä£Í¼ÐÎÈçÏÂËùʾ¡£

ÔÚÕâ¸ö³ÌÐòµ±ÖÐÓÐËĸö²»Í¬ÐÎ×´µÄQT»ù±¾ÊµÌ壬ÔÚÓÒ±ßÓÐ×ÅÓëÖ®Ïà¹ØÁªµÄËĸöcheckbox£¬Ã¿¸öCheckBoxĬÈ϶¼ÊÇÑ¡Öеģ¬Ò»µ©È¡ÏûÑ¡ÖÐÁËij¸öcheckboxÄÇôÓëÖ®Ïà¶ÔÓ¦µÄʵÌå¾Í»áÏûʧ¡£ÏÂÃæ´Ó´úÂë²ãÃæ´óÌåÉϽ²Ò»½²¹¦ÄÜÊÇÈçºÎʵÏֵġ£

Ê×ÏȾÍÊÇÈÝÆ÷µÄ·ÅÖã¬ÔÚ±¾³ÌÐòµ±ÖÐÈç¹û²»ÏòQWidgetµ±ÖзÅÖÃÈÝÆ÷µÄ»°ÄÇôÈýάͼÐξÍÏÔʾ²»³ö£¬Òò´ËÊ×ÏȾÍÊǴ¿ÉÒÔÏÔʾʵÌåµÄ´óÌå»·¾³£¬´úÂëÈçÏÂ

Window *view = new Window();//window class
QWidget *container = QWidget::createWindowContainer(view);
QSize screenSize = view->screen()->size();
container->setMinimumSize(QSize(100, 100));
container->setMaximumSize(screenSize);

Õ⼸ÐдúÂëÃèÊöµÄ¹¦ÄܾÍÊÇ´´½¨Ò»¸öÈÝÆ÷ºÍÒ»¸ö´°¿ÚÀ࣬Ȼºóͨ¹ýsetMinimumSizeºÍsetMaximumSizeÉ趨ÈÝÆ÷µÄ´óС£¬Íê³ÉÁ˶ÔÈÝÆ÷µÄ³õʼ»¯¡£

´´½¨ÁËÈÝÆ÷Ö®ºó¾ÍÒª¿ªÊ¼¶ÔÕûÌå´°¿Ú²¼¾Ö½øÐÐÉè¼Æ£¬ÔÚQTµ±ÖпÉÒÔÓÃˮƽ²¼¾ÖQHBoxLayoutºÍ´¹Ö±²¼¾ÖQVBoxLayout·Ö±ð¶Ô´°¿Ú²¼¾Ö½øÐÐÉè¼Æ£¬¶øºó½öÐ轫²»Í¬µÄ´°¿ÚÒÔ¼°ÊµÌå¼ÓÈëÕâЩ²¼¾Öµ±ÖоͿÉÒÔÍê³ÉÉè¼Æ¡£×ۺϱ¾Àý×ÓÀ´¿´£¬Ë®Æ½²¼¾ÖÒÔ¼°´¹Ö±²¼¾Ö¶¼ÊÇÎÒÃÇËùÐèÒªµÄ£¬ÒòΪ×ó±ßÓÐÒ»Õû¸ö´°¿ÚÈ¥ÏÔʾÕûÌåµÄ»·¾³£¬ÓÒ±ßÓÐ4¸öcheckbox´ý°Ú·Å£¬ÄÇôÔÚÕâÁ½ÀàʵÌåÖ®¼äµÄ¿Õ¼äÉϵÄÁ´½Ó¾ÍÊÇÓÃQHBoxLayoutȥʵÏÖÏàÁ¬£¬¶øÓÉÓÚÓұߵÄÐÅÏ¢ÒÔ¼°checkbox°Ú·Å¹ØÏµÊÇ´¹Ö±µÄ£¬ËùÒÔÒªÓõ½´¹Ö±²¼¾Ö£¬´úÂëÈçÏÂËùʾ¡£

QWidget *widget = new QWidget;
QHBoxLayout *hLayout = new QHBoxLayout(widget);//ÔÚwidgetÖмÓÈëˮƽµÄlayout
QVBoxLayout *vLayout = new QVBoxLayout();//²»ÓòÎÊý£¬ÒòΪ´¹Ö±layout×÷Ϊ×é¼þ¼ÓÈ뵽ˮƽlayoutµ±ÖУ¬Ò²¾Í¼ÓÈëµ½ÁËwidgetÖÐ
vLayout->setAlignment(Qt::AlignTop);//ÔÚ¶¥¶Ë¶ÔÆë
hLayout->addWidget(container, 1);//¼ÓÈëÈÝÆ÷
hLayout->addLayout(vLayout);

¿ÉÒÔ¿´µ½£¬ÔÚÕâ¶Î´úÂëµ±ÖÐÊ×ÏÈ´´½¨ÁËÒ»¸öQWidgetÀàÐ͵ÄʵÌ壬Ȼºó·Ö±ð´´½¨ÁËˮƽÒÔ¼°´¹Ö±²¼¾Ö£¨hLayout£¬vLayout£©£¬ÆäÖÐˮƽ²¼¾Ö¼ÓÈëÁËÈÝÆ÷£¬¶ø´¹Ö±²¼¾ÖÉ趨¶¥¶Ë¶ÔÆë£¬×îºóÓÃaddLayoutº¯ÊýʵÏÖÁ˽«´¹Ö±²¼¾ÖÌí¼Óµ½Ë®Æ½²¼¾ÖµÄ¹¦ÄÜ¡£

ÔÚÏÔʾ3DͼÐεĹý³Ìµ±ÖУ¬ÉãÏñ»úÊDZز»¿ÉÉٵģ¬Ö»ÓÐÉãÏñ»ú°Ú·ÅµÄºÏÊÊÈËÑÛ²ÅÄÜ¿´µ½3D½¨Ä£µÄÑù×Ó¡£ÔÚQtµ±ÖÐÈýάͼÐν«ÊµÌåÌí¼Óµ½ÊÀ½ç×ø±êµ±ÖÐÈ»ºóͨ¹ýͶӰµÄ·½Ê½È¥Í¶Éäµ½ÉãÏñ»úλÖã¨Ò²¾ÍÏ൱ÓÚÈËÑÛ£©£¬ÆäÖÐͶӰµ½¾µÍ·ÈçÏÂÃæµÄº¯ÊýËùʾ¡£

cameraEntity->lens()->setPerspectiveProjection(45.0f, 16.0f/9.0f, 0.1f, 1000.0f);

ÆäÖÐcameraEntityÊÇн¨µÄcameraʵÌ壬lens±íʾÁ˾µÍ·£¬Õâ¸öº¯ÊýÓÐ×ÅËĸö²ÎÊý£¬µÚÒ»¸ö²ÎÊýÊÇÊÓ¾õÓò£¬µÚ¶þ¸öÊÇ·Ö±æÂÊ£¨ÕâÀïÑ¡ÔñÁË16±È9£©£¬µÚÈý¸ö²ÎÊýÊǽüÆ½Ãæ°Ú·ÅλÖã¬×îºóÒ»¸öÊÇÔ¶Æ½Ãæ·ÅÖÃλÖ㬺óÁ½¸ö²ÎÊýµÄÑ¡Ôñµ±ÖÐÒªÌØ±ð×¢Ò⣬ֻÓÐÔÚÔ¶½üÆ½ÃæÖ®¼äµÄÎïÌå²Å»áÏÔʾ,ËùÒÔÒªÊÇÏëÈ«²¿ÏÔʾ³öËù¼ÓÈëµÄʵÌ壬ÄÇô½üÆ½Ãæ¾ÍÒª×ã¹»½ü£¬Ô¶Æ½Ãæ¾ÍÒª×ã¹»Ô¶¡£

¶øºó¶ÔÓÚÉãÏñ»úµÄ²ÎÊýÅäÖþÍÊÇҪȷ¶¨ÉãÏñ»ú°Ú·ÅµÄλÖã¬È·¶¨ÏòÉϵĵ¥Î»ÏòÁ¿ºÍÈ·¶¨¹Û²ìµÄÖÐÐÄ£¬×îºóÔÚQtInputAspectµ±ÖеÄʵÌåÖмÓÈëÉãÏñ»ú¾ÍËãÊÇÍê³ÉÅäÖÃÁË£¬¾ßÌå´úÂëÈçÏÂËùʾ¡£

Qt3DCore::QEntity *rootEntity = new Qt3DCore::QEntity();//´´½¨¶¥²ãʵÌårootEntity

Qt3DInput::QInputAspect *input = new Qt3DInput::QInputAspect;
engine.registerAspect(input);
Qt3DCore::QCamera *cameraEntity = new Qt3DCore::QCamera(rootEntity);//ÔÚд´½¨µÄrootEntityÀïÃæÌí¼ÓÉãÏñ»ú
cameraEntity->setObjectName(QStringLiteral("cameraEntity"));

cameraEntity->lens()->setPerspectiveProjection(45.0f, 16.0f/9.0f, 0.1f, 1000.0f);
cameraEntity->setPosition(QVector3D(0, 0, -20.0f));//É趨ÉãÏñ»ú³õʼλÖÃ
cameraEntity->setUpVector(QVector3D(0, 1, 0));
cameraEntity->setViewCenter(QVector3D(0, 0, 0));//É趨һ½øÈëµÄÖÐÐĵã
input->setCamera(cameraEntity);//ʹÉãÏñ»úÄÜ×óÓÒת¶¯

µ«Êǵ¥´¿ÕâôÉ趨ÕÕÏà»úÊDz»¹»µÄ£¬ÒòΪÕÕÏà»úËùÄܳÊÏÖ³öÀ´µÄ»­ÃæÊÇÒªÔÚǰ¶ËÏÔʾµÄ£¬Òò´ËÐèÒª¶Ôǰ¶ËÓÐÒ»¶¨µÄ½»»¥£¬¶ø±³¾°ÑÕɫҲÊÇÔÚǰ¶Ëµ±ÖÐÉèÖõģ¬ÅäÖÃǰ¶ËÊ×ÏÈÒª´´½¨Ç°¶ËʵÌå

Qt3DRender::QFrameGraph *frameGraph = new Qt3DRender::QFrameGraph();
Qt3DRender::QForwardRenderer *forwardRenderer = new Qt3DRender::QForwardRenderer();

È»ºóÐèÒª¼ÜÉèÉãÏñ»ú£¬É趨±³¾°ÑÕÉ«×îºó¼¤»îǰ¶Ë¡£

forwardRenderer->setCamera(cameraEntity);//¼ÜÉèÉãÏñ»ú
forwardRenderer->setClearColor(QColor(QRgb(0xff4d4f)));//ÉèÖÃǰ¶Ë±³¾°ÑÕÉ«
frameGraph->setActiveFrameGraph(forwardRenderer);//¼¤»îframeGraph

È»ºóÁîÉ趨ºÃµÄǰ¶Ë¼ÓÈëµ½¶¥²ãʵÌårootEntityµ±ÖС£

rootEntity->addComponent(frameGraph);

°ÑÕâЩÏÔʾµÄ»ù±¾²¿¼þ¹¹½¨Íê³ÉÖ®ºó¾Í¡°Íòʾ㱸ֻǷ¶«·ç¡±ÁË£¬ÏÂÃæ¾ÍÊÇ·ÅÖÃ3DʵÌ幤×÷ÁË£¬ÔÚÕâÀïÓÐÈçϵļ¸ÖÖ·½·¨¿ÉÒÔÑ¡Ôñ£¬Ê×ÏȾÍÊÇÓÃOpenGL»­³öʵÌ壬Ȼºó¾ÍÊÇÓÃQt×Ô´øµÄ»ù±¾ÊµÌ壬×îºó¾ÍÊÇÓÃÀýÈç3DMaxµ¼³öµÄOBJÎļþʵÏÖÓëQTÖ®¼äµÄÐÅÏ¢½»»¥¡£OpenGL»­³öʵÌåÊʺÏOpenGLµÄÀÏÊÖ£¬²»ÊÊÓÚÐÂÊÖÈ¥»­Í¼£¬¶ø3DMaxÓÉÓÚ×ÔÉí½ÏΪÉÏÊÖ£¬Èç½ñÒѾ­³ÉΪԽÀ´Ô½¶àÈ˵ÄÊ×Ñ¡£¬Qt×Ô´ø»ù±¾ÊµÌåËäÈ»½ÏΪÈÝÒ×¹¹Ô쵫ÊǹýÓÚ¼òµ¥£¬Ö»ÊʺÏѧϰȡÓ㬱¾³ÌÐòµ±ÖвÉÓõľÍÊÇQt»ù±¾ÊµÌåÈ¥´´½¨¡£

ÔÙQtÖÐÈκÎʵÌå¼ÓÈëµ½ÈýάģÐÍÖÐ×îΪ¼òµ¥µÄÅäÖ÷½·¨·ÖΪÒÔϼ¸²½£¬Ê×ÏÈÔÙ¸ùʵÌåÖд´½¨ÊµÌ壬ȻºóÅäÖÃäÖȾ¡¢ÑÕÉ«µÈÓÚʵÌåÏà¹ØµÄÔªËØ£¬×îºóÅäÖÃʵÌåËõ·Å´óСÒÔ¼°ÊµÌåÔÙÈýάģÐÍÖеÄλÖá£ÏÂÃæ¾Íµ¥Äóö±¾´úÂëÆäÖÐÒ»¸öʵÌåµÄÉèÖýøÐзÖÎö¡£

// Cuboid shape data
Qt3DRender::QCuboidMesh *cuboid = new Qt3DRender::QCuboidMesh();

// CuboidMesh Transform
Qt3DCore::QTransform *cuboidTransform = new Qt3DCore::QTransform();
cuboidTransform->setScale(4.0f);
cuboidTransform->setTranslation(QVector3D(4.0f, -4.0f, 0.0f));

Qt3DRender::QPhongMaterial *cuboidMaterial = new Qt3DRender::QPhongMaterial();
cuboidMaterial->setDiffuse(QColor(QRgb(0x665423)));

//Cuboid
m_cuboidEntity = new Qt3DCore::QEntity(m_rootEntity);
m_cuboidEntity->addComponent(cuboid);
m_cuboidEntity->addComponent(cuboidMaterial);
m_cuboidEntity->addComponent(cuboidTransform);

Õâ¹Ø´úÂë¹¹½¨µÄÊÇÁ¢·½ÌåʵÌ壨¾ÍÊÇ×óϽÇʵÌ壩£¬ÔÚÕâ¸öʵÌåµ±Öд´½¨ÁËÈý¸ö×ÓʵÌ壬·Ö±ðÊÇmesh¡¢transformÒÔ¼°material£¬·Ö±ðÊÇäÖȾ¡¢Î»ÖÃÒÔ¼°ÑÕÉ«£¬ÔÚ×îºó´úÂ뽫Èý¸ö×ÓʵÌå¼ÓÈëµ½Á¢·½ÌåʵÌåµ±ÖУ¬²¢½«Á¢·½ÌåʵÌå¼ÓÈëµ½¸ùʵÌåÖÐÍê³ÉÁËÁ¢·½ÌåµÄÅäÖã¬ÆäËûʵÌåµÄ¼ÓÈëÒ²½«Èç·¨ÅÚÖÆ£¬ÕâÀï±ã²»ÔÙ׸Êö¡£

ÓÉÓÚQt²ÉÓõÄÊÇC++Ϊ±³¾°È¥±àдÏà¹Ø´úÂ룬ËùÒÔ¶ÔÓÚC++µÄÁ˽⽫»áʹµÃ´úÂëµÄ±àд¸ü¼ÓÓÐЧÂÊ£¬C++ÊÇÃæÏò¶ÔÏó±à³ÌµÄÓïÑÔ£¬ÃæÏò¶ÔÏó½²¾¿µÄÊÇÀàÓë·â×°£¬Ã¿¸öÀàÔÚ±»¹¹Ô캯Êý´´½¨µÄʱºò¶¼»áÈ¥µ÷Óù¹Ô캯ÊýµÄ´úÂ룬´Ó¶ø´ïµ½¶ÔʵÌå½øÐе÷ÓõÄÄ¿µÄ¡£ÔÚC++µÄÀàÔªËØµ±ÖУ¨Í¨³£ÔÚÍ·ÎļþÖв鿴£©ÓÐ×ÅÕâ¸öÀàËùÐèÒªµÄº¯ÊýÒÔ¼°¸÷ÖÖ±»´ËÀà°üº¬µÄʵÌ壬ÔÚC++ÖУ¬ÓÐpublicÀàÐÍÔªËØ£¬protectedÀàÐÍÔªËØÒÔ¼°privateÀàÐÍÔªËØ£¬Ïà¹Ø×÷ÓÃÓÚ²»ÔÙÏêÊö£¬¿ÉÒÔ×ÔÐв鿴C++רÃÅÊé¼®£¬¶øÖصãÌáÒ»ÏÂprotectedÀàÐÍÔªËØ£¬ÔÚQtµ±ÖÐÕâ¸öÀàÐÍÖ®ÏÂÒ»°ã¶¼»áÊÇÖØÐ´Êó±ê¡¢¼üÅÌÒÔ¼°¹öÂÖʼþµÄº¯Êý£¬ÕâÒ»µãҪעÒâ¡£ÔÚQtµ±ÖÐΪÁ˱ãÓÚÐźÅÓë²ÛÖ®¼äµÄÁ¬½Ó»¹ÔöÌíÁËÁ½¸öÀàÐÍ£¬Ò»¸öÊÇsignalÀàÐÍ£¬ÁíÒ»¸öÊÇpublic slotÀàÐÍ£¬ÐźÅÀàÐ͵±Öеĺ¯Êý¶¼ÊDz»¾­·½·¨ÏêÊöµÄº¯Êý£¬Ò²¾ÍÊÇ˵´Ëº¯Êý²»ÄÜÔÙÓëÖ®¶ÔÓ¦µÄcppÎļþµ±Öж¨Òå·½·¨£¬¶ø½ö½öÊǵ±×÷Ò»¸öÐźŷ¢³ö£¬¾ßÌå»úÖÆÓÉQt½øÐÐÅäÖã»¶øpublic slotº¯Êý¿ÉÒÔ¿´×÷ÊÇÒ»¸ö¾ßÌåµÄº¯Êý£¬Ã¿µ±Ò»¸öÐźŴÓÒ»¸öÀà·¢³öÖ®ºóÁíÒ»¸öÀ൱ÖеÄʵÌåÒ»µ©½ÓÊܵ½´ËÐźžͻáµ÷ÓÃÓëÖ®Ï໥¹ØÁªµÄ²Ûº¯Êý£¬²Ûº¯ÊýÊÇÓз½·¨ËµÃ÷µÄ¡£

ÔÚ±¾Ô´³ÌÐòµ±ÖУ¬ÐźźͲ۵ÄÁ¬½Ó¾ÍÊǰÑcheckboxÓë»­²¼µ±ÖеÄʵÌå½øÐÐÒ»Ò»ÏàÁ¬²¢ÔÚÑ¡ÖÐcheckboxµÄʱºòÏÔʾ¶ø¹Ø±ÕµÄʱºòÏûʧ¡£ÕâÖÖ¹¦ÄÜÊÇͨ¹ýcheckboxµÄ¶¯×÷¸Ä±ä·¢ÉäÐźŲ¢ÓÃconnectº¯Êý½«ÆäÐźÅÓ뺯Êý²ÛÁ¬½ÓÆðÀ´Ðγɵģ¬¾Í¼òµ¥ÄÃÒ»¸öʵÌåµÄ´úÂëÀ´¾ÙÀý×Ó°É£¬ÆäÓàµÄʵÌå¶¼ÊÇÒ»ÑùµÄ¡£

QCheckBox *torusCB = new QCheckBox(widget);
torusCB->setChecked(true);
torusCB->setText(QStringLiteral("Torus"));

Ê×ÏÈÊÇÔÚ¶¥²ãQWidgetµ±ÖÐÌí¼Ócheckbox£¬ÆäÖеڶþÐÐÊÇĬÈÏÁËcheckboxΪtrue£¬Ò²¾ÍÊÇĬÈÏÁ˳ÌÐòÔËÐкóËùÓеÄʵÌå¶¼½«µÃµ½ÏÔʾ¡£

QObject::connect(torusCB, &QCheckBox::stateChanged,modifier, &SceneModifier::enableTorus);

Õâ¶Î´úÂëµ÷ÓõÄÊÇconnectº¯Êý£¬½«checkboxµÄ¸Ä±ä״̬µÄÐźÅÓë»­²¼µ±Öеġ°enableTorus¡±·½·¨Á¬½ÓÆðÀ´£¬ÏÂÃæ¾ÍÊÇenableTorus·½·¨µÄʵÏÖ¡£


void SceneModifier::enableTorus(bool enabled)
{
m_torusEntity->setParent(enabled ? m_rootEntity : Q_NULLPTR);
}

Õâ¶Î´úÂëÖ±½Ó¿ØÖÆÁËÑ¡ÖеÄʵÌåÄÜ·ñÔÚ»­²¼µ±ÖеÄÒÔÏÔʾ£¬ÆäÖС°m_rotusEntity¡±±íʾÁ˵±Ç°ÊµÌ壬¶øºóÃæÊÇÒ»¸öÈýÔªÅжÏÓï¾ä£¬¼ì²éÓëÖ®ÏàÁ¬µÄcheckboxʱºò±»Ñ¡ÖУ¬Ñ¡Öеϰ¾ÍÔÚ¶¥²ã»­²¼µ±ÖÐÏÔʾ£¬¶ø²»ÄÜÑ¡Öеϰ¾ÍÓë¿ÕÖ¸ÕëÁ¬½ÓÆðÀ´£¬Ò²¾ÍÊÇÔÚ»­²¼µ±Öв»ÏÔʾ¡£

´óÌåÉÏ·ÖÎöµÄ¾ÍÊÇÕâô¶à¡£µ«ÊDZ¾´úÂë²¢²»ÊʺϽøÐд󹤳̵Ŀª·¢£¬ÒòΪºÜ¶àº¯Êý¶¼ÊÇÔÚmainº¯Êýµ±ÖУ¬ÀýÈç3DÑ¡ÏîµÄ×¢²á£¬ÉãÏñ»úµÄ°Ú·ÅÒÔ¼°Ç°¶ËäÖȾ¶¼ÊÇÔÚÖ÷º¯Êýµ±ÖÐÍê³ÉµÄ£¬ÄÇôΪÁËÂú×ãÒªÇóÎÒÃǾÍÐèÒª¶Ôº¯Êý½øÐиÄÔ죬ʹµÃ´úÂ뾡Á¿¶¼·ÅÔÚ¹¹Ô캯Êýµ±ÖУ¬½â·Åmainº¯Êý£¬ÔÚʵÌå¹¹Ôìµ±ÖÐ×Ô¶¯µ÷ÓÃÀà·½·¨£¬´ïµ½ÓëÔ­Ö÷º¯ÊýÒ»ÑùµÄ¹¦ÄÜ¡£Ò»Ð©²Ù×÷ÉϵĶ«Î÷¾ÍÓÃvoidÀà·½·¨¾Í¿ÉÒÔ£¬Ã»Ê²Ã´ºÃ˵µÄ£¬µ«ÊǺܶàÈ˶¼»áÓöµ½ÔÚÖ÷º¯Êýǰ±ß´´½¨²¢½øÐвÙ×÷µÄ±äÁ¿ÔÚº¯ÊýĩβҲ½øÐе÷ÓÃÁ˵ÄÎÊÌ⣬ÕâÖÖº¯ÊýÔÚ½øÐпÉÒÆÖ²ÐÔµÄÐÞ¸ÄÀà·½·¨¾Í²»ÄÜÓÃvoid×÷Ϊº¯ÊýÀàÐÍ£¬ÒòΪÔÚÀ಻ͬ·½·¨Ö®¼ä´´½¨µÄ±äÁ¿±àÒëÆ÷ÊDz»»á°ÑËüÃÇ¿´×÷ÊÇͬһ±äÁ¿µÄ£¬×îºó¾Í»áµ¼Öº¯Êýµ÷ÓôíÎó¡£ÄÇôһ¸ö±È½ÏºÃµÄ½â¾ö·½·¨¾ÍÊÇÔÚÇ°ÃæµÄ·½·¨µ±Öзµ»Ø±»ºóÃæº¯Êýµ÷Óõ½µÄ±äÁ¿£¬¶øÔÙ½«Õâ¸ö±äÁ¿×÷Ϊ²ÎÊý´«µÝµ½ºóÃæµÄº¯Êýµ±ÖУ¬´ú¼Û¾ÍÊÇÕâ¸ö±äÁ¿µÄ´´½¨²»ÄÜ·ÅÔÚij¸ö·½·¨µ±ÖУ¬¶øÒª·ÅÔÚ¹¹Ô캯Êýµ±ÖУ¬×¢ÒâÊÂÏî¾ÍÊÇÕâô¶à£¬ÒÔÏÂÊDZ¾È˵ÄÐ޸ĴúÂ루ɾȥÁËÓйØcheckboxµÄ´úÂ룩¡£

Ê×ÏÈÊÇmain.cpp

#include <QApplication>
#include "myglwidget.h"
#include "scenemode.h"
#include<Qt3DRender/qframegraph.h>
#include <Qt3DRender/qforwardrenderer.h>
#include<qcolor.h>

int main(int argc, char *argv[])
{
QApplication app(argc, argv);

SceneMode *defalut = new SceneMode;

defalut->resize(400, 300);
defalut->setWindowTitle(QStringLiteral("5G huge scale simulation"));//È·¶¨´°¿Ú±êÌâ
defalut->show();

return app.exec();
}

Æä´ÎÊÇscenemode.cpp

#include "scenemode.h"
#include <QVBoxLayout>
#include <QtCore/QDebug>
SceneMode::SceneMode(QWidget *parent)
:QWidget(parent)
{ QWidget *container;
//isCameraEntityFlag = false;
screen = new MyGLWidget(); //ÏÈÉú³ÉwindowÀàÐÍ£¬create()ÁË£¬
µ«´Ëʱ»¹Î´ÏÔʾ³öÀ´
rootEntity = new Qt3DCore::QEntity();
initConnection();
this->sizeHint();//³õʼ»¯´°¿Ú´óС
container = this->initWidget();
this->initEngine();
this->initCameraEntity();
this->initLight();
this->initFrameGraph();
this->initBasicEntity();
this->setEngine();
this->updateRatio(container);
this->initConnection2();//ÓÉÓÚcameraÏà¹Ø±äÁ¿ÐèÒªÔÚ
initCameraEntityÏà¹Øº¯ÊýÖ®ºó²ÅÄܵ÷Óã¬ËùÒÔÈý¸ö°´¼üÓë
cameraµÄÁªÏµ²»ÄÜд½øinitconnectionº¯Êýµ±ÖÐ
£¨2018Äê5ÔÂ4ºÅ£¬½ñÌ칤×÷½áÊø£©
qDebug() << "Basic is OK";
}
void SceneMode::initConnection()
{
connect(screen,SIGNAL(cameraLevel(int)),this,SLOT
(changeCameraLevel(int)));//¹öÂÖ£¨screen.h£©¸Ä±äÊÓ½Ç
£¨changeCameraLevelÖÐʵÏÖ£¬»¹Ã»¿´£©--¿´µ½ÕâÀï2018Äê3ÔÂ18ºÅ
// connect(view1,SIGNAL(clicked(bool)),this,SLOT(sysView()));
// connect(view2,SIGNAL(clicked(bool)),this,SLOT(picView()));
// connect(view3,SIGNAL(clicked(bool)),this,SLOT(userView()));
}
void SceneMode::initConnection2()
{
connect(view1,SIGNAL(clicked(bool)),this,SLOT(sysView()));
connect(view2,SIGNAL(clicked(bool)),this,SLOT(picView()));
connect(view3,SIGNAL(clicked(bool)),this,SLOT(userView()));
connect(pic1,SIGNAL(picModes(int)),this,SLOT(pressx(int)));
}
QWidget* SceneMode::initWidget()
{
QHBoxLayout* displaylayout = new QHBoxLayout(this);//changed
QVBoxLayout* buttongroup = new QVBoxLayout;

displaylayout->setMargin(6);//¿Ø¼þÓë´°ÌåµÄ×óÓұ߾à

ÊÇ6¸ö×ø±êÖᵥλ¾Ý
this->setLayout(displaylayout);
QWidget *container = QWidget::createWindowContainer(screen);
//½«windowÀà·ÅÈëÈÝÆ÷Àï
QSize screenSize = screen->screen()->size();
container->setMinimumSize(QSize(100,100));
container->setMaximumSize(screenSize);
displaylayout->addWidget(container,1);//ʹµÃdisplaylayoutÄÜÏÔʾ3D
container->show(); //×îºóÔÙÏÔʾ´æ·Å»æÍ¼µÄwindow

ÀàµÄÈÝÆ÷ÏÔʾ³öÀ´
return container;
}
void SceneMode::initEngine()
{
QVariantMap data;
this->engine = new Qt3DCore::QAspectEngine();
this->engine->registerAspect(new Qt3DRender::QRenderAspect());
this->input = new Qt3DInput::QInputAspect();
this->engine->registerAspect(this->input);

data.insert(QStringLiteral("surface"), QVariant::fromValue
(static_cast<QSurface *>(this->screen)));
data.insert(QStringLiteral("eventSource"), QVariant::fromValue
(this->screen));
this->engine->setData(data);
//89µ½96ÐÐÉÐδ¹¥¿Ë 2018Äê3ÔÂ20ÈÕ
}
void SceneMode::initCameraEntity()
{
//qDebug() << "Camera is OK";
cameraEntity = new Qt3DCore::QCamera(rootEntity);
cameraEntity->setObjectName(QStringLiteral("cameraEntity"));
//qDebug() << "1";
cameraEntity->lens()->setPerspectiveProjection(45.0f, 16.0f/9.0f, 0.1f, 1000.0f);// void setPerspectiveProjection(float fieldOfView,
float aspect,float nearPlane, float farPlane);
yzaxisDelta = QVector3D(-7,-10,9);//µ÷ÊÔ³öÀ´
Ò»¸ö±È½ÏºÃµÄ½á¹û
camerapos = QVector3D(100,150,-90.0f);
camCenter = QVector3D(0,0,0);
// camera3dPosition = QVector3D(800.0f, 2000.0f, 4000.0f);
// camera3dCenter = QVector3D(800.0f, 0.0f, 0.0f);
cameraEntity->setPosition(camerapos);//cameraEntity->
setPosition(QVector3D(100, 150, -90.0f));
cameraEntity->setUpVector(QVector3D(0, 1, 0));
//UpVector±íʾÁË
ÄãÔÚ½¨Á¢ÊÓµã×ø±êϵʱµÄÉãÏñ»úÏòÉϵķ½Ïò£¬
¾ö¶¨ÁË×ø±êϵ¸ÃÖáµÄ
ÕýÖµÑÓÉì·½Ïò(È¡¡À1£©¡£
//levelDelta = QVector3D(0.0f, 0.5f, 0.0f);
//yaxisDelta = QVector3D(0.0f, 0.0f, 100.0f);
//ÊÓ½ÇÖÐÐÄÓëÏà»úλÖõIJîÖµ
cameraEntity->setViewCenter(camCenter);
//ÉãÓ°»úͶÉäµÄÖÐÐĵã,cameraEntity->setViewCenter(QVector3D(0,0,0));
input->setCamera(cameraEntity);
}
void SceneMode::initLight()
{
Qt3DRender::QSphereMesh* lightMesh = new Qt3DRender::
QSphereMesh(rootEntity); //ÉèÖùâÔ´£º
°Ñ¹âÔ´¸½×ÅÔÚijһEntity
ÉϾͿÉÒÔÈ·¶¨Òƶ¯Î»ÖÃ
lightMesh->setRings(1);
lightMesh->setSlices(1);
lightMesh->setRadius(1);
Qt3DRender::QSpotLight* spotLight = new Qt3DRender::QSpotLight

(rootEntity); //¿ÉÒÔ¹²ÓÃ //SpotLight
¾Û¹âµÆÔ´ÉèÖ÷½Ïò¡¢½ØÖ¹½Ç¡¢Ç¿¶È¡¢Ë¥¼õÒò×Ó
spotLight->setColor(Qt::white); //DirectionalLight
ƽÐйâÔ´ÉèÖ÷½Ïò¡¢Ç¿¶È¡¢Ë¥¼õÒò×Ó
spotLight->setDirection(QVector3D(0,0,0));
//PointLightµã¹âÔ´ÉèÖÃÇ¿¶È¡¢Ë¥¼õÒò×Ó
spotLight->setIntensity(5); //λÖö¼Óи½×ŵÄ
ʵÌåEntity¾ö¶¨,±íʾǿ¶È
spotLight->setCutOffAngle(360);
spotLight->setAttenuation(QVector3D(0,0.02,0));
//Ë¥¼õϵÊýºÍÇ¿¶ÈÊÇÅäÌ×µÄ
Qt3DCore::QTransform* lifht1Transform = new Qt3DCore::QTransform(rootEntity); //¹âԴλÖÃ
lifht1Transform->setTranslation(QVector3D(0.0f, 10000.0f, 0.0f));
//ÏòyÖáÕý·½ÏòÆ½ÒÆÊ®¸öµ¥Î»
}
void SceneMode::initFrameGraph()
{
Qt3DRender::QFrameGraph *frameGraph = new Qt3DRender::QFrameGraph();
Qt3DRender::QForwardRenderer *forwardRenderer = new Qt3DRender::QForwardRenderer();
forwardRenderer->setCamera(cameraEntity);
forwardRenderer->setClearColor(QColor(QRgb(0xffffff)));
frameGraph->setActiveFrameGraph(forwardRenderer);
rootEntity->addComponent(frameGraph);
}
void SceneMode::initBasicEntity()//É趨»ù±¾ÊµÌå
{
// Torus shape data
//! [0]
m_torus = new Qt3DRender::QTorusMesh();
m_torus->setRadius(1.0f);//Ô²»·´óС
m_torus->setMinorRadius(0.2f);//Ó¦¸ÃÊÇ´ÓÍâÏòÀïµÄÀ©Õ¹´óС
ÊýԽСÔò¿ßÁþÔ½´ó
m_torus->setRings(3);//É趨¶àÉٵȱßÐÎ
m_torus->setSlices(300);//͸Ã÷¶ÈÉèÖã¬Ô½´óÔ½²»Í¸Ã÷
//! [0]
// TorusMesh Transform
//! [1]
Qt3DCore::QTransform *torusTransform = new Qt3DCore::QTransform();
torusTransform->setScale(3.0f);//·ÅËõ±ÈÀý£¬
Ô½´óÔòÔ­ÓÐͼÏñÔ½´ó
torusTransform->setRotation(QQuaternion::fromAxisAndAngle
(QVector3D(0.0f, 1.0f, 0.0f), 55.0f));//
×îºóÒ»¸ö²ÎÊýÉèÖÃÐýת½Ç¶È
torusTransform->setTranslation(QVector3D(4.0f, 4.0f, 10.0f));
//x±íʾ×óÓÒ£¬yÊÇÉÏÏ£¬z±íʾǰºó£¨×óÕýÓÒ¸º£¬
ÉÏÕýϸº£¬ºóÕýǰ¸º£©

//! [1]

//! [2]
Qt3DRender::QPhongMaterial *torusMaterial = new Qt3DRender:
QPhongMaterial();
torusMaterial->setDiffuse(QColor(QRgb(0xbeb3FF)));//ÉèÖÃÑÕÉ«
//! [2]

// Torus
//! [3]
m_torusEntity = new Qt3DCore::QEntity(m_rootEntity);
m_torusEntity->addComponent(m_torus);
m_torusEntity->addComponent(torusMaterial);
m_torusEntity->addComponent(torusTransform);
//! [3]
// Cylinder shape data
Qt3DRender::QCylinderMesh *cylinder = new Qt3DRender::QCylinderMesh();
cylinder->setRadius(1);
cylinder->setLength(3);
cylinder->setRings(100);
cylinder->setSlices(20);

// CylinderMesh Transform
Qt3DCore::QTransform *cylinderTransform = new Qt3DCore::QTransform();
cylinderTransform->setScale(1.5f);
cylinderTransform->setRotation(QQuaternion::fromAxisAndAngle
(QVector3D(0.0f, 0.0f, 1.0f), 90.0f));
//xÖ¸µÄÊǵ¥¸öÎïÌåµÄǰºó£¬
yÖ¸µÄÊÇÉÏÏ£¬zÖ¸µÄÊÇÎïÌåµÄ×óÓÒ£¬×îºóµÄÏòÁ¿±íʾÐýתµÄ½Ç¶È
cylinderTransform->setTranslation(QVector3D(-4.0f, 4.0f, -1.5));

Qt3DRender::QPhongMaterial *cylinderMaterial = new Qt3DRender::
QPhongMaterial();
cylinderMaterial->setDiffuse(QColor(QRgb(0x928327)));

// Cylinder
m_cylinderEntity = new Qt3DCore::QEntity(m_rootEntity);
m_cylinderEntity->addComponent(cylinder);
m_cylinderEntity->addComponent(cylinderMaterial);
m_cylinderEntity->addComponent(cylinderTransform);

// Cuboid shape data
Qt3DRender::QCuboidMesh *cuboid = new Qt3DRender::QCuboidMesh();

// CuboidMesh Transform
Qt3DCore::QTransform *cuboidTransform = new Qt3DCore::QTransform();
cuboidTransform->setScale(4.0f);
cuboidTransform->setTranslation(QVector3D(4.0f, -4.0f, 0.0f));

Qt3DRender::QPhongMaterial *cuboidMaterial = new Qt3DRender::

QPhongMaterial();
cuboidMaterial->setDiffuse(QColor(QRgb(0x665423)));

//Cuboid
m_cuboidEntity = new Qt3DCore::QEntity(m_rootEntity);
m_cuboidEntity->addComponent(cuboid);
m_cuboidEntity->addComponent(cuboidMaterial);
m_cuboidEntity->addComponent(cuboidTransform);

// Sphere shape data
Qt3DRender::QSphereMesh *sphereMesh = new Qt3DRender::QSphereMesh();
sphereMesh->setRings(20);
sphereMesh->setSlices(20);
sphereMesh->setRadius(2);

// Sphere mesh transform
Qt3DCore::QTransform *sphereTransform = new Qt3DCore::QTransform();

sphereTransform->setScale(1.3f);
sphereTransform->setTranslation(QVector3D(-4.0f, -4.0f, 0.0f));

Qt3DRender::QPhongMaterial *sphereMaterial = new Qt3DRender::
QPhongMaterial();
sphereMaterial->setDiffuse(QColor(QRgb(0xa69929)));

// Sphere
m_sphereEntity = new Qt3DCore::QEntity(m_rootEntity);
m_sphereEntity->addComponent(sphereMesh);
m_sphereEntity->addComponent(sphereMaterial);
m_sphereEntity->addComponent(sphereTransform);

//sphere shape data2
Qt3DRender::QSphereMesh *sphereMesh2 = new Qt3DRender::QSphereMesh();
sphereMesh2->setRings(100);
sphereMesh2->setSlices(10);
sphereMesh2->setRadius(1);
//Sphere transformation
// Qt3DCore::QTransform *sphereTransform2 = new Qt3DCore::QTransform();
// sphereTransform2->setScale(2.0f);
// sphereTransform2->setTranslation(QVector3D(-16.0f,-8.0f,2.0f));
Qt3DRender::QPhongMaterial *sphereMaterial2 = new Qt3DRender::
QPhongMaterial();
sphereMaterial2->setDiffuse(QColor(QRgb(0xFFFFFF)));
//¼ÓÔØÔ¤ÖôóС£¬²ÄÁÏÒÔ¼°Î»ÖòÎÊý
//t_sphereEntity = new Qt3DCore::QEntity(m_rootEntity);
//t_sphereEntity->addComponent(sphereMesh2);
//t_sphereEntity->addComponent(sphereMaterial2);
//t_sphereEntity->addComponent(sphereTransform2);
carEntity1 = new carEntity(m_rootEntity);
carEntity1->transform()->setScale3D(QVector3D(10,10,10));
carEntity1->transform()->setTranslation(QVector3D(0,0,0));
}
void SceneMode::updateRatio(QWidget* ctn)
{
QSize widgetSize = ctn->size();
float aspectRatio = float(widgetSize.width()) / float
(widgetSize.height());
cameraEntity->lens()->setPerspectiveProjection(60.0f,
aspectRatio, 0.1f, 100000.0f);
}
QSize SceneMode::sizeHint() const
{
return QSize(1024*3, 768*3);
}
void SceneMode::setEngine()
{
this->engine->setRootEntity(rootEntity);
}
SceneMode::~SceneMode()
{
}

¾­¹ýÕâÑùµÄ²Ù×÷Ö®ºó£¬¾Í¿ÉÒÔ°ÑÔ­À´µÄmainµ±ÖгÌÐòÈû½øscenemodeµ±ÖУ¬Íê³ÉÁ˶ԴúÂë¿ÉÒÆÖ²ÐԵĸÄÔì¡£ÕâÀïÃæÓõ½ÁËthis£¬Ö¸µÄÊǵ±Ç°²Ù×÷À࣬ÊÇC++µ±ÖеÄÒ»¸ö¹Ø¼ü×Ö¡£

ÏÂÃæ¾ÍÀ´ÌÖÂÛһϹØÓÚ3DMaxµ±Öеġ°µ¼³ö¡±¹¦ÄÜÓëQT 3D³¡¾°µÄÒ»¸ö¼òµ¥½»»¥¡£ÕýÈçOpenGL¶ÔÓÚÐÂÊÖÒªÇó½Ï¸ß£¬ËùÒÔ¶ÔÓÚ3D½¨Ä£µÄÐÂÊÖ¶øÑÔ3DMaxÎÞÒÉÊǸüºÃÉÏÊֵ쬲¢ÇÒ3DMaxÍøÉϵÄËØ²ÄÒ²½Ï¶à£¬¿ÉÒÔ°ÑÒ»²¿·Ö3D½¨Ä£µÄ¹¤×÷Íâ·Å£¬¼õÇáÁ˹¤×÷Á¿¡£ÄÇôÀ´ÌÖÂÛÒ»ÏÂÓÉ3DMaxµ¼³öµÄOBJÎļþÊÇÈçºÎÔÚQTÉϵõ½Ó¦Óõġ£

QTµ±ÖÐÖ§³Ö3DÎļþµÄµ¼ÈëºÍÌùͼµÄµ¼È룬²»¹ýÄãÒªÊÇÏëµ¼ÈëµÄ»°µÃÏÈÔÚQTËùÔÚ¹¤³Ìµ±ÖÐÌí¼Ó×ÊÔ´£¬¿É²»ÊÇÖ±½Ó°Ñ×ÊÔ´ËùÔÚµØÖ·¸æÖªÈí¼þ¾Í¿ÉÒԴ󹦸æ³ÉµÄ£¬ÕâÒ»µãÔø¾­ÕÛÄ¥ÁËÎҺܳ¤Ò»¶Îʱ¼ä£¬ÒòΪµ±Ê±ÎÒÉ趨µÄʵÌå¾ÍÊDz»ÄÜÔÚ»­²¼µ±Öеõ½ÏÔʾ¡£

¾ßÌåµÄÌí¼Ó·½Ê½£ºÊ×ÏÈÓÒ¼ü¹¤³Ì£¬µã»÷¡°Ìí¼ÓÐÂÎļþ¡±£¬È»ºóÑ¡Ôñ¡°Qt"Ò»À¸µÄ"Qt resource file"£¬É趨ǰ׺£¬²¢½«ËùÐèÎļþÌí¼Ó½øÈ¥¾Í¿ÉÒÔÁË¡£Ê¹ÓõÄʱºò¶¼»áÓÐ×Å×Ô¼ºµÄº¯ÊýÈ¥½øÐÐʹÓã¬ÀýÈç±¾Îĵ±ÖÐÌí¼ÓʵÌåµÄOBJÎļþ¾ÍÊÇÔÚ·½·¨Öжԡ°mesh¡±½øÐÐÌí¼Ó£¬Óõ½µÄÊÇ¡°setSource¡±º¯Êý£¬setSourceº¯ÊýºóÃæµÄ²ÎÊýÊÇQUrlÀàÐ͵ģ¬ÔÚÕâ¸öÀàÐÍÏÂÓÃ×Ö·û´®È¥Ö¸¶¨OBJÎļþËùÔÚµÄλÖã¬×¢Ò⣬ÕâÀïÃæËùÔÚµÄλÖò¢²»ÊÇOBJÎļþÔÚ¼ÆËã»úµ±ÖеÄλÖ㬶øÊÇÔÚ¹¤³Ìµ±ÖеÄÏà¶ÔλÖã¬Õâ¸öÎļþÔÚʲôǰ׺µ±ÖУ¬ÔÚÄĸöÎļþ¼Ðµ±ÖУ¬Ãû×ÖÊÇʲô£¬ÊÇʲôÀàÐ͵Ķ¼ÒªÔÚ×Ö·û´®µ±ÖÐÒ»Ò»½øÐÐÖ¸Ã÷¡£´óÌåÉϾÍÊÇÈçÏÂÃæÕâÌõαÂëËùдµÄsetSource(QUrl("qrc:/ǰ׺/Îļþ¼Ð(¿ÉÄܲ»Ö¹Ò»¸ö)/ÎļþÃû.ÎļþÀàÐÍ))¡£

ÄÇô£¬¶ÔÓÚ×î¼òµ¥µÄ3D½¨Ä£ÊµÌåµÄ¹¹ÔìÖ÷ÒªÓÉÒÔϼ¸¸ö·½Ãæ¹¹³É£¬·Ö±ðÊÇmesh¡¢transformºÍmaterial£¬·Ö±ðÊÇäÖȾ¡¢Î»ÖÃÒÔ¼°²ÄÁÏ£¬µÚÒ»Ïî¼ÓÔØOBJÎļþ£¬µÚ¶þÏîÔÚ¶¥²ã»­²¼µ±Öе÷Óã¬É趨ÔÚ»­²¼µ±ÖÐ×ø±êϵµÄλÖ㬵ÚÈýÏîÔò¸ºÔðµ÷É«£¬µ±È»ÓÐÌõ¼þµÄ»°¾Í¿ÉÒÔÌùͼÒÔ´ïµ½¸ü¼Ó±ÆÕæµÄЧ¹û¡£

¶ø¶ÔÓÚÒ»¸ö3DÎļþÈçºÎʹÓÃ3DMaxµ¼³öÎÒÃÇÐèÒªµÄOBJÎļþÄØ£¿·½·¨¾ÍÊÇʹÓá°µ¼³ö¡±£¬µ¼³öÑ¡¶¨¶ÔÏ󣬾ͿÉÒÔÔÚµ¼³ö¸ñʽµ±ÖÐÑ¡¶¨OBJÎļþ½øÐе¼³öÁË¡£ÒªÊÇÏë¶ÔÒ»¸ö3DʵÌåµÄ²»Í¬×é³É²¿·Ö½øÐзֱðäÖȾ£¬ÄÇô¾ÍÐèÒª½«Ô­ÓÐ3DͼÐνøÐнâ×飬ȻºóÔÙ·Ö±ð½«Æäµ¼³ö£¬Ö»Òª¸÷¸öpartÖ®¼äµÄÏà¶ÔλÖÃûÓиı䣬ÄÇôÔÚ¶¥²ã»­²¼µ±ÖнöÐ轫ËüÃÇÉ趨ÔÚÍ¬Ò»×ø±êϾͿÉÒÔÍê³É½â×éºóµÄÔÙ´Î×éºÏ¡£

 

   
10822 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì