VRZOME4K头显 2018-06-26 01:23 采纳率: 0%
浏览 940
已结题

webgl在做图形处理的时候如何挡住半边

公司的一个开源VR项目,现在已经实现了360度视频播放,目前准备实现180度视频播放,webgl实在是不精通,求懂的人给看一下。

下面的代码是播放360度视频的代码, 目前要做180度的,180度视频内容是左右的, 每一帧要处理两次,每次处理要遮挡住一边, 然后webgl畸变处理另外一边。

texSubImage2D和texCopyImage2D已经试过了,能成功,但是内存拷贝太占系统资源, 我们这个是播放4K影片的,用不了。

代码如下
webGL.gl = canvas.getContext("webgl");
/* video 是加载的一个本地视频流 */
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB, gl.RGB, gl.UNSIGNED_BYTE, video);

/**
  * Drawing the scene
  */
  drawOneEye: function(eye) {
  webGL.gl.useProgram(shader.program);

  webGL.gl.bindBuffer(webGL.gl.ARRAY_BUFFER, positionsBuffer);
  webGL.gl.vertexAttribPointer(shader.attributes['aVertexPosition'], 2, webGL.gl.FLOAT, false, 0, 0);

  // Specify the texture to map onto the faces.
  webGL.gl.activeTexture(webGL.gl.TEXTURE0);
  webGL.gl.bindTexture(webGL.gl.TEXTURE_2D, texture);
  webGL.gl.uniform1i(shader.uniforms['uSampler'], 0);

  var projectionInverse = mat4.create();
  mat4.invert(projectionInverse, eye.projectionMatrix);
  var inv = mat4.create();
  mat4.multiply(inv, rotation, projectionInverse);

  webGL.gl.uniformMatrix4fv(shader.uniforms['proj_inv'], false, inv);

  // Draw
  webGL.gl.bindBuffer(webGL.gl.ELEMENT_ARRAY_BUFFER, verticesIndexBuffer);
  webGL.gl.drawElements(webGL.gl.TRIANGLES, 6, webGL.gl.UNSIGNED_SHORT, 0);
  },

详细的代码在https://github.com/vrzome

  • 写回答

1条回答 默认 最新

  • 萝卜腌白菜 2018-07-18 08:35
    关注

    图像处理,GPU编程呀,比如编写shader

    评论

报告相同问题?

悬赏问题

  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler