Hello experts,
I am trying to render the camera image sprite on a circle instead of a rectangle. The way I have imagined this would work is via an overlay. The problem I have is the circle is not transparent even if I set blend mode to transparent.
Furthermore, Is this the most efficient way to crop the camera image into a circle? Any help appreciated.
imageOverlay = image(100,100)
setContext( imageOverlay )
fill(0, 0, 0, 255)
rect(0, 0, 100, 100)
blendMode(ZERO, ZERO)
ellipseMode(CORNER)
local alpha = 0
fill(0, 0, 0, 0)
ellipse(0, 0, 100, 100)
blendMode(NORMAL)
setContext()
Then in the on draw function.
sprite( CAMERA, self.x, self.y, 100, 100 )
sprite(imageOverlay, self.x, self.y)
Here’s a way to do it using CircleMask class
--# Main
function setup()
parameter.watch("1/DeltaTime")
cameraSource(CAMERA_FRONT)
cm = CircleMask( 200, 360 )
cm:setTexture(CAMERA)
end
function draw()
background(40, 40, 50)
-- Do your drawing here
translate(WIDTH/2, HEIGHT/2)
cm:draw()
end
--# CircleMask
CircleMask = class()
function CircleMask:init(rad, sides)
-- you can accept and set parameters here
self.mesh = mesh()
local verts = {}
local tex = {}
for i=1,sides do
local r1 = (i-1)/sides * math.pi * 2
local r2 = i/sides * math.pi * 2
local p1 = vec2( math.cos(r1), math.sin(r1) )
local p2 = vec2( math.cos(r2), math.sin(r2) )
-- Verts
table.insert(verts, p1 * rad)
table.insert(verts, p2 * rad)
table.insert(verts, vec2(0,0)) -- center
-- Tex Coords
table.insert(tex, (p1 + vec2(1,1)) * 0.5)
table.insert(tex, (p2 + vec2(1,1)) * 0.5)
table.insert(tex, vec2(0.5,0.5))
end
self.mesh.vertices = verts
self.mesh.texCoords = tex
self.mesh:setColors( 255,255,255 )
end
function CircleMask:setDrawFunction(func, w, h)
self.mesh.texture = image(w,h)
self.drawFunction = func
end
function CircleMask:setTexture(tex)
self.mesh.texture = tex
self.drawFunction = nil
end
function CircleMask:draw()
if self.drawFunction ~= nil then
setContext( self.mesh.texture )
pushMatrix()
resetMatrix()
self.drawFunction()
popMatrix()
setContext()
end
self.mesh:draw()
end
JakAttak,
Thanks works like a charm
I modified @JakAttak’s code to make circular-mesh-creation a simple function, not a class, so it can more easily be cut-and-pasted into other projects.
I needed to do that kind of thing with it, so I figure other people might want to also.
And because I just can’t stop putting icons on things, I’m attaching a zip that includes an icon.