PuzzleSDK
CameraCullingDemo类 参考

#include <Camera3DTest.h>

+ 类 CameraCullingDemo 继承关系图:
+ CameraCullingDemo 的协作图:

Public 成员函数

 CREATE_FUNC (CameraCullingDemo)
 
 CameraCullingDemo ()
 
virtual ~CameraCullingDemo ()
 
virtual void onEnter () override
 
virtual void onExit () override
 
virtual void update (float dt) override
 
virtual std::string title () const override
 
void reachEndCallBack ()
 
void switchViewCallback (cocos2d::Ref *sender)
 
void addSpriteCallback (cocos2d::Ref *sender)
 
void delSpriteCallback (cocos2d::Ref *sender)
 
void drawCameraFrustum ()
 
- Public 成员函数 继承自 TestCase
 TestCase ()
 
 ~TestCase ()
 
virtual std::string subtitle () const
 
virtual Type getTestType () const
 
virtual float getDuration () const
 
virtual std::string getExpectedOutput () const
 
virtual std::string getActualOutput () const
 
virtual void restartTestCallback (cocos2d::Ref *sender)
 
virtual void nextTestCallback (cocos2d::Ref *sender)
 
virtual void priorTestCallback (cocos2d::Ref *sender)
 
virtual void onBackCallback (cocos2d::Ref *sender)
 
void setTestSuite (TestSuite *testSuite)
 
TestSuitegetTestSuite () const
 
float getRunTime () const
 
void setTestCaseName (const std::string &name)
 
std::string getTestCaseName () const
 
const cocos2d::Label * getSubtitleLable () const
 
const cocos2d::MenuItemImage * getRestartTestItem () const
 

Protected 属性

cocos2d::Label * _labelSprite3DCount
 
cocos2d::Layer * _layer3D
 
std::vector< cocos2d::Sprite3D * > _objects
 
CameraType _cameraType
 
cocos2d::Camera * _cameraFirst
 
cocos2d::Camera * _cameraThird
 
cocos2d::MoveBy * _moveAction
 
cocos2d::DrawNode3D * _drawAABB
 
cocos2d::DrawNode3D * _drawFrustum
 
int _row
 
- Protected 属性 继承自 CameraBaseTest
cocos2d::BillBoard * bill1
 
cocos2d::BillBoard * bill2
 
cocos2d::Label * l1
 
cocos2d::Label * l2
 
- Protected 属性 继承自 TestCase
cocos2d::MenuItemImage * _priorTestItem
 
cocos2d::MenuItemImage * _restartTestItem
 
cocos2d::MenuItemImage * _nextTestItem
 
cocos2d::Label * _titleLabel
 
cocos2d::Label * _subtitleLabel
 

额外继承的成员函数

- Public 类型 继承自 TestCase
enum class  Type { ROBUSTNESS , UNIT , GRAPHICAL_STATIC , MANUAL }
 
- Public 属性 继承自 TestCase
CC_CONSTRUCTOR_ACCESS __pad0__: virtual bool init() override
 

详细描述

在文件 Camera3DTest.h158 行定义.

构造及析构函数说明

◆ CameraCullingDemo()

CameraCullingDemo::CameraCullingDemo ( )

在文件 Camera3DTest.cpp707 行定义.

708: _layer3D(nullptr)
710, _cameraFirst(nullptr)
711, _cameraThird(nullptr)
712, _moveAction(nullptr)
713, _drawAABB(nullptr)
714, _drawFrustum(nullptr)
715, _row(3)
716{
717}
cocos2d::DrawNode3D * _drawFrustum
Definition: Camera3DTest.h:188
cocos2d::Layer * _layer3D
Definition: Camera3DTest.h:181
cocos2d::Camera * _cameraFirst
Definition: Camera3DTest.h:184
CameraType _cameraType
Definition: Camera3DTest.h:183
cocos2d::DrawNode3D * _drawAABB
Definition: Camera3DTest.h:187
cocos2d::Camera * _cameraThird
Definition: Camera3DTest.h:185
cocos2d::MoveBy * _moveAction
Definition: Camera3DTest.h:186

