Canvas (简体中文)
自 LÖVE 0.8.0 可以使用 |
从 Framebuffer 重命名而来. |
Canvas(画布)用于离屏渲染(就是不真正地绘制,只是把数据存储起来)。可以把它看成是一种无形的屏幕,你可以在上面绘制一些东西,但直到你将它绘制到实际的屏幕,它都不会被看见。它也被称为“纹理渲染(render to texture)”。
在Canvas上绘制一些不经常改变(相对)位置的东西(如背景图案,蓝天,白云形成一个整体),然后再把整个Canvas绘制出来。以此来代替每个物品都独自绘制, 这样可以减少每帧绘制操作的次数。
在 0.10.0 之前的版本中,并不是所有的显卡都能够支持 LÖVE 的 Canvases。love.graphics.isSupported("canvas") 可以用来在运行时检查是否支持。
往 Canvas(画布) 上绘制内容是会使用 regular alpha blengding(一种颜色混合的模型BlendMode), 所要绘制的内容的 alpha(透明度,rgba中的a) 值会直接和自己的 RGB 值相乘。
由于一旦 Canvas 要被绘制的时候,它的像素颜色都会被 premultiplied alpha(预乘混合值),所以要把 Canvas 绘制到屏幕上或者其他的 Canvas 时必须要用 premultiplied alpha blending (另外一种颜色混合模式,表示已经预乘过了)– love.graphics.setBlendMode("alpha", "premultiplied")。 |
构造函数
love.graphics.newCanvas (简体中文) | 创建一个新的 Canvas(画布)。 | 0.8.0 |
函数
Object:release (简体中文) | 立即摧毁对象在 Lua 中的引用 | 11.0 |
父类
示例
在画布上绘制物品,并将画布绘制到屏幕
function love.load()
canvas = love.graphics.newCanvas(800, 600)
-- 使用 regular alpha blend 颜色混合模式在画布上绘制一个矩形
love.graphics.setCanvas(canvas)
love.graphics.clear()
love.graphics.setBlendMode("alpha")
love.graphics.setColor(255, 0, 0, 128)
love.graphics.rectangle('fill', 0, 0, 100, 100)
love.graphics.setCanvas()
end
function love.draw()
-- 非常重要!:在绘制 Canvas 时需要把颜色进行重置,这样 Canvas 才能正确地显示
-- 可以看下这里的讨论: https://love2d.org/forums/viewtopic.php?f=4&p=211418#p211418
love.graphics.setColor(255, 255, 255, 255)
-- Canvas 中的矩形已经是混合模式
-- 当绘制 Canvas 时需要使用 premultiplied(预乘) alpha blend 模式才能保证颜色正确的混合,如果不理解的话,就记住这个操作
love.graphics.setBlendMode("alpha", "premultiplied")
love.graphics.draw(canvas)
-- 可以观察一下在普通的混合模式下两者的区别
love.graphics.setBlendMode("alpha")
love.graphics.draw(canvas, 100, 0)
-- 一般的绘制物品,如矩形是直接使用 alpha blending 模式的
love.graphics.setBlendMode("alpha")
love.graphics.setColor(255, 0, 0, 128)
love.graphics.rectangle('fill', 200, 0, 100, 100)
end
参见
- love.graphics (简体中文)
- love.graphics.setCanvas (简体中文)
- love.graphics.setBlendMode (简体中文)
- love.graphics.isSupported (简体中文)
其他语言
Dansk –
Deutsch –
English –
Español –
Français –
Indonesia –
Italiano –
Lietuviškai –
Magyar –
Nederlands –
Polski –
Português –
Română –
Slovenský –
Suomi –
Svenska –
Türkçe –
Česky –
Ελληνικά –
Български –
Русский –
Српски –
Українська –
עברית –
ไทย –
日本語 –
正體中文 –
简体中文 –
Tiếng Việt –
한국어
More info