OSGѧϰ¹ý³ÌÖÐµÄ±Ê¼Ç - ͼÎÄ ÏÂÔØ±¾ÎÄ

osg±Ê¼ÇËÄ

2011-08-03 16:10:23| ·ÖÀࣺOSG | ±êÇ©£º |×ֺŴóÖÐС¶©ÔÄ

¾ÅÀý×Óϵͳ

osgParticle£ºexplosionEffectÓÃÓÚ±¬Õ¨µÄÄ£Ä⣬fireEffectÓÃÓÚ»ðµÄÄ£Ä⣬explosionDebrisEffectÓÃÓÚ±¬Õ¨ºóËÄÉ¢µÄ¿ÅÁ£µÄÄ£Äâ¡£

osgParticleµÄÖмáÀࣺ

osgParticle£º£ºParticle Á£×ÓÄ£°å£¬¿é¶¨Á£×ӵĴóС£¬ÑÕÉ«£¬ÉúÃüÖÜÆÚµÈµÈ¡£ osgParticle£º£ºParticleSystem Á£×ÓϵͳµÄ×ÜÌåÊôÐÔ£¬Á£×Ó×ÜÊý£¬ÎÆÀíµÈ¡£ osgParticle£º£ºCounter Á£×Ó²úÉúµÄÊýÄ¿·¶Î§

osgParticle£º£ºPlacer Á£×Ó³öÉúµãµÄÐÎ״̬Èç»·Ô²µãÐÎ osgParticle£º£ºShooter Á£×Ó·¢ÉäÆ÷£¬¾ö¶¨Á£×ӵijõËÙ

osgParticle£º£ºEmitter ÉÏÊöÄ£°åÒÔ¼°²Ù×÷¶¼Îª´ËÀà·þÎñ£¬ÀàÃû£º·¢ÉäÆ÷ osgParticle£º£ºProgram ¿É½ÓÊܶÔÁ£×ӵIJÙ×÷£¬Èç¹ì¼£µÄ¶¨Ò壬¾ØÕóµÄ±ä»»µÈµÈ osgParticle£º£ºOperator Á£×Ó²Ù×÷»òÓû§×Ô¶¨ÒåÁ£×Ó²Ù×÷

osgParticle£º£ºParticleEffect ¿Éµ¥¶ÀʹÓõÄÁ£×ÓäÖȾ£¬Ä£·ÂÑÌÎí£¬±¬Õ¨µÈµÈ osgParticle£º£ºosgPrecipitationEffect ¿ÉÒÔʹÓÃÎíЧ£¬Ñ©Ð§µÈµÈ osgʹÓÃÁ£×ÓϵͳËù¾­Àú²½Ö裺 1. È·¶¨Òâͼ°üÀ¨Á£×ÓµÄÔ˶¯·½Ê½µÈµÈ

2. ½¨Á¢Á£×ÓÄ£°å°´ËùÐèÒªµÄÀàÐÍÈ·¶¨Á£×ӵĽǶȣ¬ÐÎ×´£¬ÉúÃüÖÜÆÚµÈ 3. ½¨Á¢Á£×ÓϵͳÉèÖÃ×ܵÄÊôÐÔ

4. ÉèÖ÷¢ÉäÆ÷·¢ÉäÐÎ×´£¬·¢ÉäÁ£×ÓµÄÊýÄ¿±ä»¯µÈµÈ 5. ÉèÖòÙ×÷Ðýת¶È£¬·çÁ¦µÈµÈ 6. ¼ÓÈë½Úµã£¬¸üРÊÓ¿Ú&LOD&¶àͨµÀ 1. ¶àÊÓ¿Ú

´´½¨ÊÓ¿Ú±ØÐëÓÐÒÔϼ¸¼þ¶«Î÷£º

µÚÒ»£ºÁ˽âÕû¸öÆÁÄ»·Ö±æÂÊÓжà´ó£¬ÕâÑù¿ÉÒÔ·Ö±æÊӿڵĴóС£¬ÒÔ±ã½øÐÐ·Ö¸î µÚ¶þ£ºÉÏÏÂÎÄ£¬ÎÒÃDZØÐëÊÖ¶¯µÄ´ò¿ªÉèÖÃÉÏÏÂÎÄ 2. LOD

