Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Three.js 按比例分割世界位置_Three.js - Fatal编程技术网

Three.js 按比例分割世界位置

Three.js 按比例分割世界位置,three.js,Three.js,我试图在片段着色器中获得世界位置。我目前正在顶点着色器中使用此选项: "varying vec3 vPosition;", 编辑 变量vPosition被传递到片段着色器中。基本上,无论鼠标在哪里,我都试图用红色圆圈绘制网格。然后在片段着色器中使用vPosition来确定是否需要绘制栅格 这非常有效,但当我缩放网格时就不行了。请看下面的图片: 无需缩放: 2倍缩放: 我不完全了解整个管道。我知道大部分的要点,但我想我所尝试的是不正确的 编辑 这是网格图形代码在片段着色器中的外观: //

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

"varying vec3 vPosition;",

编辑

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

这非常有效,但当我缩放网格时就不行了。请看下面的图片:

无需缩放:

2倍缩放:

我不完全了解整个管道。我知道大部分的要点,但我想我所尝试的是不正确的

编辑 这是网格图形代码在片段着色器中的外观:

// 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;",
"}",
//在地形上绘制圆环和网格,以便在编辑时使用。
“如果(show_ring==true){”,
“浮动距离=sqrt((vPosition.x-环_中心.x)*(vPosition.x-环_中心.x)+(vPosition.z-环_中心.z)*(vPosition.z-环_中心.z));”,
“如果(距离<环形半径+环形宽度/2.0&&distance>环形半径-环形宽度/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=规格化(gl_FragColor);”,
"}",
//网格覆盖
“浮动网格距离=环半径/4.0*3.0;”,
“如果(距离

感谢您在这方面的帮助。

我可以通过使用“世界定位”来实现这一点:


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

这似乎没有考虑到转换
// 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;",
"}",