首页 > 解决方案 > CSFML顶点数组和绘图

问题描述

几周以来,我一直在为我的学校做一个项目,现在我需要研究粒子。我一直在研究顶点,它看起来是制作它们的好方法。

我开始尝试在屏幕上打印至少一个顶点并打印它,但我不知道我做错了什么。

CSFML 是一个非常受限制的库,因为没有多少人使用它,因此试图找到 SFML 示例并找出 C 函数的派生非常困难,并且给我带来了一些麻烦。

这是我的代码:

{
    sfVertex a;
    sfVector2f apos = {200, 100};
    a.color = sfRed;
    a.position = apos;

    sfVertexArray *array = sfVertexArray_create();
    sfVertexArray_setPrimitiveType(array, sfPoints);
    sfVertexArray_append(array, a);

    sfRenderWindow_drawVertexArray(window, array, 0);
}

在这个例子中,我试图创建一个顶点,给它一个位置,一个颜色,然后创建一个顶点数组,它接受点顶点并将我的顶点附加到顶点数组。我认为这里唯一的问题是将它打印在屏幕上,因为sfRenderWindow_drawVertexArray(window, array, 0);不打印任何东西,如果我将渲染状态设置为 1,我的程序甚至在打开窗口之前就崩溃了。

我试图找到有关此功能的示例和解释,但现在我几乎迷路了。

标签: csfml

解决方案


我认为您的错误是您没有sfPoints在代码中设置。这是一个绘制 4 个点的简单代码。

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


int main(){
  sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");

  while (window.isOpen()){
    sf::Event event;
    while (window.pollEvent(event)){
      if (event.type == sf::Event::Closed)
        window.close();
    }

    sf::VertexArray vertexArray (sf::Points, 4); 

    vertexArray[0].position = sf::Vector2f(10, 10);
    vertexArray[1].position = sf::Vector2f(10, 20);
    vertexArray[2].position = sf::Vector2f(20, 10);
    vertexArray[3].position = sf::Vector2f(20, 20);

    // Set colour for all vertices
    for(int i = 0; i < 4.; i++){
      vertexArray[i].color=sf::Color::Yellow;
    }

    window.clear();
    window.draw(vertexArray);
    window.display();
  }

  return 0;
}

推荐阅读