仅使用精灵绘制
Using only the sprite to draw
使用SFML的游戏开发新颖,非常喜欢。
到目前为止,我正在尝试在精灵上渲染一个圆圈,但是不知何故,我只得到四分之一的圆,这意味着窗口在绘制而不是精灵时被视为表面。如果我将Sprie大小作为窗口,我会看到整个圆圈。
这是我的代码:
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>
const char *glsl = R"(
#version 330 core
uniform vec2 u_resolution;
void main() {
vec2 pos = gl_FragCoord.xy / u_resolution;
float radius = 0.4;
float d = smoothstep(radius + 0.01, radius, distance(pos, vec2(0.5)));
gl_FragColor = vec4(d*0.0, d*0.5, d*1.0, 1.0);
}
)";
int main() {
sf::RenderWindow window(sf::VideoMode(800, 600), "GLSL", sf::Style::Default);
sf::Texture tex;
tex.create(800 / 2, 600 /2); // or tex.create(800, 600); for full window surface
sf::Sprite spr(tex);
sf::Shader shader;
shader.loadFromMemory(glsl, sf::Shader::Fragment);
shader.setUniform("u_resolution", sf::Vector2f(800, 600));
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) if(event.type == sf::Event::Closed) window.close();
window.clear(sf::Color(244,244,244));
window.draw(spr, &shader);
window.display();
}
}
任何帮助都会很感激。我希望实现的是在精灵范围内渲染完整的圆圈。谢谢!
您要拿出四分之一的屏幕,因为您要执行tex.create(800 / 2, 600 /2);
,并且窗口大小为sf::RenderWindow window(sf::VideoMode(800, 600) ...);
。因此,它偏离了宽度和高度。创建一个与窗口相同的质地,我认为您会很好(tex.create(800, 600);
)。
相关文章:
- OpenGL 着色器不绘制任何东西 - 糟糕的精灵类
- 绘制精灵会导致分割错误
- OpenGL 2D游戏只绘制第二个精灵纹理而不是第一个
- 为什么该代码不绘制精灵C++ SFML
- 仅使用精灵绘制
- 在绘制循环中绘制精灵
- OpenGL精灵绘制质量低
- OpenGL-快速精灵绘制-需要一些指导
- 如何在cocos2d-x3测试版中围绕精灵绘制边界框
- 尝试绘制精灵地图时出现 SFML 错误
- C++SFML精灵没有绘制,但是没有出现错误
- 未在指定位置绘制的精灵
- 在 cocos2d-x v3 中绘制并向场景添加大量精灵(~200)的最佳方法是什么?
- 无法从 Direct2D png 使用 DirectX9 绘制图像精灵
- OpenGL没有绘制我的纹理精灵
- 精灵批次只绘制第一个精灵
- 使用 directX 10 绘制大型精灵时性能低下
- SFML在另一个类中绘制移动精灵
- 在cocos2dx v3.6中绘制精灵错误
- 在OpenGL中使用着色器绘制精灵表的技术