2.1ÎļþµÄÊä³ö

LOD±ÈÆðPagedLOD¶øÑÔ²¢·ÇÊ®·ÖµÄ³£Óã¬ÓиöµØ·½ÓõÄÌØ±ð¶à£¬ÄǾÍÊǰÑÒ»¸öºÃºÃµÄÄ£ÐͼÓÒ»¸öÊÓ¾àѹ³ÉÒ»¸öÄ£ÐÍ£¬Õâ¸öÄ£ÐͱÈÒÔǰµÄ¿´À´¾ÍÊǶà¸öÊÓ¾àµÄ¿ØÖÆ£¬Ô¶ÁË¿´²»¼û£¬½üÁË¿´µÄ¼û¡£ÕâÐèÒªÓõ½OSGµÄÎļþÊä³ö£¬ÕâÑù²ÅÄܰÑLOD½ÚµãºÍÄ£ÐͽڵãÒ»ÆðÊä³ö¡£

2.2ÔÚÄ£ÐÍÖмÓLOD½Úµã 3. ¶àͨµÀ

4. Imposter Óö¯Ì¬Í¼Æ¬Ìæ»»³¡¾°µÄ¼¼Êõ¿ÉÒÔ°ÑËüµ±×÷LODÒ»ÑùʹÓã¬Ö»²»¹ý²»ÊǰÑÄ£ÐͱäûÓУ¬¶øÊÇʹËü»»³ÉÒ»ÕÅͼ

Ê®ÎÄ×Ö&Ä£ÐÍÒõÓ° ÏÔʾºº×Ö

ÎÄ×ÖÏÔʾµÄÔ­Àí£º¶ÁÈ¡×ÖÌåµãÕóÐÅÏ¢¨¤×ª»»ÎªÍ¼Ïñ¨¤·´×ßÑù¨¤×îÖÕͼÏñ

osg±Ê¼ÇÎå

2011-08-06 10:58:27| ·ÖÀࣺOSG | ±êÇ©£º |×ֺŴóÖÐС¶©ÔÄ

·ÃÎÊÆ÷µÄÉè¼ÆÔÊÐíÓû§½«Ä³¸öÌØ¶¨½ÚµãµÄÖ¸¶¨º¯Êý£¬Ó¦Óõ½µ±Ç°³¡¾°±éÀúµÄËùÓдËÀà½ÚµãÖС£±éÀúµÄÀàÐͰüÀ¨£ºNODE_VISITOR£¨½Úµã·ÃÎÊÆ÷£©,UPDATE_VISITOR(¸üÐÂʱ±éÀú·ÃÎÊÆ÷),COLLECT_OCCLUDER_VISITOR£¨·â±Õ½Úµã£©,CULL_VISITOR£¨ÌôÑ¡£©¡£

·ÃÎÊÆ÷±éÀúģʽ£ºTRAVERSE_NONE(Ö»·ÃÎʵ±Ç°½Úµã), TRAVERSE_PARENTS£¨·ÃÎʸ¸½Úµã£©, TRAVERSE_ALL_CHILDREN(·ÃÎÊËùÓÐ×Ó½Úµã), TRAVERSE_ACTIVE_CHILDREN(±éÀú¼¤»î״̬µÄº¢×Ó½Úµã)¡£

»ùÀà·ÃÎÊÆ÷ÀàÊÇNodeVisitorÀ࣬ÆäÖÐÌṩµÄapply·½·¨ÖØÔØÁËËùÓÐÀàÐͽڵ㡣·ÃÎÊÆ÷ËùÔÊÐíµÄ·ÃÎÊ·½Ê½½«ÔÚ´ËÀàµÄ×ÓÀàÖеõ½ÊµÏÖ£¬ÒÔ¼°·ÃÎÊʱËù½øÐеIJÙ×÷Ò²ÔÚ´ËÖж¨Òå¡£

