Как превратить три квадратных спрайта в куб?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как превратить три квадратных спрайта в куб?

Сообщение Anonymous »

Я хотел бы добиться этого эффекта, объединив три спрайта (два из которых преобразуются путем сдвига и масштабирования):
[img]https:/ /i.sstatic.net/Cb1eNn8r.png[/img]

sf::Transform createShearTransform(float shearX, float shearY) {
sf::Transform transform;
transform = sf::Transform(
1, shearX, 0.f,
shearY, 1, 0.f,
0.f, 0.f, 1.f
);
return transform;
}

К сожалению, у меня с этим проблема, и я не знаю, как мне это создать, а затем плавно переместить весь куб.
Некоторые код:
#include

sf::Transform createShearTransform(float shearX, float shearY) {

sf::Transform transform;
transform = sf::Transform(
1, shearX, 0.f,
shearY, 1, 0.f,
0.f, 0.f, 1.f
);
return transform;
}

int main() {
sf::Texture texture; texture.loadFromFile("tex.png");
sf::Sprite front(texture);
sf::Sprite top(texture);
sf::Sprite right(texture);

float offset = 64 + 32;
float size = 64;

top .setPosition({ offset , offset });
front.setPosition({ offset , offset + size });
right.setPosition({ offset + size, offset + size });

sf::Transform shear1 = createShearTransform(-1, 0);
sf::Transform shear2 = createShearTransform(0, -1);
sf::RenderWindow window( sf::VideoMode(800, 800), "" );
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed)
window.close();
}

auto mousepos = sf::Vector2f(sf::Mouse::getPosition(window));
front.setPosition(mousepos);
right.setPosition(mousepos);
top.setPosition(mousepos);

window.clear();
window.draw(front);
sf::Transform f1;
f1.translate({ 64, -128 });
sf::Transform s1;
s1.scale({ 1, 0.75 });
sf::Transform s2;
s2.scale({ 0.75 , 1 });
sf::Transform f2;
f2.translate({ 16, -60 });
window.draw(top, f1 * top.getTransform() * shear1 * s1);
window.draw(right, f2 * right.getTransform() * shear2 * s2);
window.display();
}
}


Подробнее здесь: https://stackoverflow.com/questions/785 ... nto-a-cube
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»