首页 > 专栏 > 计算机图形学 > 文章详情
WebGL图形变换:平移矩阵 发布于:2023-02-26 17:31:00   原创发表   查看:67  讨论:0
一,原始步骤Tin【易塔云】自习室
Tin【易塔云】自习室
考虑一下,为了平移一个三角形,你需要对它的每一个顶点做怎么样的操作?Tin【易塔云】自习室
答案是,你需要对顶点坐标的每个分量(x和y),加上三角形在对应轴(如X轴或Y轴)上平移的距离。Tin【易塔云】自习室
比如,将点 p(x,y,z) 平移到 p'(x',y',z'),在X轴、Y轴、Z轴三个方向上平移的距离分别是 Tx , Ty,Tz,其中Tz为0。Tin【易塔云】自习室
Tin【易塔云】自习室

x' = x + TxTin【易塔云】自习室
y' = y + TyTin【易塔云】自习室
z' = z + Tz
Tin【易塔云】自习室

Tin【易塔云】自习室
我们只需要在着色器中为顶点坐标的每个分量加上一个常量就可以实现上面的灯饰。Tin【易塔云】自习室
显然,这是一个逐顶点的操作,而非逐片元,上述修改应该发生在顶点着色器。Tin【易塔云】自习室
顶点着色器中: gl_Position = a_Position + u_Translation;\nTin【易塔云】自习室
js中:var Tx = 0.5, Ty = 0.5, Tz = 0.0;Tin【易塔云】自习室
传递给着色器:
Tin【易塔云】自习室
1. var u_Translation = gl.getUniformLocation(gl.program, 'u_Translation');Tin【易塔云】自习室
2. gl.uniform4f(u_Translation, Tx, Ty, Tz, 0.0);Tin【易塔云】自习室
Tin【易塔云】自习室
二,平移矩阵Tin【易塔云】自习室
Tin【易塔云】自习室
首先理解一下,矩阵和矢量的相乘。如果将一个点p的坐标,变换为点p',可以通过矩阵来进行变换。即:Tin【易塔云】自习室
Tin【易塔云】自习室
Tin【易塔云】自习室
Tin【易塔云】自习室
等式:Tin【易塔云】自习室
x' = ax + by + czTin【易塔云】自习室
y' = dx + ey + fzTin【易塔云】自习室
z' = gx + hy + iz
Tin【易塔云】自习室
Tin【易塔云】自习室
我们比较:Tin【易塔云】自习室
x' = ax + by + cz ...Tin【易塔云】自习室
x' = x + TxTin【易塔云】自习室
因为等式二有常量Tx,所以我们引入4维矩阵,有Tin【易塔云】自习室
x' = ax + by + cz + dTin【易塔云】自习室
y' = ex + fy + gz + hTin【易塔云】自习室
z' = ix + jy + kz + lTin【易塔云】自习室
l  = mx + ny + oz + pTin【易塔云】自习室
比较:
Tin【易塔云】自习室
x' = x + TxTin【易塔云】自习室
y' = y + TyTin【易塔云】自习室
z' = z + TzTin【易塔云】自习室
比较x',a=1,b=c=0,d=TxTin【易塔云】自习室
比较y',e=g=0,f=1,h=TyTin【易塔云】自习室
比较z',i=j=0,k=1,l=TzTin【易塔云】自习室
最后一行,容易得到,m=n=o=0,p=lTin【易塔云】自习室
这样,写出平移矩阵:Tin【易塔云】自习室
Tin【易塔云】自习室
Tin【易塔云】自习室
Tin【易塔云】自习室
则:Tin【易塔云】自习室
Tin【易塔云】自习室
Tin【易塔云】自习室
 

发表评论

  • 匿名
还没有注册?