3
我想要在片段着色器中获得世界位置。我目前在顶点着色器使用此:片段与规模的世界位置
"varying vec3 vPosition;",
...
"vPosition = modelViewMatrix * position;",
编辑
变量vPosition被传递到片段着色器。基本上,我试图在鼠标所在的位置绘制带有红色圆圈的网格。 vPosition然后在片段着色器中用于确定是否需要绘制网格。
这很好,但不是当我缩放网格时。请看看下面的图片:
不结垢:
用2x缩放:
我不完全了解整个管道。我得到了大部分的要点 - 但我猜测我尝试的是不正确的......?
编辑 这是网格绘制代码看起来像在片段着色器:
// 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;",
"}",
感谢有这方面的帮助。
这似乎并没有考虑到翻译 – 2016-08-29 22:58:03