Canvas 将滚动添加到现有webgl相机

Canvas 将滚动添加到现有webgl相机,canvas,webgl,Canvas,Webgl,有没有办法将相机卷添加到第三方webgl应用程序 比如说,我有一个webgl应用程序,让我们举个例子 ESRI没有相机的滚动角度,但它仍然是webgl应用程序 问题的第一部分:我能否使用以下代码获得与正在运行的应用程序相同的上下文: var canvas = document.getElementById("canvas"); var gl = canvas.getContext("webgl"); 说同样的上下文,我的意思是,如果我通过gl.useProgram(shaderProgram)

有没有办法将相机卷添加到第三方webgl应用程序

比如说,我有一个webgl应用程序,让我们举个例子

ESRI没有相机的
滚动角度,但它仍然是webgl应用程序

问题的第一部分:我能否使用以下代码获得与正在运行的应用程序相同的上下文:

var canvas = document.getElementById("canvas");
var gl = canvas.getContext("webgl");
说同样的上下文,我的意思是,如果我通过
gl.useProgram(shaderProgram)添加着色器是否可以访问以前运行的着色器的结果?或者所有着色器程序都是孤立的

下一步:如果我可以提交一个能够修改顶点坐标的着色器,我应该如何控制着色器程序的执行顺序

最后,如果所有这些都是可能的,也许已经有一些东西,我可以用来计算一个正确的变换来得到滚动

这是否有可能“劫持”webgl相机,或者我是否将webgl管线的工作原理弄错了,这是不可能的?我也知道我可以旋转整个画布元素,但我正在寻找更好的方法(画布旋转很慢,图像质量很差)

可以访问以前运行的着色器的结果吗?或者所有着色器程序都是孤立的

这取决于你所说的“结果”是什么意思。您可以使用
gl.readPixels
读取画布的内容。您可以将画布的内容复制到纹理,以便使用
gl.texImage2D
gl.copyTexImage2D

下一步:如果我可以提交一个能够修改顶点坐标的着色器,我应该如何控制着色器程序的执行顺序

可能不会

最后,如果所有这些都是可能的,也许已经有一些东西,我可以用来计算一个正确的变换来得到滚动

可以滚动

这是否有可能“劫持”webgl相机,或者我是否将webgl管线的工作原理弄错了,这是不可能的?我也知道我可以旋转整个画布元素,但我正在寻找更好的方法(画布旋转很慢,图像质量很差)

在现有程序中添加roll并没有什么WebGL的作用。您必须修改程序,并修改它在JavaScript中计算视图矩阵或模型视图矩阵的位置


我建议您阅读一些,这样可能会更清楚,您需要进行的更改是在JavaScript中,而不是在着色器中。

我可以访问以前运行的顶点着色器的结果吗?在接受的答案示例中,顶点着色器填充
gl\u位置
数组,该变量是否在不同着色器之间共享?我是否可以提交另一个顶点着色器并旋转由另一个顶点着色器填充的数组中的顶点?否,不同着色器之间不共享gl_位置。不可以,不能从不同着色器中的一个着色器旋转顶点。