引用了 FirstPerson.

◆ ~CameraCullingDemo()

CameraCullingDemo::~CameraCullingDemo ( )
virtual

在文件 Camera3DTest.cpp718 行定义.

719{
720}

成员函数说明

◆ addSpriteCallback()

void CameraCullingDemo::addSpriteCallback ( cocos2d::Ref *  sender)

在文件 Camera3DTest.cpp879 行定义.

880{
881 _layer3D->removeAllChildren();
882 _objects.clear();
883 _drawAABB->clear();
884
885 ++_row;
886 for (int x = -_row; x < _row; x++)
887 {
888 for (int z = -_row; z < _row; z++)
889 {
890 auto sprite = Sprite3D::create("Sprite3DTest/orc.c3b");
891 sprite->setPosition3D(Vec3(x * 30.0f, 0.0f, z * 30.0f));
892 sprite->setRotation3D(Vec3(0.0f,180.0f,0.0f));
893 _objects.push_back(sprite);
894 _layer3D->addChild(sprite);
895 }
896 }
897
898 // set layer mask.
899 _layer3D->setCameraMask( (unsigned short) CameraFlag::USER1);
900
901 // update sprite number
902 char szText[16];
903 sprintf(szText,"%ld sprits", static_cast<long>(_layer3D->getChildrenCount()));
904 _labelSprite3DCount->setString(szText);
905}
cocos2d::Label * _labelSprite3DCount
Definition: Camera3DTest.h:180
std::vector< cocos2d::Sprite3D * > _objects
Definition: Camera3DTest.h:182

引用了 _drawAABB, _labelSprite3DCount, _layer3D, _objects , 以及 _row.

被这些函数引用 onEnter().

+ 这是这个函数的调用关系图:

◆ CREATE_FUNC()

CameraCullingDemo::CREATE_FUNC ( CameraCullingDemo  )

◆ delSpriteCallback()

void CameraCullingDemo::delSpriteCallback ( cocos2d::Ref *  sender)

在文件 Camera3DTest.cpp907 行定义.

908{
909 if (_row == 0) return;
910
911 _layer3D->removeAllChildren();
912 _objects.clear();
913
914 --_row;
915 for (int x = -_row; x < _row; x++)
916 {
917 for (int z = -_row; z < _row; z++)
918 {
919 auto sprite = Sprite3D::create("Sprite3DTest/orc.c3b");
920 sprite->setPosition3D(Vec3(x * 30.0f, 0.0f, z * 30.0f));
921 _objects.push_back(sprite);
922 _layer3D->addChild(sprite);
923 }
924 }
925
926 // set layer mask.
927 _layer3D->setCameraMask((unsigned short) CameraFlag::USER1);
928
929 // update sprite number
930 char szText[16];
931 sprintf(szText,"%ld sprits", static_cast<long>(_layer3D->getChildrenCount()));
932 _labelSprite3DCount->setString(szText);
933}

引用了 _labelSprite3DCount, _layer3D, _objects , 以及 _row.

被这些函数引用 onEnter().

+ 这是这个函数的调用关系图:

◆ drawCameraFrustum()

void CameraCullingDemo::drawCameraFrustum ( )

在文件 Camera3DTest.cpp935 行定义.

