我有一个宽度*高度= 1442 * 1303的图像,我能够通过webgl的texture2D读取它们并成功渲染到画布 .
在客户端,我有一个arraybuffer,可以获取size = width * height * 4的图像数据 .
因此,当我的画布宽度和高度为window.innerWidth * 0.90和window.innerHeight * 0.90时,如何保持图像的纵横比 .
另外,我必须通过WEBGL 2dTexture使用arraybuffer直接渲染,所以,我不能使用任何2d canvs API,如drawImage . 请提出建议 .
1 回答
这个问题确实有一百万个答案 .
首先是图像的大小,然后是您决定绘制它的大小,以及画布的大小,然后是画布显示的大小 . 你使用的顶点的位置也可以是任何东西 .
See this article on WebGL指出WebGL使用剪辑空间坐标(-1到1)和this article points out that the size a canvas is displayed is separate from its resolution .
假设您想要尽可能大地绘制图像并使其适合画布 .
首先让我们查看画布显示的大小
让我们假设我们想要尽可能大地绘制图像,因此首先尝试将宽度拟合到画布上
现在让我们检查它是否合适?如果不是让我们使用高度
现在我们需要将
imageDisplayWidth
和imageDisplayHeight
转换为画布中像素的大小 . 注意:如果画布的显示大小与其分辨率相同,则可以跳过此步骤,因为显示大小和绘图大小将相同 .现在我们需要将其转换为剪辑空间
现在,给定单位四元组,我们可以缩放它以适应该大小 .
现在可以使用该矩阵和我们的单位四边形绘制