【问题标题】:CSFML Vertex Array and drawingCSFML顶点数组和绘图
【发布时间】:2020-05-03 17:45:45
【问题描述】:

我已经为我的学校工作了几个星期,现在我需要研究粒子。我一直在研究顶点,它看起来是制作它们的好方法。

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

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 的项目结束了,但如果你愿意分享,我很想看看你的项目是什么样子的。

标签: c sfml


【解决方案1】:

我认为您的错误是您没有在代码中设置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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    相关资源
    最近更新 更多