2017-07-14 88 views
0

我正在更改幾何體上的z座標頂點,但發現網格保持相同的大小,我期望它變得更小。然而,在X,Y空間中,頂點位置之間的補間效果與預期一樣。着色器Z空間透視ShaderMaterial BufferGeometry

這是我如何在我的渲染功能緩動的幅度統一計算我GL_POSITION:

<script type="x-shader/x-vertex" id="vertexshader"> 

    uniform float amplitude; 
    uniform float direction; 
    uniform vec3 cameraPos; 
    uniform float time; 

    attribute vec3 tweenPosition; 

    varying vec2 vUv; 

    void main() { 

     vec3 pos = position; 
     vec3 morphed = vec3(0.0, 0.0, 0.0); 

     morphed += (tweenPosition - position) * amplitude; 

     morphed += pos; 

     vec4 mvPosition = modelViewMatrix * vec4(morphed * vec3(1, -1, 0), 1.0); 

     vUv = uv; 
     gl_Position = projectionMatrix * mvPosition; 

    } 

</script> 

我也嘗試過這樣的事情,從計算的角度對webglfundamentals:

vec4 newPos = projectionMatrix * mvPosition; 
float zToDivideBy = 1.0 + newPos.z * 1.0; 
gl_Position = vec4(newPos.xyz, zToDivideBy); 

這是我的循環來計算我補間的另一個頂點集:

for (var i = 0; i < positions.length; i++) { 
    if ((i+1) % 3 === 0) { 
     // subtracting from z coord of each vertex 
     tweenPositions[i] = positions[i]- (Math.random() * 2000); 
    } else { 
     tweenPositions[i] = positions[i] 
    } 
} 

我得到了與此相同的結果 - Z空間中距離較遠的對象不會縮放/減弱/做任何不同的事情。是什麼賦予了?

+0

我認爲沒有'z'上述改變。哪個代碼改變了'z'?另外你的投影矩陣是什麼? – gman

+0

更新了問題。投影矩陣是默認情況下由THREE傳遞的任何內容,如果有的話,使用PerspectiveCamera。閱讀:不確定... –

+2

'morphed * vec3(1,-1,0)'意思是「無論'變形'是什麼,乘法後它的'z'座標將爲0」 – prisoner849

回答

0

演變* VEC 3(1,-1,0)

z是始終爲零在你的代碼。

[X,Y,Z] * [1,-1,0] = [X,-Y,0]