Works, but with memory leaks

This commit is contained in:
Dynamitos
2022-03-26 12:55:04 +01:00
parent cd28e433cc
commit 9130a7961f
23 changed files with 720 additions and 308 deletions
+1
View File
@@ -14,6 +14,7 @@ CameraActor::CameraActor()
cameraComponent->aspectRatio = 1.777778f;
cameraComponent->setParent(sceneComponent);
cameraComponent->setOwner(this);
sceneComponent->addChildComponent(cameraComponent);
}
CameraActor::~CameraActor()
+14 -10
View File
@@ -13,8 +13,8 @@ CameraComponent::CameraComponent()
, projectionMatrix(Matrix4())
, viewMatrix(Matrix4())
{
rotationX = 0;
rotationY = 0;
yaw = 0;
pitch = 0;
setRelativeLocation(Vector(0, 10, -50));
}
@@ -22,12 +22,16 @@ CameraComponent::~CameraComponent()
{
}
void CameraComponent::mouseMove(float deltaX, float deltaY)
void CameraComponent::mouseMove(float deltaYaw, float deltaPitch)
{
rotationX -= deltaX / 1000.f;
rotationY += deltaY / 1000.f;
//std::cout << "X:" << rotationX << " Y: " << rotationY << std::endl;
setRelativeRotation(Vector(rotationY, rotationX, 0));
yaw -= deltaYaw / 500.f;
pitch += deltaPitch / 500.f;
//std::cout << "Yaw: " << yaw << " Pitch: " << pitch << std::endl;
Vector cameraDirection = glm::normalize(Vector(cos(yaw) * cos(pitch), sin(pitch), sin(yaw) * cos(pitch)));
Vector xyz = glm::cross(cameraDirection, Vector(0, 0, 1));
Quaternion result = Quaternion(glm::dot(cameraDirection, Vector(0, 0, 1)) + 1, xyz.x, xyz.y, xyz.z);
//std::cout << "Result " << Vector(0, 0, 1) * glm::normalize(result) << " cameraDirection: " << cameraDirection << std::endl;
setRelativeRotation(result);
bNeedsViewBuild = true;
}
@@ -51,9 +55,9 @@ void CameraComponent::moveY(float amount)
void CameraComponent::buildViewMatrix()
{
Vector eyePos = getTransform().getPosition();
Vector lookAt = eyePos + getTransform().getForward();
std::cout << "Eye: " << eyePos << " lookAt: " << lookAt << std::endl;
Vector eyePos = getAbsoluteTransform().getPosition();
Vector lookAt = eyePos + glm::normalize(Vector(cos(yaw) * cos(pitch), sin(pitch), sin(yaw) * cos(pitch)));
//std::cout << "Eye: " << eyePos << " lookAt: " << lookAt << std::endl;
viewMatrix = glm::lookAt(eyePos, lookAt, Vector(0, 1, 0));
bNeedsViewBuild = false;
@@ -45,8 +45,8 @@ private:
//Transforms relative to actor
Matrix4 viewMatrix;
Matrix4 projectionMatrix;
float rotationX;
float rotationY;
float yaw;
float pitch;
};
DEFINE_REF(CameraComponent)
} // namespace Seele
+23 -4
View File
@@ -128,18 +128,22 @@ void Component::notifySceneAttach(PScene scene)
void Component::setRelativeLocation(Vector location)
{
transform = Transform(location, transform.getRotation(), transform.getScale());
propagateTransformUpdate();
}
void Component::setRelativeRotation(Vector rotation)
{
transform = Transform(transform.getPosition(), Quaternion(rotation), transform.getScale());
propagateTransformUpdate();
}
void Component::setRelativeRotation(Quaternion rotation)
{
transform = Transform(transform.getPosition(), rotation, transform.getScale());
propagateTransformUpdate();
}
void Component::setRelativeScale(Vector scale)
{
transform = Transform(transform.getPosition(), transform.getRotation(), scale);
propagateTransformUpdate();
}
//void Component::addAbsoluteTranslation(Vector translation)
@@ -161,14 +165,17 @@ void Component::setRelativeScale(Vector scale)
void Component::addRelativeLocation(Vector translation)
{
transform = Transform(transform.getPosition() + translation, transform.getRotation(), transform.getScale());
propagateTransformUpdate();
}
void Component::addRelativeRotation(Vector rotation)
{
transform = Transform(transform.getPosition(), transform.getRotation() + Quaternion(rotation), transform.getScale());
transform = Transform(transform.getPosition(), transform.getRotation() * Quaternion(rotation), transform.getScale());
propagateTransformUpdate();
}
void Component::addRelativeRotation(Quaternion rotation)
{
transform = Transform(transform.getPosition(), transform.getRotation(), transform.getScale());
transform = Transform(transform.getPosition(), transform.getRotation() * rotation, transform.getScale());
propagateTransformUpdate();
}
Transform Component::getTransform() const
@@ -177,10 +184,22 @@ Transform Component::getTransform() const
}
Transform Component::getAbsoluteTransform() const
{
return absoluteTransform;
}
void Component::propagateTransformUpdate()
{
if(parent != nullptr)
{
return transform + parent->getAbsoluteTransform();
absoluteTransform = transform + parent->getAbsoluteTransform();
}
else
{
absoluteTransform = transform;
}
for(auto child : children)
{
child->propagateTransformUpdate();
}
return transform;
}
+2
View File
@@ -74,7 +74,9 @@ private:
}
return nullptr;
}
void propagateTransformUpdate();
Transform transform;
Transform absoluteTransform;
PScene owningScene;
PActor owner;
PComponent parent;