Three.js: рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдФрд░ рдСрдлрд╕реЗрдЯ рдЫрд╡рд┐ рдмрдирд╛рд╡рдЯ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 1 рдордИ 2012  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: mrdoob/three.js

рдореЗрд░реА рдПрдХ рдмрдбрд╝реА рдЫрд╡рд┐ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдПрдХ рдмрдирд╛рд╡рдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рддреЛ рдХрдИ cubes рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рдмрдирд╛рд╡рдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдмрдирд╛рд╡рдЯ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ, рддреЛ рдпрд╣ рдЫрд╡рд┐ рдХреЛ рдШрди рдХреА рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ рддрдХ рд▓реЗ рдЬрд╛рддреА рд╣реИред рдореИрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рддреЛ рдореИрдВ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рд╡рдЯ рдХреЗ "рдСрдлрд╕реЗрдЯ" рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬрд┐рд╕реЗ рдореИрдВ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдХреНрдпрд╛ рдХреЛрдИ рдореБрдЭреЗ рд╕рд╣реА рджрд┐рд╢рд╛ рджрд┐рдЦрд╛ рд╕рдХрддрд╛ рд╣реИ?

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдореЗрд░реА рдмрдирд╛рд╡рдЯ 800x2000 рд╣реИред рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ 100x100 рдХреНрдпреВрдм рд╣реИ, рдореИрдВ 100x100 рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдЙрд╕ рдмрдбрд╝реА рдмрдирд╛рд╡рдЯ рдХреЛ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, 300x400 рдХреА рддрд░рд╣ рдСрдлрд╕реЗрдЯред рддреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣:

tex = THREE.ImageUtils.loadTexture('texture.png');
tex.left = 300
tex.top = 400

var pictureMaterial = new THREE.MeshBasicMaterial({map: tex});

рдХреНрдпрд╛ рдореБрдЭреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреИрдирд╡рд╕ рдмрдирд╛рд╡рдЯ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЖрд╣, рд╕рдЪред Texture рдореЗрдВ .scale , рдЗрд╕рдореЗрдВ .repeat ред рдЗрд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗ:

tex.repeat.x = 100 / 800;
tex.repeat.y = 100 / 2000;
tex.offset.x = ( 300 / 100 ) * tex.repeat.x;
tex.offset.y = ( 400 / 100 ) * tex.repeat.y;

рд╕рднреА 10 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдареАрдХ рд╣реИ, рдореИрдВ рд╡рд╣рд╛рдВ рдкрд╣реБрдВрдЪ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдСрдлрд╕реЗрдЯ рдФрд░ рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ 0 рдФрд░ 1 рдХреЗ рдмреАрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ, рдФрд░ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкрд┐рдХреНрд╕реЗрд▓ рдореЗрдВ рдХрдирд╡рд░реНрдЯ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдорд╛рди рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

tex = THREE.ImageUtils.loadTexture('texture.png');

tex.offset.x = ?
tex.offset.y = ?
tex.repeat.x = ?
tex.repeat.y = ?

рдорд╛рдорд▓реЗ рдореЗрдВ рдореЗрд░реЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рдкреЛрд╕реНрдЯ рдХрд░рдирд╛ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред рдореИрдВрдиреЗ рдмрдирд╛рд╡рдЯ рдХреЗ рд▓рд┐рдП рдХреИрдирд╡рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╡рд╣рд╛рдВ рдкрд░ рдЫрд╡рд┐ рдХреЛ рд▓реЛрдб / рдХреНрд░реЙрдк рдХрд┐рдпрд╛ред рдЕрдм рддрдХ рдареАрдХ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИред


canvas = document.createElement('canvas');
canvas.height=200;
canvas.width=200;

ctx = canvas.getContext('2d');
ctx.fillStyle = '#FFFFFF';  
ctx.fillRect(0, 0, 200, val.200);

//this is where we set the "offset"
offx = -1 * 200;
offy = -1 * 200;

//img is a standard loaded image object
ctx.drawImage(img,offx,offy);

tex = new THREE.Texture(canvas);

рдпрд╣ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк GPU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

tex.scale.x = 800 / 100;
tex.scale.y = 2000 / 100;
tex.offset.x = ( 300 / 100 ) * tex.scale.x;
tex.offset.y = ( 400 / 100 ) * tex.scale.y;

рдпрд╛ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ :)

рдардВрдбрд╛! рдкрд╛рд▓рди тАЛтАЛрдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж

Gpu рдкрд░ рдРрд╕рд╛ рдХрд░рдирд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЬрдм рдореИрдВ рдмрдирд╛рд╡рдЯ рдХреЗ рд╕реНрдХреЗрд▓.x рдЧреБрдг рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд░рд╣рддрд╛ рд╣реВрдБ, рддреЛ рдореБрдЭреЗ "x рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ"ред рдХреЛрдИ рд╡рд┐рдЪрд╛рд░? рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде tex.scale.set (w, h) рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдЬрд╝рдорд╛рдпрд╛ред

tex = THREE.ImageUtils.loadTexture(img.src);

scalex = img.width / 100;
scaley = img.height / 100;

tex.scale.x = scalex;
tex.scale.y = scaley;
tex = THREE.ImageUtils.loadTexture(img.src);

рдпрд╣ рдЕрдЬреАрдм рд╣реИ, рдЕрдЧрд░ рдЫрд╡рд┐ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ src рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓реЛрдб рд╣реЛ рдЪреБрдХрд╛ рд╣реИред рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХреНрдпреЛрдВ рд▓реЛрдб рдХрд░реЗрдВ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

tex = new THREE.Texture( img );

рдзрдиреНрдпрд╡рд╛рдж, рд╣рд╛рдБ рдмрд╕ THREE.Texture () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╕реАрдзреЗ img рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдЪреАрдЬреЛрдВ рдХреЛ рд╕реНрдкреНрд░реЗрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд▓рдЧрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрднреА рднреА tex.scale рд╕рдВрдЪрд╛рд▓рди рдкрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛ рд░рд╣реА рд╣реИред рд╡реИрд╕реЗ рднреА tex.repeat рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рд╣реИ? рдореИрдВ рдЙрди рдорд╛рдиреЛрдВ рдХреЛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддрд╛ред

рдЖрд╣, рд╕рдЪред Texture рдореЗрдВ .scale , рдЗрд╕рдореЗрдВ .repeat ред рдЗрд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗ:

tex.repeat.x = 100 / 800;
tex.repeat.y = 100 / 2000;
tex.offset.x = ( 300 / 100 ) * tex.repeat.x;
tex.offset.y = ( 400 / 100 ) * tex.repeat.y;

рдореИрдВ рдпрд╣рд╛рдВ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рд╣реВрдВ рдХрд┐ рдХреЗрд╡рд▓ рджреЛрд╣рд░рд╛рдиреЗ рдФрд░ рдСрдлрд╕реЗрдЯ рдЧреБрдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рд╡рдЯ рдХреЛ рдХреИрд╕реЗ рд╕реНрдХреЗрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП .. рд▓реЗрдХрд┐рди рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рд╕реНрдХреЗрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

@nightlifelover рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рджрд┐рд╢рд╛ рдирд┐рд░реНрджреЗрд╢реЛрдВ , рдорджрдж рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП stackoverflow ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

scrubs picture scrubs  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jens-duttke picture jens-duttke  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Bandit picture Bandit  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

clawconduce picture clawconduce  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

filharvey picture filharvey  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