TEST CORRECT....WHY?

This commit is contained in:
hyzboy 2024-08-29 13:07:02 +08:00
parent a9526ce956
commit 8245d83309
4 changed files with 63 additions and 61 deletions

View File

@ -82,7 +82,9 @@ bool InitGizmoMoveStaticMesh()
} }
{ {
SceneNode *root_node=new SceneNode(scale(0.5f),sphere); SceneNode *root_node=new SceneNode();
root_node->CreateSubNode(sphere);
{ {
Transform tm; Transform tm;

View File

@ -42,7 +42,7 @@ bool InitGizmoRotateStaticMesh()
{ {
Transform tm; Transform tm;
tm.SetScale(5.0f); tm.SetScale(10.0f);
root_node->CreateSubNode(tm,torus[0]); root_node->CreateSubNode(tm,torus[0]);

View File

@ -6,58 +6,58 @@ using namespace hgl;
using namespace hgl::graph; using namespace hgl::graph;
const Vector3f GizmoPosition(0,0,0); const Vector3f GizmoPosition(0,0,0);
//
/** ///**
* //* 一种永远转向正面的场景节点
*/ //*/
class BillboardSceneNode:public SceneNode //class BillboardSceneNode:public SceneNode
{ //{
CameraInfo *camera_info=nullptr; // CameraInfo *camera_info=nullptr;
bool face_to_camera=false; // bool face_to_camera=false;
//
ViewportInfo *viewport_info=nullptr; // ViewportInfo *viewport_info=nullptr;
float fixed_scale=1.0; // float fixed_scale=1.0;
//
public: //public:
//
using SceneNode::SceneNode; // using SceneNode::SceneNode;
virtual ~BillboardSceneNode()=default; // virtual ~BillboardSceneNode()=default;
//
virtual void SetCameraInfo (CameraInfo * ci ){camera_info =ci;} // virtual void SetCameraInfo (CameraInfo * ci ){camera_info =ci;}
virtual void SetViewportInfo(ViewportInfo * vi ){viewport_info =vi;} // virtual void SetViewportInfo(ViewportInfo * vi ){viewport_info =vi;}
//
virtual void SetFaceToCamera(bool ftc ){face_to_camera=ftc;} // virtual void SetFaceToCamera(bool ftc ){face_to_camera=ftc;}
virtual void SetFixedScale (const float size){fixed_scale =size;} // virtual void SetFixedScale (const float size){fixed_scale =size;}
//
virtual bool RefreshTransform(const Transform &tf=IdentityTransform) override // virtual bool RefreshTransform(const Transform &tf=IdentityTransform) override
{ // {
if(!camera_info) // if(!camera_info)
{ // {
return SceneNode::RefreshTransform(tf); // return SceneNode::RefreshTransform(tf);
} // }
//
if(face_to_camera) // if(face_to_camera)
{ // {
LocalTransform.SetRotation(CalculateFacingRotationQuat(GetWorldPosition(),camera_info->view,AxisVector::X)); // LocalTransform.SetRotation(CalculateFacingRotationQuat(GetWorldPosition(),camera_info->view,AxisVector::X));
} // }
//
if(viewport_info) // if(viewport_info)
{ // {
const float screen_height=viewport_info->GetViewportHeight(); // const float screen_height=viewport_info->GetViewportHeight();
//
const Vector4f pos=camera_info->Project(GetWorldPosition()); // const Vector4f pos=camera_info->Project(GetWorldPosition());
//
LocalTransform.SetScale(pos.w*fixed_scale/screen_height); // LocalTransform.SetScale(pos.w*fixed_scale/screen_height);
} // }
//
return SceneNode::RefreshTransform(tf); // return SceneNode::RefreshTransform(tf);
} // }
};//class BillboardSceneNode:public SceneNode //};//class BillboardSceneNode:public SceneNode
class TestApp:public SceneAppFramework class TestApp:public SceneAppFramework
{ {
SceneNode root; SceneNode root;
BillboardSceneNode *rotate_white_torus=nullptr; //BillboardSceneNode *rotate_white_torus=nullptr;
StaticMesh *sm_move=nullptr; StaticMesh *sm_move=nullptr;
StaticMesh *sm_rotate=nullptr; StaticMesh *sm_rotate=nullptr;
@ -89,20 +89,20 @@ private:
root.CreateSubNode(sm_move->GetScene()); root.CreateSubNode(sm_move->GetScene());
root.CreateSubNode(sm_rotate->GetScene()); root.CreateSubNode(sm_rotate->GetScene());
{ //{
Transform tm; // Transform tm;
tm.SetScale(7.5); // tm.SetScale(7.5);
rotate_white_torus=new BillboardSceneNode(tm,face_torus); // rotate_white_torus=new BillboardSceneNode(tm,face_torus);
rotate_white_torus->SetCameraInfo(ci); // rotate_white_torus->SetCameraInfo(ci);
rotate_white_torus->SetFaceToCamera(true); // rotate_white_torus->SetFaceToCamera(true);
root.AddSubNode(rotate_white_torus); // root.AddSubNode(rotate_white_torus);
} //}
root.RefreshTransform(); root.RefreshMatrix();
render_list->SetCamera(ci); render_list->SetCamera(ci);
render_list->Expend(&root); render_list->Expend(&root);
} }
@ -149,7 +149,7 @@ public:
// root.SetLocalTransform(tm); // root.SetLocalTransform(tm);
//} //}
root.RefreshTransform(); root.RefreshMatrix();
render_list->UpdateLocalToWorld(); render_list->UpdateLocalToWorld();
SceneAppFramework::BuildCommandBuffer(index); SceneAppFramework::BuildCommandBuffer(index);

2
res

@ -1 +1 @@
Subproject commit e1a36d78f0eead5f6bb65493432c4690637b991d Subproject commit 475d8ad43ceee084cd24f5d0bed59de9f6aa36fd