Примитивы рисования SFML от VertexArray

Как нарисовать примитив по моему выбору из созданного VertexArray? В приведенном ниже примере я добавляю две вершины в массив ‘vertices’ и пытаюсь нарисовать его с помощью ‘window.draw (vertices, 2, sf :: Lines)’, но это дает мне ошибку. Я знаю, что могу просто создать строковый объект с помощью ‘sf :: Vertex foo [] = {..}’, но я хочу иметь возможность добавлять вершины в массив вместо инициализации всех сразу.

#include <SFML/Window.hpp>
#include <SFML/OpenGL.hpp>
#include <SFML/Graphics.hpp>
#include <iostream>

int main()
{
// Create the main window
sf::RenderWindow window(sf::VideoMode(640, 480), "SFML");
sf::Clock clock;

sf::VertexArray vertices;
sf::Vertex vertex;

vertex.position = sf::Vector2f(0, 0);
vertex.color = sf::Color(100, 0, 200);
vertices.append(vertex);
vertex.position = sf::Vector2f(100, 100);
vertex.color = sf::Color(100, 0, 200);
vertices.append(vertex);

// Start the game loop
bool running = true;
while (running)
{
// Process events
sf::Event event;
while (window.pollEvent(event))
{
// Close window: exit
if (event.type == sf::Event::Closed)
running = false;
}

window.clear(sf::Color::Black);
window.draw(vertices,2 ,sf::Lines);

window.display();
}

return 0;
}

0

Решение

Ты можешь позвонить vertices.setPrimitiveType(sf::Lines); после объявления sf::VertexArray vertices;затем нарисуйте его: window.draw(vertices);

Или вы можете установить его тип примитива в конструкторе вместе с количеством точек, затем вы можете получить доступ к этим точкам с помощью operator[]:

sf::VertexArray line(sf::Lines, 2); //or sf::LineStrip
line[0].position = sf::Vector2f(0, 0);
line[0].color = sf::Color(100, 0, 200);
line[1].position = sf::Vector2f(100, 100);
line[1].color = sf::Color(100, 0, 200);
...
window.draw(line);

Ссылка: enum sf :: PrimitiveType, научная фантастика :: VertexArray, Учебник по VertexArray

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]