Computing transformed coords
Forum rules
Before you make a thread asking for help, read this.
Before you make a thread asking for help, read this.
Computing transformed coords
Is there a way to have coords transformed by the currently active graphics transformation state and get the transformed result back? I need the axis aligned bounding boxes of a hierarchy of translated, scaled, rotated Drawables and I wonder if I have to implement the transformation stack myself. I also want to compute localized mouse coords for these objects, and possibly perform clipping/culling using the AABBs.
Re: Computing transformed coords
There is an way using an Canvas with rgba32f format but that is somewhat tricky and slow. But beneath that i did not find any method directly implemented in API.
Re: Computing transformed coords
I'm not sure how Canvas would help with this problem. Care to elaborate?
If there is no easy way of getting the current transform, is there at least a way to set the transformation matrix directly in one function call, so I can compute it myself and share the transform between the graphics stack and my display objects?
If there is no easy way of getting the current transform, is there at least a way to set the transformation matrix directly in one function call, so I can compute it myself and share the transform between the graphics stack and my display objects?
Re: Computing transformed coords
You can't set the matrix but you can use your own matrix:
On the other hand you could write transform_projection matrix to target canvas and then read from there.
Or you could write all points that need to write into canvas apply transform_projection on that values trough shader and then read from target canvas.
Code: Select all
local effect=love.graphics.newShader([[
attribute vec3 vPos;
attribute vec2 vTex;
attribute vec3 vNormal;
extern mat4 matrix;
varying vec4 v_pos;
varying vec3 v_tex;
varying vec3 v_normal;
vec4 position(mat4 transform_projection, vec4 vertex_position )
{
v_pos = vec4(vPos.xyz,1.0)*matrix;
v_tex = vec3(vTex,1.0)/v_pos.w;
v_pos/=v_pos.w;
v_normal = vNormal;
return v_pos;
}
]],[[
varying vec4 v_pos;
varying vec3 v_tex;
varying vec3 v_normal;
vec4 effect(vec4 color,Image texture,vec2 texture_coords,vec2 pixel_coords)
{
return Texel(texture, vec2(v_tex.x/v_tex.z,v_tex.y/v_tex.z));
}
]])
Or you could write all points that need to write into canvas apply transform_projection on that values trough shader and then read from target canvas.
Re: Computing transformed coords
Okay, I need some more clarifications please. This is my display object drawing itself:
This happens in a nested fashion (display objects can have child display objects). I'm not using Canvas or Shader right now.
Now if I want to work with coordinates relative to this object, for instance when I want to know on which part of the rotated object the user has clicked, I have to get the transformation matrix from somewhere. I'm currently calculating it a second time by myself, because I can't query it from love.
Are you saying I shouldn't use the love.graphics transform functions, and rather calculate it myself and draw everything with a shader that takes my transformation matrix instead?
Reading stuff back from a Canvas seems pretty hacky and potentially slow.
Code: Select all
love.graphics.push()
love.graphics.translate(self._x + self._anchorX, self._y + self._anchorY)
love.graphics.scale(self._scaleX, self._scaleY)
love.graphics.rotate(self._rotation)
love.graphics.translate(-self._anchorX, -self._anchorY)
self:draw()
love.graphics.pop()
Now if I want to work with coordinates relative to this object, for instance when I want to know on which part of the rotated object the user has clicked, I have to get the transformation matrix from somewhere. I'm currently calculating it a second time by myself, because I can't query it from love.
Are you saying I shouldn't use the love.graphics transform functions, and rather calculate it myself and draw everything with a shader that takes my transformation matrix instead?
Reading stuff back from a Canvas seems pretty hacky and potentially slow.
Re: Computing transformed coords
Yes that was what i saying. Simple use your own matrix. Oh by the way be warned when setting up your matrix you must deal with the coordinate space transformation yourself.
- slime
- Solid Snayke
- Posts: 3166
- Joined: Mon Aug 23, 2010 6:45 am
- Location: Nova Scotia, Canada
- Contact:
Re: Computing transformed coords
You can shadow the transformation state functions to be able to convert to and from the coordinate space, camera libraries such as hump.camera and gamera do something similar.
In love 0.11 there will be built-in functions to transform a vector into the current transform's coordinate space, and the inverse.
In love 0.11 there will be built-in functions to transform a vector into the current transform's coordinate space, and the inverse.
Who is online
Users browsing this forum: No registered users and 4 guests