936{
937 _drawFrustum->clear();
938 auto size = Director::getInstance()->getWinSize();
939
940 Color4F color(1.f, 1.f, 0.f, 1);
941
942 // top-left
943 Vec3 tl_0,tl_1;
944 Vec3 src(0,0,0);
945 tl_0 = _cameraFirst->unproject(src);
946 src = Vec3(0,0,1);
947 tl_1 = _cameraFirst->unproject(src);
948
949 // top-right
950 Vec3 tr_0,tr_1;
951 src = Vec3(size.width,0,0);
952 tr_0 = _cameraFirst->unproject(src);
953 src = Vec3(size.width,0,1);
954 tr_1 = _cameraFirst->unproject(src);
955
956 // bottom-left
957 Vec3 bl_0,bl_1;
958 src = Vec3(0,size.height,0);
959 bl_0 = _cameraFirst->unproject(src);
960 src = Vec3(0,size.height,1);
961 bl_1 = _cameraFirst->unproject(src);
962
963 // bottom-right
964 Vec3 br_0,br_1;
965 src = Vec3(size.width,size.height,0);
966 br_0 = _cameraFirst->unproject(src);
967 src = Vec3(size.width,size.height,1);
968 br_1 = _cameraFirst->unproject(src);
969
970 _drawFrustum->drawLine(tl_0, tl_1, color);
971 _drawFrustum->drawLine(tr_0, tr_1, color);
972 _drawFrustum->drawLine(bl_0, bl_1, color);
973 _drawFrustum->drawLine(br_0, br_1, color);
974
975 _drawFrustum->drawLine(tl_0, tr_0, color);
976 _drawFrustum->drawLine(tr_0, br_0, color);
977 _drawFrustum->drawLine(br_0, bl_0, color);
978 _drawFrustum->drawLine(bl_0, tl_0, color);
979
980 _drawFrustum->drawLine(tl_1, tr_1, color);
981 _drawFrustum->drawLine(tr_1, br_1, color);
982 _drawFrustum->drawLine(br_1, bl_1, color);
983 _drawFrustum->drawLine(bl_1, tl_1, color);
984}

引用了 _cameraFirst , 以及 _drawFrustum.

被这些函数引用 update().

+ 这是这个函数的调用关系图:

◆ onEnter()

void CameraCullingDemo::onEnter ( )
overridevirtual

重载 TestCase .

在文件 Camera3DTest.cpp727 行定义.

728{
730
731 schedule(CC_SCHEDULE_SELECTOR(CameraCullingDemo::update), 0.0f);
732
733 auto s = Director::getInstance()->getWinSize();
734 /*auto listener = EventListenerTouchAllAtOnce::create();
735 listener->onTouchesBegan = CC_CALLBACK_2(Camera3DTestDemo::onTouchesBegan, this);
736 listener->onTouchesMoved = CC_CALLBACK_2(Camera3DTestDemo::onTouchesMoved, this);
737 listener->onTouchesEnded = CC_CALLBACK_2(Camera3DTestDemo::onTouchesEnded, this);
738 _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);*/
739 auto layer3D=Layer::create();
740 addChild(layer3D,0);
741 _layer3D=layer3D;
742
743 // switch camera
744 MenuItemFont::setFontName("fonts/arial.ttf");
745 MenuItemFont::setFontSize(20);
746
747 auto menuItem1 = MenuItemFont::create("Switch Camera", CC_CALLBACK_1(CameraCullingDemo::switchViewCallback,this));
748 menuItem1->setColor(Color3B(0,200,20));
749 auto menu = Menu::create(menuItem1,NULL);
750 menu->setPosition(Vec2::ZERO);
751 menuItem1->setPosition(VisibleRect::left().x + 80, VisibleRect::top().y -70);
752 addChild(menu, 1);
753
754 // + -
755 MenuItemFont::setFontSize(40);
756 auto decrease = MenuItemFont::create(" - ", CC_CALLBACK_1(CameraCullingDemo::delSpriteCallback, this));
757 decrease->setColor(Color3B(0,200,20));
758 auto increase = MenuItemFont::create(" + ", CC_CALLBACK_1(CameraCullingDemo::addSpriteCallback, this));
759 increase->setColor(Color3B(0,200,20));
760
761 menu = Menu::create(decrease, increase, nullptr);
762 menu->alignItemsHorizontally();
763 menu->setPosition(Vec2(s.width - 60, VisibleRect::top().y -70));
764 addChild(menu, 1);
765
766 TTFConfig ttfCount("fonts/Marker Felt.ttf", 30);
767 _labelSprite3DCount = Label::createWithTTF(ttfCount,"0 sprits");
768 _labelSprite3DCount->setColor(Color3B(0,200,20));
769 _labelSprite3DCount->setPosition(Vec2(s.width/2, VisibleRect::top().y -70));
770 addChild(_labelSprite3DCount);
771
772 // aabb drawNode3D
774 _drawAABB->setCameraMask((unsigned short) CameraFlag::USER1);
775 addChild(_drawAABB);
776
777 // frustum drawNode3D
779 _drawFrustum->setCameraMask((unsigned short) CameraFlag::USER1);
780 addChild(_drawFrustum);
781
782 // set camera
783 switchViewCallback(this);
784
785 // add sprite
786 addSpriteCallback(nullptr);
787}
void addSpriteCallback(cocos2d::Ref *sender)
virtual void update(float dt) override
void switchViewCallback(cocos2d::Ref *sender)
void delSpriteCallback(cocos2d::Ref *sender)
static cocos2d::DrawNode3D * create()
Definition: DrawNode3D.cpp:42
virtual void onEnter() override
Definition: BaseTest.cpp:430
static cocos2d::Vec2 top()
Definition: VisibleRect.cpp:57
static cocos2d::Vec2 left()
Definition: VisibleRect.cpp:45

