如何仅推/弹出上下文';s 2d/3d转换,而不是完整的上下文?
到目前为止,我只使用如何仅推/弹出上下文';s 2d/3d转换,而不是完整的上下文?,3d,html5-canvas,webgl,3d,Html5 Canvas,Webgl,到目前为止,我只使用 var context = canvas.getContext('2d'); 但在将来的某个时候,我也会使用3d,所以我会寻求更多的理解来做好准备 OpenGL中的glPushMatrix()调用非常便宜,标准做法是使用glPushMatrix()-glPopMatrix()将代码段括起来,但代价很小 我把这个习惯带到画布中的2d上下文中,并用一对context.save()-context.restore(),包装代码块,但这样做至少有一个严重的问题。最简单的解决方案是
var context = canvas.getContext('2d');
但在将来的某个时候,我也会使用3d,所以我会寻求更多的理解来做好准备
OpenGL中的glPushMatrix()
调用非常便宜,标准做法是使用glPushMatrix()
-glPopMatrix()
将代码段括起来,但代价很小
我把这个习惯带到画布中的2d上下文中,并用一对context.save()
-context.restore()
,包装代码块,但这样做至少有一个严重的问题。最简单的解决方案是避免这种做法,只需显式地设置转换
这在2d中不会太糟糕,但会与标准3d编码的纹理背道而驰。所以我想知道:
- 是否可以只推/弹出上下文的2d转换
- 是否可以只推/弹出上下文的3d转换
glPushMatrix
和glPopMatrix
已经有25年的历史了,早就不推荐使用了
是的,你在很多OpenGL示例中都看到了它们,它们被认为是旧的坏习惯
WebGL基于现代OpenGL实践。因此,它只是一个光栅化API,不包括glPushMatrix
和glPopMatrix
。相反,它只提供着色器,由您自己提供数学库
看
所以
是否可以只推/弹出上下文的2d转换
是,context.save
和context.restore
执行此操作。它们还保存和恢复上下文的所有其他状态,如当前的填充样式
,笔划样式
,线宽
,全局合成操作
,等等
如果您只想保存/恢复转换本身,答案是不,它不是内置的,但是您可以自己实现它。其要点是而不是提供更快的保存/恢复。这一点只是为了提供当前转换,因为canvasrrenderingcontext2d
api不提供查询当前转换的方法,如果某些应用程序想要执行冲突检测或其他操作,则需要该方法
使用类似的代码,您可以轻松地提供仅转换的推送和弹出。由于它必须用JavaScript对所有转换命令(例如:translate
,rotate
,scale
)进行矩阵运算,因此它是否会带来净速度的提高尚不清楚
是否可以只推/弹出上下文的3d转换
WebGL中没有这样的东西。如果你想写你自己的数学库,并添加一个推和弹出到它或找到一个已经有这个功能。无论你认为答案是“否”(在WebGL中没有这样的事情)或是(你可以自己实现),都取决于你。