用规模划分世界位置

时间:2013-02-15 14:00:24

标签: three.js

我试图在片段着色器中获得世界位置。我目前在顶点着色器中使用它:

"varying vec3 vPosition;",

...

"vPosition = modelViewMatrix * position;",

修改

变量vPosition传递到片段着色器。基本上我试图用鼠标绘制红色圆圈的网格。然后在片段着色器中使用vPosition来确定是否需要绘制网格。

这很有效,但在缩放网格时却不行。请参阅下面的图片:

不缩放: enter image description here

2X缩放: enter image description here

我不完全了解整个管道。我得到了大部分内容的要点 - 但我想我尝试的是不正确的??

修改 这就是网格绘图代码在片段着色器中的样子:

// Draw the ring and grid on the terrain for when we are editing it.
"if (show_ring == true){",
   "float distance = sqrt((vPosition.x - ring_center.x) * (vPosition.x - ring_center.x) + (vPosition.z - ring_center.z) * (vPosition.z - ring_center.z));",
   "if (distance < ring_radius + ring_width / 2.0 && distance > ring_radius - ring_width / 2.0) {",
   "gl_FragColor.r += ring_color.r;",
   "gl_FragColor.b += ring_color.b;",
   "gl_FragColor.g += ring_color.g;",
   "gl_FragColor.a += ring_color.a;",
   "gl_FragColor *= 2.0;",
   "gl_FragColor = normalize(gl_FragColor);",                   
"}",

// Grid overlay
"float gridDist = ring_radius / 4.0 * 3.0;",
"if (distance < gridDist ) {",
   "float tiles = 1.0 / 100.0;",
   "float val = mod(vUv.y, tiles);",
   "if (mod(vUv.x, tiles) < .001 || mod(vUv.y, tiles) < .001) {",
   "gl_FragColor = gl_FragColor * (distance / gridDist);",
   "gl_FragColor.a = 1.0;",
"}",

感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:1)

我能够通过使用'worldPosition'来实现这一点:

“vec4 worldPosition = modelMatrix * vec4(position,1.0);”,