2016-08-11 1 views
0

Donc j'essaie de comprendre le moyen le plus rapide que je peux changer par exemple 200 pixels séparés (chacun avec des couleurs uniques et dans des endroits différents) dans une texture en utilisant webgl.Le meilleur moyen de changer 20 à 200 pixels séparés dans une grande texture en webgl?

Est-il possible de transmettre les coordonnées et les valeurs de couleur au matériau afin qu'il puisse le faire en un seul passage? Ou y a-t-il une limite qui empêcherait de pouvoir faire cela?

+0

Dont 100% comprennent ce que vous essayez de faire, mais il est https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/texSubImage2D. –

+0

pour clarifier un peu - J'ai une grande texture, et j'ai besoin de changer différents pixels à l'intérieur. Donc, j'aurais une liste de coordonnées et de nouvelles valeurs de couleurs; (x: 5, y: 65) = rgb (1,20,50), (x: 45, y: 8) = rgb (10,50,70), ... etc J'ai fait des recherches et semble que je devrais stocker cela dans une autre texture, et utiliser une boucle for pour faire défiler les données? Ou y a-t-il un meilleur moyen? – user3591153

+0

Oui, vous utilisez simplement '.texSubImage2D'. Voir un autre commentaire pour plus de détails. –

Répondre

0

WaclawJasper suggéré d'utiliser .texSubImage2D, Voici comment je l'utilise.

var dataTypedArray = new Uint8Array(4); // Don't need to do this if the data is already in a typed array 
    dataTypedArray[0] = 0; 
    dataTypedArray[1] = 0; 
    dataTypedArray[2] = 255; 
    dataTypedArray[3] = 255; 

    gl.bindTexture(gl.TEXTURE_2D, texture); 
    gl.texSubImage2D(gl.TEXTURE_2D, 0, posX, posY, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, dataTypedArray);