Æô¶¯·ÃÎÊÆ÷µÄ²Ù×÷£ºÀûÓÃosg£º£ºNodeµÄaccept·½·¨¿ÉÒÔʵÏÖ½Úµã·ÃÎÊÆ÷µÄÆô¶¯¡£Ñ¡Ôñij¸öÖ´ÐÐaccept·½·¨µÄ½Úµã£¬ÎÒÃǾͿÉÒÔ¿ØÖƱéÀúµÄ¿ªÊ¼µÄλÖᣱéÀúµÄ·½ÏòÊÇͨ¹ýÑ¡Ôñ±ãÀûģʽÀ´½øÐÐÀ´¾ö¶¨µÄ£¬¶ø½ÚµãÀàÐ͵ÄÇø·ÖÔòÊÇͨ¹ýÖØÔØÏàÓ¦µÄapply·½·¨ÊµÏֵġ£Accept·½·¨½«ÏìӦijһÀàµÄ±éÀúÇëÇ󣬲¢Ö´ÐÐÓû§Ö¸¶¨½ÚµãµÄËùÓÐ×ÓÀà½ÚµãµÄapply·½·¨¡£

osgSim::MultiSwitch¶àÖØ¿ª¹Ø½Úµã¡£·½·¨setSingleChildOn¿ÉÒÔÉèÖÃÆäÖеÄÒ»¸ö½ÚµãÓÐЧ£¬¶øÍ¬×éµÄÆäËû½ÚµãÎÞЧ.

×ÔÓɶȽڵã²Ù×÷£ºosgSim£º£ºDOFTransfrom ×ÔÓɶȽڵ㣬DOFTransform::setCurrentHPRÓÃÓÚÉèÖýڵã×ÔÓɶÈh£ºheading£¬p£ºpitch£¬r£ºroll¡£heading£ºÍ·²¿µÄ×óÓÒÆ«×ª£»pitch£º¸©Ñö½ÇµÄÉèÖã»rollΪÐýת½ÇµÄÉèÖá£

ʹÓûص÷ʵÏÖÔÚÿ֡µÄ¸üбéÀúÖнøÐнڵãµÄ¸üУº¸ù¾Ý±éÀú·½Ê½µÄ²»Í¬£¬·ÖΪupdate£¨¸üУ©£¬cull(ÌôÑ¡)£¬draw£¨»æÖÆ£©£¬»Øµ÷º¯Êý½«×Ô¶¯µÄÖ´ÐС£

¸üлص÷ÔÚÌôÑ¡»Øµ÷֮ǰ£¬ÌôÑ¡»Øµ÷ÔÚ»æÖƻص÷֮ǰ¡£

ÖØÔØosgGA::GUIEventHandlerÀïÃæµÄvirtual bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& aa); eaÓÃÓÚÇø·ÖʼþÀàÐÍ£¬ÓÃÓÚ½ÓÊÕGUIʼþ£»aaÓÃÓÚÉú³É²¢ÏòGUIϵͳ·¢ËÍÇëÇó¡£

¸æÊ¾ÅÆ´´½¨

¸æÊ¾ÅƽڵãµÄÌØÐÔÊÇÎ§ÈÆÓû§¶¨ÒåµÄÖᣨ»òÕߵ㣩½øÐÐÐýת£¬´Ó¶øÊ¼ÖÕÃæÏòÒ»¸öÖ¸¶¨µÄ·½Ïò¡£ BillboardÀà°üÀ¨¿ÉÒÔÈÆÒ»¸öÖá»òÕ߲ο¼µãÐýתµÄ²¢³¯ÏòÖ¸¶¨·½ÏòµÄ¼¸ºÎÌ壬Billboard¼Ì³Ð×ÔGeodeÀà¡£

³ýÁ˼̳Ð×ÔGeodeÀàµÄ·½·¨ºÍ³ÉÔ±Í⣬¸æÊ¾ÅÆÀ໹°üÀ¨ÁËÓÃÓÚ¿ØÖÆÆä×ÔÉíÌØÐԵijÉÔ±ºÍ·½·¨£º¸æÊ¾ÅÆÊÇ·ñ»·ÈƲο¼µã»òÕßÖ᣻Èç¹û»·ÈÆÒ»¸öÖáµÄ»°£¬ËüÓ¦¸Ã³¯Ïòʲô·½Ïò¡£

