c - 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,我的程序甚至在打开窗口之前就崩溃了。
我试图找到有关此功能的示例和解释,但现在我几乎迷路了。
解决方案
我认为您的错误是您没有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;
}