2015-05-30 28 views
2

我很好奇,想知道的關係是什麼gl_PointSize和內PointCloudMaterial大小屬性之間。Threejs:PointCloudMaterial尺寸相比ShaderMaterial gl_PointSize與大小衰減

當我創建PointCloudMaterial一個PointCloud並設置size屬性1,所述顆粒的尺寸遠遠創建與ShaderMaterial一個PointCloud和用於頂點着色器的尺寸參數設置爲1時相比變大。我也佔規模衰減像PointCloudMaterial着色器:

<script type="x-shader/x-vertex" id="particle_vs"> 
    uniform float size; 
    uniform float scale; 
    void main() { 
     vec4 mvPosition = modelViewMatrix * vec4(position, 1.0); 
     gl_PointSize = size * (scale/length(mvPosition.xyz)); 
     gl_Position = projectionMatrix * mvPosition; 
    } 
</script> 

我已經提取了我的問題的一個簡單的例子在這裏: http://dev.cartelle.nl/particle-example/

  • 紅色顆粒分配PointCloudMaterial集大小1
  • 生粒子被分配ShaderMaterial具有Vertex Shader是佔規模衰減像PointCloudMaterial。在這種情況下,我已將size設置爲300,並且您可以看到綠色顆粒仍然較小。

我的預期結果是讓ShaderMaterial採取與PointCloudMaterial上的尺寸屬性相同的單位度量。我必須同時使用這兩種材料,所以我試圖弄清楚這些尺寸之間的關係。必須是我在頂點着色器中丟失的東西?

謝謝! 約翰尼

+0

僅供參考 - 'sortParticles'不再是'PointCloud'的屬性。 – WestLangley

回答

0

在你ShaderMaterial,你需要設置

scale: { type: 'f', value: window.innerHeight/2 }, 

這是因爲在WebGLRenderer方法refreshUniformsParticle()下面一行:

uniforms.scale.value = _canvas.height/2.0; // TODO: Cache this. 

three.js所r.71

+0

我建議你通過(1)對'PointClouds'和(2)在每種情況下刪除'map'使用相同的幾何體來證實這一點。 – WestLangley

+0

欣賞快速反應 - 謝謝!我已經按照建議更新了尺碼制服。我也刪除了地圖,現在已經爲您提到的兩個PointCloud共享幾何。綠色顆粒仍然顯示較小。我必須錯過顯而易見的東西:)更新反映在這裏:http://dev.cartelle.nl/particle-example/ –

+0

雖然,我只是嘗試設置ShaderMaterial大小:{type:'f',value:window.innerHeight} ,這似乎正好顯示PointCloudMaterial的大小 –