¿ÉÒÔʹÓÃBillboard£º£ºsetMode£¨osg£º£ºBillboard£º£ºMode£©£¬ºÏ·¨²ÎÊýÓÐPOINT_ROT_EYE(ÈÆÒ»¸öµãÐýת£¬Ïà¶ÔÓÚÑÛ¾¦×ø±ê), POINT_ROT_WORLD(ÈÆÒ»¸öµãÐýת£¬Ïà¶ÔÓÚÊÀ½ç×ø±ê)£¬AXIAL_ROT£¨ÈÆÒ»¸öÖáÐýת£©¡£Èç¹ûÖ¸¶¨ÁËAXIAL_ROT£¬ÓÃÓھͿÉÒÔʹÓÃsetAxis£¨osg£º£ºvec3£©·½·¨À´ÉèÖøæÊ¾ÅÆÈÆÖ®ÐýתµÄÖá¡£Óû§»¹¿ÉÒÔÉèÖ÷¨ÏßsetNornal£¨osg£º£ºvec3£©¶¨Òå¸æÊ¾ÅÆ³¯ÏòµÄ·¨Ïß¡£ÎªÁË·ÅÖøæÊ¾ÅÆ£¬

Óû§»¹ÐèÖØÔØosg£º£ºGeodeµÄaddGeometry·½·¨¡£Õâ¸ö·½·¨ÓÐÁ½¸ö²ÎÊý£ºÒ»¸öDrawableʵÀý£¬ÁíÒ»¸ö±ê־λÖõÄosg£º£ºvec3ʵÀý¡£

×ÜÊö£º

Ïò³¡¾°ÖÐÌí¼Ó¸æÊ¾ÅƵIJ½Ö裺 1. ´´½¨Ò»¸ö¸æÊ¾ÅÆÊµÀý²¢Ìí¼Óµ½³¡¾° 2. ´´½¨¹âÕչرյÄäÖȾ״̬

3. ´´½¨¼¸ºÎÌ壨ӦÓÃÉÏÃæµÄäÖȾ״̬£©²¢Ìí¼Ó¸ø¸æÊ¾Åƽڵ㡣 ½»¼¯²âÊÔ

Osg2.0ÒÔÉϰ汾ÖУ¬ÒѾ­Ê¹ÓÃÁËIntersectionVisitor´úÌæÁËÔ­ÓеÄIntersectVisitorÀ࣬еÄÀ๦ÄܸüÇ¿´ó¡£

»ù±¾Àà½éÉÜ£º

Ï߶Σºosg£º£ºLineSegmentÀ࣬³¡¾°ÖеÄÉäÏߣ¬°üÀ¨Á½µã£¬Ò»¸öÊÇÏß¶ÎµÄÆðµã£¬Ò»¸öÊÇÏ߶εÄÖյ㣬¶¼Îªosg£º£ºvec3ÏòÁ¿ÊµÀý£¬µ±½»¼¯²âÊÔ±»´¥·¢Ê±£¬Ëü½«¼ì²âÉäÏßµÄÏཻÇé¿ö²¢Ö´ÐÐÏàÓ¦µÄ²Ù×÷¡£

½»µã£ºosgUtil£º£ºHit£ºÕâ¸öÀàÏò³ÌÐòÔ±ÌṩÁË»ñÈ¡½»¼¯¼ì²âµÄ»ù±¾Êý¾ÝµÄ·½·¨¡£½»µãÀà°üÀ¨Ò»ÌõÉäÏßÓ볡¾°¼¸ºÎÌåÏཻµÄ״̬ÐÅÏ¢£¬ÓÈÎªÖØÒªµÄÊÇ£¬ËüÒÔvec3ÐÎʽÌṩÁ˾ֲ¿ºÍÊÀ½ç×ø±êµÄλÖÃÒÔ¼°·¨ÏßÊý¾Ý¡£ËüµÄ³ÉÔ±·½·¨getLocalIntersectPoint getLocalIntersectNormal getWorldIntersectPoint

getWorldIntersectNormal·Ö±ðÒÔosg£º£ºvec3×÷Ϊ·µ»ØÖµ£¬·µ»Ø¾Ö²¿/ÊÀ½ç×ø±êµÄÏཻµã/·¨ÏßÊýÖµ¡£

