Fission FSN
Loading...
Searching...
No Matches
fsCNative3dScene.h
Go to the documentation of this file.
1/********************************************************************
2 *
3 * File: fsCNative3dScene.h
4 *
5 * Purpose: cocos2d-x implementation of 3d sprite.
6 *
7 * left hand rule, thumb up, index right, middle towards
8 * x - right
9 * y - up
10 * z - out
11 *
12 *********************************************************************/
13
14#ifndef fsCNative3dScenehdr
15#define fsCNative3dScenehdr
16
17#include <fsCore/fsBaseTypes.h>
18
19#if defined fs3d
20
21#include "fsINative.h"
22
23#include <fs3d/fsI3dScene.h>
24
25#include <2d/CCCamera.h>
26#include <3d/CCRay.h>
27
28namespace cocos2d { class Scene; }
29namespace cocos2d { class Sprite3D; }
30
31class fsC3dCamera;
32class fsI3dLight;
33class fsC3dSprite;
34class fsC3dLight;
35struct fsPoint;
36class fsC3dModelData;
37
38
39class fsCNative3dScene : public fsINative
40{
41 friend class fsCNative3dSceneRenderData;
42
43public:
44
45 void pick(const fsPoint& pScreenPos, fsI3dScene::fsTPickCallback pPickCallback);
46 void spriteAdd(fsC3dSprite* const);
48 void ligthtAdd(fsI3dLight* const pLight);
49 void ligthtRemove(fsI3dLight* const pLight);
50 void cameraSet(fsC3dCamera* const pCamera);
51
53
54protected:
55
56 virtual void renderDo() override;
57 virtual void matrixApplyDo(const fsAffineMtx2d& pRenderMatrix) override;
58
60
61private:
62
63 enum class eSCENE_FLAG
64 {
65 // cocos2d-x uses 1 for the default camera so we start above that
66 WORLD_MODELS = static_cast<fsS32>(cocos2d::CameraFlag::USER1),
67 DYNAMIC_MODELS = WORLD_MODELS << 1,
68
69 ALL_MODELS = WORLD_MODELS | DYNAMIC_MODELS,
70 };
71
72 void nodeProcess(cocos2d::Node* const pNode);
73 void nodeProcessRecursive(cocos2d::Node* const pNode);
74
75 void calculateRayByLocationInView(cocos2d::Ray* ray, const cocos2d::Vec2& location);
76 void unproject(const cocos2d::Mat4& viewProjection, const cocos2d::Size* viewport, cocos2d::Vec3* src, cocos2d::Vec3* dst);
77
78 fsBool worldModelGet(cocos2d::Sprite3D* pModel) const;
79 fsBool worldModelGet(cocos2d::Node* pNode) const;
80 fsF32 fovCalculate(fsF32 pFOV) const;
81 void cameraCreate(fsF32 pFOV, fsF32 pNearClip, fsF32 pFarClip);
82
83 virtual cocos2d::Node* implGet() const override;
84
85 cocos2d::Mat4 mRenderMatrix;
86 cocos2d::Mat4 mDisplayMatrix;
87 cocos2d::Scene* mScene;
88 cocos2d::Camera* mWorldCamera;
89 cocos2d::Node* mSceneDisplayRoot;
90 cocos2d::Node* mSceneRoot;
91 fsBool mExplicitCameraSet;
92
93 std::vector<std::shared_ptr<fsI3dLight>> mLights;
94
95 std::vector<fsC3dSprite*> mDynamicModels;
96};
97
98#endif
99
100#endif
Definition fsAffineMtx2d.h:27
Definition fsC3dCamera.h:18
Definition fsC3dLight.h:25
Definition fsC3dModelData.h:27
Definition fsC3dSprite.h:29
Definition fsCNative3dScene.h:46
void ligthtAdd(fsI3dLight *const pLight)
friend class fsCNative3dSceneRenderData
Definition fsCNative3dScene.h:47
void ligthtRemove(fsI3dLight *const pLight)
virtual void matrixApplyDo(const fsAffineMtx2d &pRenderMatrix) override
void spriteRemove(fsC3dSprite *const)
void cameraSet(fsC3dCamera *const pCamera)
virtual ~fsCNative3dScene()
void pick(const fsPoint &pScreenPos, fsI3dScene::fsTPickCallback pPickCallback)
void spriteAdd(fsC3dSprite *const)
virtual void renderDo() override
Definition fsI3dLight.h:23
std::function< void(fsC3dSprite *sprt3d)> fsTPickCallback
Definition fsI3dScene.h:26
Definition fsINative.h:31
fsF32 mRenderMatrix[16]
Definition fsINative.h:68
bool fsBool
Definition fsBaseTypes.h:26
int fsS32
Definition fsBaseTypes.h:20
float fsF32
Definition fsBaseTypes.h:28
Definition fsC3dLight.h:19
Definition fsPoint.h:17