c++ - SFML 等 ionic Sprite 效果?

标签 c++ shader sfml

有没有一种方法可以在 SFML 中创建等 ionic 效果,而不会降低我的帧率?

最佳答案

1) 直接在内存中将图像位作为字节(或 int/任何取决于您的目标颜色深度)数组进行操作。不要每次都使用图像中的任何 GetsPixel()。

2) 尽量减少你的数学。对于等 ionic 效果,您通常会使用很多触发函数,当您每秒执行一次(高度宽度帧速率)时,这些函数相当慢。要么使用快速的专用数学库进行计算,要么更好的是,在开始时缓存计算并在效果期间使用查找表以完全从每个帧中删除数学。

3) 使老式等 ionic 效果运行如此之快的原因之一是调色板循环。我不知道有什么方法可以直接用 SFML 复制这个(或一般的调色板),但你可以使用 GLSL 着色器来获得相同类型的结果,而不会对性能造成很大影响。像这样:

float4 PS_ColorShift(float2 Tex : TEXCOORD0) : COLOR0 
{ 
    float4 color = tex2D(colorMap, Tex);

    color.r = color.r+sin(colorshift_timer+0.01f);
    color.g = color.g+sin(colorshift_timer+0.02f);
    color.b = color.b+sin(colorshift_timer+0.03f);
    color.a = 1.0f;

    saturate(color);

    return color;
}

关于c++ - SFML 等 ionic Sprite 效果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2844623/

相关文章:

glsl - 如何绘制GLSL中多个函数生成的形状?

c++ - 成员未在范围内声明?

C++ SFML 碰撞不准确

c++ - 着色器和纹理坐标问题

c++ - 访问整个数组的顺序程序

c++ - 是否可以检测 lambda 在捕获组中是否具有 “this”?

javascript - 关于太阳/背景渲染的屏幕空间坐标问题

c++ - 将 1 添加到 32 位的位集中

c++ - 频率和振幅

opengl - 将实时网络摄像头纹理添加到 OpenGL