我知道,使用webgl渲染器我可以在材質上使用vertexColors來創建線性漸變。根據文檔,這不適用於畫布渲染器。我怎樣才能回到畫布渲染器上,仍然有漸變?我希望它受環境照明的影響,所以我不能依賴於圖像紋理。three.js漸變與畫布渲染器
回答
是的,CanvasRenderer
不支持MeshLambertMaterial
和散佈紋理的組合。
如果您只關心環境光線,那麼您可以使用具有紋理的MeshBasicMaterial
,並將紋理即時變暗以模擬環境陰影。 (其實,你可以用這種方式來模擬任何照明。)
注意,這真是一個黑客。
創建基於環境光照修改紋理的功能。 (image
是在你的情況下,無陰影漸變。)
function applyAmbient(mesh, image, ambientFactor) { // 1.0 = lightest; 0.0 = darkest
var canvas = mesh.material.map.image;
var size = canvas.width;
var size = canvas.height;
// get context
var context = canvas.getContext('2d');
// copy image
context.drawImage(image, 0, 0);
// apply ambient factor
context.fillStyle = "rgba(0, 0, 0, " + (1 - ambientFactor) + ")";
context.fillRect(0, 0, size, size);
return canvas;
}
然後,在渲染循環,更新紋理
applyAmbient(mesh, textureImage, ambientFactor);
mesh.material.map.needsUpdate = true; // important!
的jsfiddle:http://jsfiddle.net/mkP7q/
three.js所r.62
這看起來像我想要的,但它在getContext上產生錯誤。 「TypeError:Object#
我的評論有點模棱兩可。我得到錯誤傳遞一個網格,imageSrc,環境。之後的部分是關於改變功能,一旦我得到它的工作。 – g3k0
我添加了一個小提琴來演示一種方法。我會讓你弄清楚你的實現細節:-) – WestLangley
- 1. Three.js畫布渲染和透明度
- 2. THREE.js渲染器
- 3. 畫布渲染
- 4. 如何爲畫布渲染使用欄選取漸變顏色?
- 5. Three.js全景奇怪的渲染與畫布
- 6. 畫布漸變
- 7. HTML5畫布渲染
- 8. 畫布預渲染?
- 9. 帶漸變渲染的PNG
- 10. 渲染CSS水平漸變
- 11. ShaderMaterial渲染three.js
- 12. Three.js組渲染
- 13. 渲染SVG與外部引用畫布
- 14. 結合畫布和OpenGL ES渲染器?
- 15. ImageUtils.loadTexture在畫布渲染器回調
- 16. 畫布渲染器不工作
- 17. 從Ruby渲染畫布
- 18. 畫布轉換渲染
- 19. Android的畫布渲染
- 20. matterJS渲染到畫布
- 21. 不同的畫布渲染
- 22. three.js所在渲染
- 23. Three.js渲染紋理
- 24. Three.js渲染完成
- 25. Three.js:調整渲染畫布的大小(GPU飢餓片段着色器)
- 26. wkhtmltoimage快照中的CSS3漸變渲染
- 27. 畫布漸變表現
- 28. 瀏覽器不渲染three.js所
- 29. Three.js的Canvas渲染器中的陰影?
- 30. Xamarin - 與佈局渲染器斷開
你的意思是你寫的東西 - 只有環境?如果是這樣,您可以使用'Mesh.BasicMaterial',用紋理表示漸變,並在環境光線變暗時使紋理變暗。 – WestLangley
爲了說明問題,我爲場景改變亮度提供了一個環境光線。使用webgl渲染器時,圖像紋理會受到該亮度的影響。當它回落在cavas渲染器上時,它們不是。我認爲這是某種畫布渲染器的限制。 除了環境光以外,我如何在飛行中使其變暗?當你說紋理我假設一個圖像 - 我是Three.Js 新來的基本上我想要一個線性漸變的材質,可以受到兩個渲染器的光照影響。 – g3k0
另外,只要我可以保持與周圍光線(這是補間)同步,我就可以以某種方式進行手動操作。 – g3k0