怎么将canvas二维点转世界三维坐标

发布于 2023-05-11 16:21:04

假设canvas坐标为[x,y,z],已知viewmatrix和projectmatrix,怎么将二维坐标转为三维坐标

查看更多

关注者
0
被浏览
730
icefire
icefire 2023-05-16
这家伙很懒,什么也没写!

谢谢回答,但是实际操作中还是有点困惑,比如下面将三维点转二维点中,得到裁剪坐标后为什么要除以w位的值
var point = [100, 0, 0, 1]; // 这是正面的右上角

// 使用矩阵计算出这一点的裁剪空间坐标
var clipspace = m4.transformVector(matrix, point);

// 将 X 和 Y 除以 W,和 GPU 一样
clipspace[0] /= clipspace[3];
clipspace[1] /= clipspace[3];

// 从裁剪空间转换到像素值
var pixelX = (clipspace[0] 0.5 + 0.5) gl.canvas.width;
var pixelY = (clipspace[1] -0.5 + 0.5) gl.canvas.height;

3 个回答
Limanman
Limanman 2023-05-12
这家伙很懒,什么也没写!

首先canvas坐标是二维的,你想把这个二维坐标转三维坐标就必须要有一个辅助面。比如你可以假设这个辅助面是裁剪空间中深度为0的面,那你把二维的canvas坐标的x,y转裁剪坐标的x',y',再拼上之前的深度0,可得裁剪坐标位(x',y',0)。接下来用(projectmatrix*viewmatrix)的逆矩阵乘以(x',y',0),便可得canvas坐标在世界坐标系中的相机远近裁剪面的中间的裁剪面上的一个三维点位。

Jsonco
Jsonco 图形社区官方人员 2023-05-11
奔驰的蜗牛

你好哈,canvas你这里代指的是屏幕坐标系吗?(我猜测的哈)为啥又有[x,y,z],但我不明白你后面讲的“怎么将二维坐标转为三维坐标”。麻烦再具体一些哈

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览