簡體   English   中英

圓的VertexArray

[英]VertexArray of circles

我想知道是否有可能在SFML中創建圈子的VertexArray。 我一直在尋找答案,但是沒有找到任何可以幫助的東西。 而且,我不了解SFML文檔中可以創建自己的實體的部分,我認為這也許實際上是我想要做的。

編輯:我想這樣做,因為我必須畫很多圓。

謝謝你幫我

雖然@nvoigt答案是正確的,但我發現在實現中使用向量很有用(有關更多詳細信息,請參見http://en.cppreference.com/w/cpp/container/vector ,查找“ c ++容器”,有幾種類型的容器以優化讀取/寫入時間)。

對於上述用例,您可能不需要它,但是在以后的實現中,可能會需要它,並考慮將其用於良好的編碼實踐。

#include <SFML/Graphics.hpp>
#include <vector>

int main()
{
    // create the window
    sf::RenderWindow window(sf::VideoMode(800, 600), "My window");


    // run the program as long as the window is open
    while (window.isOpen())
    {
        // check all the window's events that were triggered since the last iteration of the loop
        sf::Event event;
        while (window.pollEvent(event))
        {
            // "close requested" event: we close the window
            if (event.type == sf::Event::Closed)
                window.close();
        }

        // clear the window with black color
        window.clear(sf::Color::Black);

        // initialize myvector
        std::vector<sf::CircleShape> myvector;

        // add 10 circles
        for (int i = 0; i < 10; i++)
        {
          sf::CircleShape shape(50);
          // draw a circle every 100 pixels
          shape.setPosition(i * 100, 25);
          shape.setFillColor(sf::Color(100, 250, 50));

          // copy shape to vector
          myvector.push_back(shape);
        }

        // iterate through vector
        for (std::vector<sf::CircleShape>::iterator it = myvector.begin() ; it != myvector.end(); ++it)
        {
          // draw all circles
          window.draw(*it);
        }
        window.display();
    }

    return 0;
}

sf::CircleShape 已經在使用一個頂點數組(由於繼承自sf::Shape )。 您無需執行任何其他操作。

如果您有很多圈子,請先嘗試使用sf::CircleShape並且僅在有可以用來衡量解決方案的實際用例時進行優化。

除了前面的兩個答案,我將嘗試解釋為什么沒有默認的VertexArray圓。

從計算機圖形學(在我們的情況下為SFML)的思想來看,頂點是最小的繪圖圖元,具有最少的功能。 頂點的經典示例是點,線,三角,瓜德和多邊形。 前四個對於您的視頻卡來說非常容易存儲和繪制。 多邊形可以是任何幾何圖形,但處理起來會較重,這就是為什么例如在3D grapichs中多邊形是三角形的原因。

圈子有點復雜。 例如,視頻卡不知道她需要多少點才能畫出足夠平滑的圓。 因此,正如@nvoigt回答的那樣,存在一個sf :: CircleShape,它是根據更原始的頂點構建的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM