Динамическое рисование изображений в Cinder (Windows)
Я использовал Cinder около нескольких недель, и у меня есть некоторые проблемы. Я использую метод "перетаскивания" в моей программе:
void TutorialApp::fileDrop(FileDropEvent drop){ /// drop are images
for(size_t i=0; i<drop.getNumFiles();++i){
Vertex imageVertex = Vertex((Vec2i(drop.getPos().x, drop.getPos().y+200)));
imageVertex.path = drop.getFiles()[i];
и следующий мой шаг - нарисовать вершину с ассоциированным изображением. Вопрос в том, как добавить ресурсы в этом случае, или, может быть, есть более простое решение? Поблагодарить
1 ответ
Решение
Прямо к делу: Прежде всего, вы хотите сохранить изображения (например, gl::Texture) в ваших объектах, которые вы хотите нарисовать. Итак, в вашем классе Vertex добавьте этот gl::Texture в качестве члена. И затем я предлагаю использовать эту функцию для загрузки изображения и редактирования конструктора, чтобы взять gl::Texture в качестве параметра.
Таким образом, вы получите что-то вроде этого:
class testVertex
{
public:
testVertex(Vec2i _pos, gl::Texture image);
void draw(){
gl::draw(texture, pos);
}
private:
gl::Texture texture;
Vec2i pos;
};
///constructor
testVertex::testVertex(Vec2i _pos, gl::Texture image)
{
pos = _pos;
texture = image;
}
class BasicApp : public AppNative {
public:
void setup();
void mouseMove( MouseEvent event );
void mouseUp( MouseEvent event );
void keyUp(KeyEvent event);
void fileDrop(FileDropEvent event);
void update();
void draw();
//// create container for testVertex
vector <testVertex> mVertices;
}
/// To load images via drop...
void BasicApp::fileDrop(FileDropEvent event){
gl::Texture fileTexture = loadImage(event.getFile(0));
mVertices.push_back(testVertex(Vec2i(event.getX(), event.getY()), fileTexture));
}
/// To draw images...
void BasicApp::draw(){
for (int i = 0; i < mVertices.size(); i++)
{
mVertices[i].draw();
}
}
///