引用了 _drawAABB, _drawFrustum, _labelSprite3DCount, _layer3D, addSpriteCallback(), DrawNode3D::create(), delSpriteCallback(), VisibleRect::left(), TestCase::onEnter(), switchViewCallback(), VisibleRect::top() , 以及 update().

+ 函数调用图:

◆ onExit()

void CameraCullingDemo::onExit ( )
overridevirtual

在文件 Camera3DTest.cpp789 行定义.

790{
791 CameraBaseTest::onExit();
792 if (_cameraFirst)
793 {
794 _cameraFirst = nullptr;
795 }
796 if (_cameraThird)
797 {
798 _cameraThird = nullptr;
799 }
800}

引用了 _cameraFirst , 以及 _cameraThird.

◆ reachEndCallBack()

void CameraCullingDemo::reachEndCallBack ( )

在文件 Camera3DTest.cpp823 行定义.

824{
825 _cameraFirst->stopActionByTag(100);
826 auto inverse = MoveTo::create(4.f, Vec2(-_cameraFirst->getPositionX(), 0.0f));
827 inverse->retain();
828
829 _moveAction->release();
830 _moveAction = inverse;
831 auto rot = RotateBy::create(1.f, Vec3(0.f, 180.f, 0.f));
832 auto seq = Sequence::create(rot, _moveAction, CallFunc::create(CC_CALLBACK_0(CameraCullingDemo::reachEndCallBack, this)), nullptr);
833 seq->setTag(100);
834 _cameraFirst->runAction(seq);
835}

引用了 _cameraFirst, _moveAction , 以及 reachEndCallBack().

被这些函数引用 reachEndCallBack() , 以及 switchViewCallback().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ switchViewCallback()

void CameraCullingDemo::switchViewCallback ( cocos2d::Ref *  sender)

在文件 Camera3DTest.cpp837 行定义.

838{
839 auto s = Director::getInstance()->getWinSize();
840
841 if (_cameraFirst == nullptr)
842 {
843 _cameraFirst = Camera::createPerspective(30.0f, (float)s.width/s.height, 10.0f, 200.0f);
844 _cameraFirst->setCameraFlag(CameraFlag::USER8);
845 _cameraFirst->setPosition3D(Vec3(-100.0f,0.0f,0.0f));
846 _cameraFirst->lookAt(Vec3(1000.0f,0.0f,0.0f));
847 _moveAction = MoveTo::create(4.f, Vec2(-_cameraFirst->getPositionX(), 0.0f));
848 _moveAction->retain();
849 auto seq = Sequence::create(_moveAction, CallFunc::create(CC_CALLBACK_0(CameraCullingDemo::reachEndCallBack, this)), nullptr);
850 seq->setTag(100);
851 _cameraFirst->runAction(seq);
852 addChild(_cameraFirst);
853 }
854
855 if (_cameraThird == nullptr)
856 {
857 _cameraThird = Camera::createPerspective(60, (float)s.width/s.height, 1, 1000);
858 _cameraThird->setCameraFlag(CameraFlag::USER8);
859 _cameraThird->setPosition3D(Vec3(0.0f, 130.0f, 130.0f));
860 _cameraThird->lookAt(Vec3(0,0,0));
861 addChild(_cameraThird);
862 }
863
865 {
867 _cameraThird->setCameraFlag(CameraFlag::USER1);
868 _cameraFirst->setCameraFlag(CameraFlag::USER8);
869 }
871 {
873 _cameraFirst->setCameraFlag(CameraFlag::USER1);
874 _cameraThird->setCameraFlag(CameraFlag::USER8);
875 _drawFrustum->clear();
876 }
877}

