2013-02-15 56 views
3

我想要在片段着色器中獲得世界位置。我目前在頂點着色器使用此:片段與規模的世界位置

"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

我能得到這個用 'worldPosition' 工作:

「vec4 worldPosition = modelMatrix * vec4(位置,1.0);」,

+0

這似乎並沒有考慮到翻譯 – 2016-08-29 22:58:03