【发布时间】:2020-04-13 04:41:56
【问题描述】:
我正在用 C++ 和 sfml 制作游戏,我正在使用着色器,它覆盖了整个屏幕窗口。
但我希望它只覆盖屏幕的一部分,例如游戏对象或精灵。
注意:并非主文件中的所有代码都是我的,但它是 sfml 的非常通用的代码,所以...
主文件:
#define SCREEN_WIDTH 800
#define SCREEN_HEIGHT 480
#include <SFML/Graphics.hpp>
int main()
{
sf::RenderWindow window(sf::VideoMode(SCREEN_WIDTH, SCREEN_HEIGHT), "Shaders!!!", sf::Style::Close);
window.setFramerateLimit(60);
sf::Texture texture;
texture.loadFromFile("EnemyShip.png");
sf::Sprite sprite(texture); //create a sprite from the created texture
sf::Shader shader;
shader.loadFromFile("shader.vert", "shader.frag");
while (window.isOpen())
{
sf::Event evnt;
while (window.pollEvent(evnt))
{
if (evnt.type == sf::Event::Closed)
{
window.close();
}
}
window.clear(sf::Color(255, 255, 255));
window.draw(sprite, &shader); //draw the sprite with blur shader
window.display();
}
return 0;
}
shader.frag:
#version 330 core
out vec4 FragColor;
in vec4 vertexColor; // the input variable from the vertex shader (same name and same type)
void main()
{
FragColor = vertexColor;
}
shader.vert
#version 330 core
in vec2 texCoord;
out vec4 vertexColor;
void main()
{
gl_Position = vec4(texCoord, 0.0, 1.0);
vertexColor = vec4(0.5, 0.2, 0.7, 1.0);
}
我是否缺少明显的东西,或者我可以重新配置gl_Position 以仅覆盖屏幕的一部分? (但我怎样才能使屏幕其他“正确”部分的颜色清晰?)
【问题讨论】:
-
“我正在使用着色器,它覆盖了整个屏幕” - 着色器不覆盖任何东西。顶点坐标(和变换)定义了基元覆盖的区域。很可能您必须定义一个转换矩阵。我建议看一个教程,例如LearnOpenGL - Transformations