如何解决活塞中纹理的变换
活塞具有draw_2d
函数,它可以接受函数image
的结果,该函数返回由纹理制成的图像。 image
有一个“ transformation”参数,大多数示例仅从texture.transform
中获取。内部是列表列表,例如:
[[0.0025,0.0,-1.0],[0.0,-0.0033333333333333335,1.0]]
通话示例为:
window.draw_2d(
&e,|context,graph_2d,_device| {
pw::image(
&texture,context.transform,// [[0.001,0.0],1.0]]
graph_2d
);
我试图找到那些值正在定义的内容,但是失败了。文档只说了“转变”而没有进一步说明。这些数字在数组内部意味着什么?
解决方法
这可能是从(x,y)坐标到纹理的(u,v)坐标的线性变换。像这样的伪代码正在发生。
with tansform [[a,b,c],[d,e,f]]
For every (x,y) being drawn
u = a*x + b*y + c
v = d*x + e*y + f
color = texture(u,v)
draw color at (x,y)
,
它是linear transformation形式的transformation matrix,用于转换要绘制的图像的(x,y)坐标。您可以根据需要手动指定它,但是通常的用法是使用context.transform
上的方法执行所需的转换。 context.transform
实际上是实现Transformed
特性的结构。
image
函数通过多个嵌套调用向下传递转换,但最终最终在triangulation::rect_tri_list_xy
中使用该转换生成用于绘制的三角形顶点:
/// Creates triangle list vertices from rectangle.
#[inline(always)]
pub fn rect_tri_list_xy(m: Matrix2d,rect: Rectangle) -> [[f32; 2]; 6] {
let (x,y,w,h) = (rect[0],rect[1],rect[2],rect[3]);
let (x2,y2) = (x + w,y + h);
[[tx(m,x,y),ty(m,y)],[tx(m,x2,y2),y2)],y2)]]
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。