在JavaScript中以编程方式为WebGL生成纹理
我有以下代码以编程方式在C中为WebGL生成纹理。我需要在JavaScript中为WebGL做同样的事情 如何正确创建三维棋盘矩阵在JavaScript中以编程方式为WebGL生成纹理,javascript,opengl-es,textures,webgl,Javascript,Opengl Es,Textures,Webgl,我有以下代码以编程方式在C中为WebGL生成纹理。我需要在JavaScript中为WebGL做同样的事情 如何正确创建三维棋盘矩阵 GLubyte checkerboard[64][64][3]; 如何设置值 checkerboard[i][j][0] = (GLubyte) c; 如何使用WebGL中生成的纹理正确调用gl.texImage2D() gl.texImage2D( gl.TEXTURE_2D, 0, gl.RGB, 64, 64, 0, gl.RGB, gl.UNSIGNED
GLubyte checkerboard[64][64][3];
如何设置值
checkerboard[i][j][0] = (GLubyte) c;
如何使用WebGL中生成的纹理正确调用gl.texImage2D()
gl.texImage2D( gl.TEXTURE_2D, 0, gl.RGB, 64, 64, 0, gl.RGB, gl.UNSIGNED_INT, checkerboard);
以下是C语言中的当前代码
void CreateTextures() {
GLubyte checkerboard[64][64][3];
int i, j, c;
for (i=0; i<64; i++) {
for (j=0; j<64; j++) {
c = ((i & 8) ^ (j & 8))*255;
checkerboard[i][j][0] = (GLubyte) c;
checkerboard[i][j][1] = (GLubyte) c;
checkerboard[i][j][2] = (GLubyte) c;
}
}
glGenTextures( 1, &checkerboardTexture);
glBindTexture(GL_TEXTURE_2D, checkerboardTexture);
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, 64, 64, 0, GL_RGB, GL_UNSIGNED_INT, checkerboard);
}
void CreateTextures(){
GLubyte棋盘[64][64][3];
int i,j,c;
对于(i=0;i您不创建多维数组,而是创建一个
如下所示的一维数组:
var checkerboard=[]
在纹理数组中,每个像素将占据4个元素:红色、绿色、蓝色、,
和alpha,按这个顺序。下面是一个如何填充每个像素的示例:
// Width is 64 pixels
checkerboard[(i*64+j)*4] = c; // Red component
checkerboard[(i*64+j)*4+1] = c; // Green component
checkerboard[(i*64+j)*4+2] = c; // Blue component
checkerboard[(i*64+j)*4+3] = 0xff; // Alpha component
接下来,将数组转换为字节数组:
checkerboard=new Uint8Array(checkerboard);
最后,生成纹理。
另外请注意,您通常不能在WebGL中使用gl.RGB
,
而是gl.RGBA
。这需要为每个像素增加一个字节
α分量:
gl.texImage2D( gl.TEXTURE_2D, 0, gl.RGBA,
64, 64, 0, gl.RGBA, gl.UNSIGNED_BYTE, checkerboard);
还有一件事:默认情况下,WebGL自顶向下存储纹理,这
可能不同于OpenGL。使用自下而上
在任何texImage2D
命令:
gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, 1);
gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, 1);