½»µãÀà±í£ºosgUtil£º£ºIntersectVisitor£º£ºHitList£ºÒ»Ìõµ¥Ò»µÄÏ߶οÉÄÜÓ볡¾°ÖеĶà¸ö¼¸ºÎÌåʵÀý²úÉú½»¼¯¡£¶ÔÓÚÿһÌõ²ÎÓë½»¼¯²âÊÔµÄÏ߶Σ¬ÏµÍ³¾ù»á²úÉúÒ»¸öÁÐ±í¡£Õâ¸öÁбí°üº¬ÁËËùÓн»¼¯²âÊÔ²úÉúµÄHitʵÀý£¬Èç¹ûûÓмì²âµ½½»¼¯£¬´ËÁбíΪ¿Õ¡£

½»¼¯·ÃÎÊÆ÷£ºosgUtil£º£ºIntersectVisitor£¬ÉäÏßÓ볡¾°Öм¸ºÎÌåµÄ½»¼¯²âÊÔÓɽ»¼¯·ÃÎÊÆ÷À´´´½¨²¢ÊµÏÖ³õʼ»¯¡£IntersectionVisitorÀà¼Ì³Ð×ÔNodeVisitorÀ࣬Òò´ËÆä´´½¨ºÍ´¥·¢»úÖÆÓëNodeVisitor´óÖÂÏàËÆ¡£·ÃÎÊÆ÷ÐèҪά»¤Ò»¸ö½øÐн»¼¯²âÊÔµÄÏß¶ÎÁÐ±í£¬¶ø¶ÔÓÚÆäÖеÄÿһÌõÏ߶Σ¬·ÃÎÊÆ÷¶¼»á´´½¨Ò»¸ö½»µãÁÐ±í£¨osgUtil£º£ºIntersectVisitor£º£ºHitListʵÀý£©¡£

Á£×Óϵͳ

ParticleSystemÀà¼Ì³Ð×ÔDrawableÀ࣬¹Ê¿ÉÒÔ½«Æä×÷ΪGeodeµÄ×Ó½Úµã¼ÓÈë¡£ Á£×ÓϵͳÌí¼ÓµÄ²½Ö裺

1. ´´½¨Á£×ÓϵͳʵÀý²¢½«ÆäÌí¼Óµ½³¡¾°£º×÷ΪGeodeµÄ×Ó½Úµã¼ÓÈë 2. ÉèÖÃÁ£×ÓϵͳµÄäÖȾ״̬ÊôÐÔ£¬·Ç±ØÐë 3. ´´½¨Á£×Ó¶ÔÏó²¢½«Æä¹ØÁªµ½Á£×Óϵͳ 4. ÉèÖÃÁ£×Ó²ÎÊý£¬·Ç±ØÐë

5. ´´½¨Á£×Óϵͳ¸üÐÂÆ÷£¬²¢½«Æä¹ØÁªµ½Á£×ÓϵͳʵÀý£¬²¢Ìí¼Óµ½³¡¾°ÖÐ

6. ´´½¨±ê×¼·ÅÉ伫£¬ÒÔ¶¨Ò壺¼ÆÊýÆ÷¡ªÃ¿Ö¡´´½¨µÄÁ£×ÓÊý£¬·ÅÉäÆ÷¡ªÁ£×Ó³öÉúλÖ㬷¢ÉäÆ÷¡ª³õʼËٶȷDZØÐë

7. ½«±ê×¼·ÅÉ伫¹ØÁªµ½Á£×Óϵͳ·Ç±ØÐë

8. ´´½¨ModularProgram±ê×¼±à³ÌÆ÷ʵÀý£¬ÒÔ¿ØÖÆÁ£×ÓÔÚÉúÃüÖÜÆÚÄÚµÄÔ˶¯£ºÊ×ÏÈ´´½¨²¢¶¨ÒåOperator¼ÆËãÆ÷£»È»ºóÌí¼Ó¼ÆËãÆ÷µ½±ê×¼±à³ÌÆ÷¡£

»ù±¾²½ÖèÊÇ£º´´½¨Ò»¸öÁ£×Óϵͳ¶ÔÏó£¬Ò»¸ö¸üÐÂÆ÷¶ÔÏó£¬ÒÔ¼°Ò»¸öÁ£×Ó¶ÔÏó£¬Í¬Ê±ÉèÖó¡¾°