如何制作我的WebGL坐标系;左上角“;面向......的

如何制作我的WebGL坐标系;左上角“;面向......的,webgl,fragment-shader,vertex-shader,Webgl,Fragment Shader,Vertex Shader,由于计算效率,我使用片段着色器实现了一个简单的2D元球算法。要渲染的圆的数据是面向左上角的 除了WebGL坐标系的原点(左下角)给我带来困难外,我的一切都正常工作:显然,渲染输出沿水平轴镜像 接下来(和其他人),我尝试使用顶点着色器旋转对象。不幸的是没有任何成功 实现WebGL坐标系重新定向的最简单方法是什么 如果有任何提示和指点,我将不胜感激,谢谢!:) 请在此处找到工作(不工作;))示例: 由于您在像素着色器中使用gl_FragCoord,因此无法从顶点着色器执行此操作,因为gl_FragC

由于计算效率,我使用片段着色器实现了一个简单的2D元球算法。要渲染的圆的数据是面向左上角的

除了WebGL坐标系的原点(左下角)给我带来困难外,我的一切都正常工作:显然,渲染输出沿水平轴镜像

接下来(和其他人),我尝试使用顶点着色器旋转对象。不幸的是没有任何成功

实现WebGL坐标系重新定向的最简单方法是什么

如果有任何提示和指点,我将不胜感激,谢谢!:)

请在此处找到工作(不工作;))示例:

由于您在像素着色器中使用gl_FragCoord,因此无法从顶点着色器执行此操作,因为gl_FragCoord是画布坐标,但是倒置的。在向WebGL传递的过程中,您可以轻松地在javascript中反转它

  gl.uniform3fv(gl.getUniformLocation(program, `u_circles[${i}]`), [
    circles[i].x,
    canvas.height - circles[i].y - 1,
    circles[i].r
  ]);
如果要在着色器中执行此操作并继续使用gl_FragCoord,则应使用统一的方法将画布的高度传递给着色器,并通过执行以下操作来执行y的转换:

vec2 screenSpace = vec2(gl_FragCoord.x, canvasHeight - gl_FragCoord.y - 1);

-1是因为坐标从0开始。

感谢您提供两种解决方案!最近,在我熟睡了这个问题并把所有的东西都画在纸上之后,我想出了着色器解决方案。那最终只是简单的点模拟,不是吗?小心点,马努:-)