[英]How to make custome shape deformation?
我有一個 sf::RectangleShape 2D 立方體,並且想要創建功能來為該立方體繪制“像 3D”的邊。
這是我的解決方案:
//X. Y
//gonyometric latters for clearity
sf::Vector2f A(300, 500);
sf::Vector2f B(500, 500);
sf::Vector2f E(300, 300);
sf::Vector2f F(500, 300);
sf::RectangleShape cube;
cube.setPosition(300, 300);
cube.setSize(sf::Vector2f(200,200));
cube.setTexture(&brick_texture);
// convex shape
sf::ConvexShape rightSide;
rightSide.setPointCount(4);
rightSide.setPosition(B);
rightSide.rotate(-45);
rightSide.setPoint(0 ,sf::Vector2f(0, 0));
sf::Vector2f C(100,0);
rightSide.setPoint(1, C);
sf::Vector2f D(100+(200 * getSin(45)), (0-200* getCos(45)));
rightSide.setPoint(2, D);
rightSide.setPoint(3, sf::Vector2f(0 + (200 * getSin(45)), (0 - 200 * getCos(45))));
rightSide.setTexture(&brick_texture);
我不知道如何將紋理形狀編輯為右側形狀以使其真正像 3D。
解決方案:
我使用 sf::Transform 的自定義矩陣來管理形狀變形。 並用矩形形狀代替凸。
最快和最簡單的方法是使用默認參數創建整個矩陣並更改您想要的值。 其他更復雜的解決方案是從您的形狀中獲取矩陣,將其轉換為 4x4 循環內的浮點數組(在這里您可以使用可愛的開關編輯其元素)並將該數組的部分正確綁定到新的 3x3 矩陣。
這是結果:
我認為您可以通過將自定義的sf::Transform
傳遞給您的draw
調用來做到這一點,如此處所述。
對於正交投影,我認為您只需要剪切變換。 但是, sf::Transform
不支持開箱即用的剪切,因此您必須自己構建矩陣。 (請注意,您不必構建整個轉換矩陣,只需構建剪切部分即可。然后您可以使用customTransform * sprite.getTransform()
類的東西。)
或者,您可以只創建看起來像 3D 的精靈,然后以正確的順序將它們分層以構建您的場景。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.