Add Model::setLightPosition.
+ Convert some std::strings to QStrings.
This commit is contained in:
parent
5984763d43
commit
6528e872e5
@ -485,13 +485,7 @@ void QtkScene::update()
|
|||||||
// Helper lambda to set the light position used by GLSL shaders on the model.
|
// Helper lambda to set the light position used by GLSL shaders on the model.
|
||||||
// TODO: This could be a helper function on the Model class.
|
// TODO: This could be a helper function on the Model class.
|
||||||
auto setLightPosition = [](const std::string & lightName, Model * model) {
|
auto setLightPosition = [](const std::string & lightName, Model * model) {
|
||||||
if (auto light = MeshRenderer::getInstance(lightName.c_str()); light) {
|
|
||||||
QVector3D position = light->getTransform().getTranslation();
|
|
||||||
model->setUniform("uLight.position", position);
|
|
||||||
} else {
|
|
||||||
qDebug() << "[QtkScene] Failed to set light position: "
|
|
||||||
<< lightName.c_str();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
QMatrix4x4 posMatrix;
|
QMatrix4x4 posMatrix;
|
||||||
|
@ -56,8 +56,7 @@ void ToolBox::createPageProperties(const Object * object)
|
|||||||
ui->toolBox->setCurrentWidget(widget);
|
ui->toolBox->setCurrentWidget(widget);
|
||||||
|
|
||||||
auto * layout = new QFormLayout;
|
auto * layout = new QFormLayout;
|
||||||
layout->addRow(new QLabel(tr("Name:")),
|
layout->addRow(new QLabel(tr("Name:")), new QLabel(object->getName()));
|
||||||
new QLabel(object->getName().c_str()));
|
|
||||||
|
|
||||||
layout->addRow(new QLabel(tr("Type:")),
|
layout->addRow(new QLabel(tr("Type:")),
|
||||||
new QLabel(type == Object::Type::QTK_MESH ? "Mesh" : "Model"));
|
new QLabel(type == Object::Type::QTK_MESH ? "Mesh" : "Model"));
|
||||||
|
@ -43,7 +43,7 @@ void Qtk::TreeView::updateView(const Qtk::Scene * scene)
|
|||||||
mSceneName = scene->getSceneName();
|
mSceneName = scene->getSceneName();
|
||||||
auto objects = scene->getObjects();
|
auto objects = scene->getObjects();
|
||||||
for (const auto & object : objects) {
|
for (const auto & object : objects) {
|
||||||
QStringList list(QStringList(QString(object->getName().c_str())));
|
QStringList list(QStringList(QString(object->getName())));
|
||||||
ui->treeWidget->insertTopLevelItem(0, new QTreeWidgetItem(list));
|
ui->treeWidget->insertTopLevelItem(0, new QTreeWidgetItem(list));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,7 @@ MeshRenderer::MeshRenderer(const char * name, const ShapeBase & shape) :
|
|||||||
|
|
||||||
MeshRenderer::~MeshRenderer()
|
MeshRenderer::~MeshRenderer()
|
||||||
{
|
{
|
||||||
sInstances.remove(mName.c_str());
|
sInstances.remove(mName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
|
@ -56,6 +56,17 @@ void Model::flipTexture(const std::string & fileName, bool flipX, bool flipY)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Model::setLightPosition(const QString & lightName, const char * uniform)
|
||||||
|
{
|
||||||
|
if (auto light = MeshRenderer::getInstance(lightName); light) {
|
||||||
|
QVector3D position = light->getTransform().getTranslation();
|
||||||
|
setUniform(uniform, position);
|
||||||
|
} else {
|
||||||
|
qDebug() << "[QtkScene] Failed to set " << mName
|
||||||
|
<< "light position: " << lightName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Static function to access ModelManager for getting Models by name
|
// Static function to access ModelManager for getting Models by name
|
||||||
Model * Qtk::Model::getInstance(const char * name)
|
Model * Qtk::Model::getInstance(const char * name)
|
||||||
{
|
{
|
||||||
@ -102,7 +113,7 @@ void Model::loadModel(const std::string & path)
|
|||||||
sortModelMeshes();
|
sortModelMeshes();
|
||||||
|
|
||||||
// Object finished loading, insert it into ModelManager
|
// Object finished loading, insert it into ModelManager
|
||||||
mManager.insert(getName().c_str(), this);
|
mManager.insert(getName(), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Model::processNode(aiNode * node, const aiScene * scene)
|
void Model::processNode(aiNode * node, const aiScene * scene)
|
||||||
|
@ -63,7 +63,7 @@ namespace Qtk
|
|||||||
loadModel(mModelPath);
|
loadModel(mModelPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline ~Model() override { mManager.remove(getName().c_str()); }
|
inline ~Model() override { mManager.remove(getName()); }
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* Public Methods
|
* Public Methods
|
||||||
@ -113,6 +113,14 @@ namespace Qtk
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the position of a light used in GLSL unfiroms.
|
||||||
|
*
|
||||||
|
* @param lightName Object name of the light
|
||||||
|
*/
|
||||||
|
void setLightPosition(const QString & lightName,
|
||||||
|
const char * uniform = "uLight.position");
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* Accessors
|
* Accessors
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
|
@ -100,7 +100,7 @@ namespace Qtk
|
|||||||
return mShape.mVertices;
|
return mShape.mVertices;
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] inline std::string getName() const { return mName; }
|
[[nodiscard]] inline QString getName() const { return mName; }
|
||||||
|
|
||||||
[[nodiscard]] inline const Type & getType() const { return mType; }
|
[[nodiscard]] inline const Type & getType() const { return mType; }
|
||||||
|
|
||||||
@ -143,7 +143,7 @@ namespace Qtk
|
|||||||
* Setters
|
* Setters
|
||||||
************************************************************************/
|
************************************************************************/
|
||||||
|
|
||||||
virtual inline void setName(const std::string & name) { mName = name; }
|
virtual inline void setName(const QString & name) { mName = name; }
|
||||||
|
|
||||||
virtual inline void setColors(const Colors & value)
|
virtual inline void setColors(const Colors & value)
|
||||||
{
|
{
|
||||||
@ -255,7 +255,7 @@ namespace Qtk
|
|||||||
Transform3D mTransform;
|
Transform3D mTransform;
|
||||||
Shape mShape;
|
Shape mShape;
|
||||||
Texture mTexture;
|
Texture mTexture;
|
||||||
std::string mName;
|
QString mName;
|
||||||
bool mBound;
|
bool mBound;
|
||||||
Type mType = QTK_OBJECT;
|
Type mType = QTK_OBJECT;
|
||||||
};
|
};
|
||||||
|
@ -103,7 +103,7 @@ std::vector<Object *> Scene::getObjects() const
|
|||||||
Object * Scene::getObject(const QString & name) const
|
Object * Scene::getObject(const QString & name) const
|
||||||
{
|
{
|
||||||
for (const auto & object : getObjects()) {
|
for (const auto & object : getObjects()) {
|
||||||
if (object->getName() == name.toStdString()) {
|
if (object->getName() == name) {
|
||||||
return object;
|
return object;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -121,6 +121,6 @@ void Scene::initSceneObjectName(Object * object)
|
|||||||
// If the object name exists make it unique.
|
// If the object name exists make it unique.
|
||||||
auto count = ++mObjectCount[object->getName()];
|
auto count = ++mObjectCount[object->getName()];
|
||||||
if (count > 1) {
|
if (count > 1) {
|
||||||
object->setName(object->getName() + " (" + std::to_string(count) + ")");
|
object->setName(object->getName() + " (" + QString::number(count) + ")");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -120,9 +120,7 @@ namespace Qtk
|
|||||||
*/
|
*/
|
||||||
[[nodiscard]] uint64_t getObjectCount(const QString & name)
|
[[nodiscard]] uint64_t getObjectCount(const QString & name)
|
||||||
{
|
{
|
||||||
return mObjectCount.count(name.toStdString())
|
return mObjectCount.count(name) ? mObjectCount[name] : 0;
|
||||||
? mObjectCount[name.toStdString()]
|
|
||||||
: 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -248,7 +246,7 @@ namespace Qtk
|
|||||||
/* MeshRenderers used simple geometry. */
|
/* MeshRenderers used simple geometry. */
|
||||||
std::vector<MeshRenderer *> mMeshes {};
|
std::vector<MeshRenderer *> mMeshes {};
|
||||||
/* Track count of objects with same initial name. */
|
/* Track count of objects with same initial name. */
|
||||||
std::unordered_map<std::string, uint64_t> mObjectCount;
|
std::unordered_map<QString, uint64_t> mObjectCount;
|
||||||
};
|
};
|
||||||
} // namespace Qtk
|
} // namespace Qtk
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user