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空間中距離較遠的對象不會縮放/減弱/做任何不同的事情。是什麼賦予了?
我認爲沒有'z'上述改變。哪個代碼改變了'z'?另外你的投影矩陣是什麼? – gman
更新了問題。投影矩陣是默認情況下由THREE傳遞的任何內容,如果有的話,使用PerspectiveCamera。閱讀:不確定... –
'morphed * vec3(1,-1,0)'意思是「無論'變形'是什麼,乘法後它的'z'座標將爲0」 – prisoner849