引用了 _cameraFirst, _cameraThird, _cameraType, _drawFrustum, _moveAction, FirstPerson, reachEndCallBack() , 以及 ThirdPerson.

被这些函数引用 onEnter().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ title()

std::string CameraCullingDemo::title ( ) const
overridevirtual

重载 TestCase .

在文件 Camera3DTest.cpp722 行定义.

723{
724 return "Camera Frustum Clipping";
725}

◆ update()

void CameraCullingDemo::update ( float  dt)
overridevirtual

在文件 Camera3DTest.cpp802 行定义.

803{
804 _drawAABB->clear();
805
808
809 Vector<Node*>& children = _layer3D->getChildren();
810 Vec3 corners[8];
811
812 for (const auto& iter: children)
813 {
814 const AABB& aabb = static_cast<Sprite3D*>(iter)->getAABB();
815 if (_cameraFirst->isVisibleInFrustum(&aabb))
816 {
817 aabb.getCorners(corners);
818 _drawAABB->drawCube(corners, Color4F(0, 1, 0, 1));
819 }
820 }
821}

引用了 _cameraFirst, _cameraType, _drawAABB, _layer3D, drawCameraFrustum() , 以及 ThirdPerson.

被这些函数引用 onEnter().

+ 函数调用图:
+ 这是这个函数的调用关系图:

类成员变量说明

◆ _cameraFirst

cocos2d::Camera* CameraCullingDemo::_cameraFirst
protected

在文件 Camera3DTest.h184 行定义.

被这些函数引用 drawCameraFrustum(), onExit(), reachEndCallBack(), switchViewCallback() , 以及 update().

◆ _cameraThird

cocos2d::Camera* CameraCullingDemo::_cameraThird
protected

在文件 Camera3DTest.h185 行定义.

被这些函数引用 onExit() , 以及 switchViewCallback().

◆ _cameraType

CameraType CameraCullingDemo::_cameraType
protected

在文件 Camera3DTest.h183 行定义.

被这些函数引用 switchViewCallback() , 以及 update().

◆ _drawAABB

cocos2d::DrawNode3D* CameraCullingDemo::_drawAABB
protected

在文件 Camera3DTest.h187 行定义.

被这些函数引用 addSpriteCallback(), onEnter() , 以及 update().

◆ _drawFrustum

cocos2d::DrawNode3D* CameraCullingDemo::_drawFrustum
protected

在文件 Camera3DTest.h188 行定义.

被这些函数引用 drawCameraFrustum(), onEnter() , 以及 switchViewCallback().

◆ _labelSprite3DCount

cocos2d::Label* CameraCullingDemo::_labelSprite3DCount
protected

在文件 Camera3DTest.h180 行定义.

被这些函数引用 addSpriteCallback(), delSpriteCallback() , 以及 onEnter().

◆ _layer3D

cocos2d::Layer* CameraCullingDemo::_layer3D
protected

在文件 Camera3DTest.h181 行定义.

被这些函数引用 addSpriteCallback(), delSpriteCallback(), onEnter() , 以及 update().

◆ _moveAction

cocos2d::MoveBy* CameraCullingDemo::_moveAction
protected

在文件 Camera3DTest.h186 行定义.

被这些函数引用 reachEndCallBack() , 以及 switchViewCallback().

◆ _objects

std::vector<cocos2d::Sprite3D*> CameraCullingDemo::_objects
protected

在文件 Camera3DTest.h182 行定义.

被这些函数引用 addSpriteCallback() , 以及 delSpriteCallback().

◆ _row

int CameraCullingDemo::_row
protected

在文件 Camera3DTest.h189 行定义.

被这些函数引用 addSpriteCallback() , 以及 delSpriteCallback().


该类的文档由以下文件生成: