В SFML есть несколько подходов для рисования одного пикселя на экране. Первый - это то, что вы пытаетесь сделать с sf::VertexArray
.
На мой взгляд, более простым и интуитивно понятным является подход с sf::RectangleShape
, где вы можете создать прямоугольник размером 1x1, и этот я собираюсь представить вам.
Во-первых, мы можем добавить полезную функцию, которая создаст «пиксель» в заданной позиции и цвете.
sf::RectangleShape addPixel(sf::Vector2f position, sf::Uint8 red, sf::Uint8 green, sf::Uint8 blue)
{
sf::RectangleShape pixel;
pixel.setSize({ 1.f, 1.f });
pixel.setFillColor({ red, green, blue });
pixel.setPosition(position);
return pixel;
}
Эта функция вернет sf::RectangleShape
с цветом, созданным из значений RGB, переданных в качестве аргументов этой функции.
Но вы должны хранить эти пиксели где-то.
Итак, давайте создадим окно и некоторый контейнер для хранения наших пикселей, например std::vector<sf::RectangleShape>
и добавить к нему несколько пикселей:
sf::RenderWindow window(sf::VideoMode(800, 600), "SFML window");
std::vector<sf::RectangleShape> pixels;
pixels.push_back(addPixel({ 100, 100 }, 255, 0, 0));
pixels.push_back(addPixel({ 101, 100 }, 255, 255, 0));
pixels.push_back(addPixel({ 102, 100 }, 0, 0, 0));
pixels.push_back(addPixel({ 103, 100 }, 255, 0, 255));
Наконец, вы создаете основной цикл, в котором вы рисуете все пиксели в каждой итерации.
while (window.isOpen())
{
window.clear();
for (const auto& pixel : pixels)
{
window.draw(pixel);
}
window.display();
}
Убедитесь, что вы добавили больше пикселей, прежде чем пытаться отобразить его. На экране с высоким разрешением отдельные пиксели могут быть невидимыми.
РЕДАКТИРОВАТЬ: Ваш код также работает, но вы забыли добавить sf::Vertex
к sf::VertexArray
.
Все, что вам нужно сделать, это:
sf::Vertex vertex1;
vertex1.position = sf::Vector2f(10.f, 50.f);
vertex1.color = sf::Color::Red;
sf::VertexArray pixel;
pixel.append(vertex1); // That's what you forgot.
window.draw(pixel);
Как и выше, при таком подходе также добавьте еще sf::Vertex
рядом друг с другом, иначе вы можете не заметить один пиксель на экране.
Надеюсь, это поможет!