Simplify construction of the activity animation.
This commit is contained in:
@@ -4,32 +4,25 @@
|
|||||||
#include <GL/gl.h>
|
#include <GL/gl.h>
|
||||||
#include "Range.hpp"
|
#include "Range.hpp"
|
||||||
#include "ActivityAnimation.hpp"
|
#include "ActivityAnimation.hpp"
|
||||||
#include "utils.hpp"
|
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
using namespace fmri;
|
using namespace fmri;
|
||||||
|
|
||||||
static inline float correct_timescale(float original)
|
ActivityAnimation::ActivityAnimation(const vector<pair<DType, pair<size_t, size_t>>> &interactions,
|
||||||
|
const float *aPositions, const float *bPositions, float xDist) :
|
||||||
|
bufferLength(3 * interactions.size())
|
||||||
{
|
{
|
||||||
float ignore;
|
startingPos.reserve(bufferLength);
|
||||||
return std::modf(original, &ignore);
|
delta.reserve(bufferLength);
|
||||||
}
|
|
||||||
|
|
||||||
ActivityAnimation::ActivityAnimation(std::size_t count, const float *aPos, const float *bPos, const float xDist) :
|
for (auto &entry : interactions) {
|
||||||
bufferLength(3 * count),
|
auto *aPos = &aPositions[entry.second.first];
|
||||||
startingPos(bufferLength),
|
auto *bPos = &bPositions[entry.second.second];
|
||||||
delta(bufferLength),
|
|
||||||
offset(bufferLength)
|
|
||||||
{
|
|
||||||
memcpy(startingPos.data(), aPos, sizeof(aPos[0]) * bufferLength);
|
|
||||||
for (auto i : Range(bufferLength)) {
|
|
||||||
delta[i] = bPos[i] - aPos[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
auto& random = rng();
|
for (auto i : Range(3)) {
|
||||||
std::uniform_real_distribution<float> rd;
|
startingPos.emplace_back(aPos[i]);
|
||||||
for (auto i : Range(count)) {
|
delta.emplace_back(bPos[i] - aPos[i] + (i % 3 ? 0 : xDist));
|
||||||
offset[i] = rd(random);
|
}
|
||||||
delta[3 * i] += xDist;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
#include <memory>
|
#include <memory>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include "Animation.hpp"
|
#include "Animation.hpp"
|
||||||
|
#include "utils.hpp"
|
||||||
|
|
||||||
namespace fmri
|
namespace fmri
|
||||||
{
|
{
|
||||||
@@ -11,13 +12,13 @@ namespace fmri
|
|||||||
: public Animation
|
: public Animation
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ActivityAnimation(std::size_t count, const float* aPos, const float* bPos, const float xDist);
|
ActivityAnimation(const std::vector<std::pair<DType, std::pair<std::size_t, std::size_t>>> &interactions,
|
||||||
|
const float *aPositions, const float *bPositions, float xDist);
|
||||||
void draw(float timeScale) override;
|
void draw(float timeScale) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::size_t bufferLength;
|
std::size_t bufferLength;
|
||||||
std::vector<float> startingPos;
|
std::vector<float> startingPos;
|
||||||
std::vector<float> delta;
|
std::vector<float> delta;
|
||||||
std::vector<float> offset;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -72,16 +72,6 @@ Animation * fmri::getActivityAnimation(const fmri::LayerData &prevState, const f
|
|||||||
}
|
}
|
||||||
|
|
||||||
const auto entries = computeActivityStrengths(prevState, layer);
|
const auto entries = computeActivityStrengths(prevState, layer);
|
||||||
const auto bufferSize = 3 * entries.size();
|
|
||||||
|
|
||||||
unique_ptr<float[]> startingPositions(new float[bufferSize]);
|
return new ActivityAnimation(entries, prevPositions.data(), curPositions.data(), 2);
|
||||||
unique_ptr<float[]> endingPositions(new float[bufferSize]);
|
|
||||||
|
|
||||||
LOG(INFO) << "Creating position buffers for interaction in " << layer.name() << endl;
|
|
||||||
for (auto i : Range(entries.size())) {
|
|
||||||
memcpy(startingPositions.get() + 3 * i, prevPositions.data() + 3 * entries[i].second.first, 3 * sizeof(float));
|
|
||||||
memcpy(endingPositions.get() + 3 * i, curPositions.data() + 3 * entries[i].second.second, 3 * sizeof(float));
|
|
||||||
}
|
|
||||||
|
|
||||||
return new ActivityAnimation(entries.size(), startingPositions.get(), endingPositions.get(), 2.0);
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user