2013-01-03 70 views
3

我使用three.js構建房屋,我有牆壁和牆壁紋理。重複時自動保持紋理的比例和紋理的大小

牆壁基本上是CubeGeometry。

我參加了一個獨特的規模:1釐米= 1px的

紋理可能是磚或任何其他建築材料,但紋理的文件通常是512×512,在它的細節。例如:紋理文件中的一塊磚每4px將爲10px。

我需要保持這個比例來保持場景的真實性。

var texture = THREE.ImageUtils.loadTexture("images/wall.jpg"); 

texture.wrapS = THREE.RepeatWrapping; 
texture.wrapT = THREE.RepeatWrapping; 

texture.repeat = new THREE.Vector2(0.2 , 0.2); 

var wall = new THREE.Mesh(new THREE.CubeGeometry(100, 100, 10), new THREE.MeshBasicMaterial({ map: texture })); 

這工作得很好,因爲情況很簡單),它也是由每一個牆的比例(可以有任何種類的大小)

但其實我有很多很簡單其他幾何圖形(程序生成等),是否有機會像「THREE.KeepMyTextureSizeAndRepeat」包裝?或者我需要爲每個自定義幾何體製作比率?

如果您對這種使用情況下的任何意見,我會greatfull :)

非常感謝

編輯:最終目標是做這樣的事情在2D畫布「模式」

var pattern = context.createPattern(imageObj, repeatOption); 
context.fillStyle = pattern; 
context.fill(); 

,當你做這樣的事情,就比如一個矩形的模式將被重複保持縱橫比(例如http://www.html5canvastutorials.com/tutorials/html5-canvas-patterns-tutorial/

回答

0

你必須自己計算每個比率,因爲紋理不知道任何像素。它只知道uvs。

+0

感謝您的回答,實際上我問的是因爲我認爲當您使用CLAMP_TO_EDGE進行包裝時,紋理會呈現出有關像素的信息?不是嗎? – come

+0

當使用Clampto邊緣時,它將僅複製最後一個像素而不是整個圖片 – Gero3

+0

我認爲我在我的問題中感到困惑,所以我修改了它。但我明白的是它不會以簡單的方式成爲可能......我會讓微積分:( – come