JavaScript二元运算符
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JavaScript二元运算符,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2633字,纯文字阅读大概需要4分钟。
内容图文
在WebGL项目上工作,我正在查看类示例中的代码.在其中一个循环中,给出了以下代码:
var c = (((i & 0x8) == 0) ^ ((j & 0x8) == 0));
变量i和j在for循环中上升到某个值.这句话是什么意思?这是否确保变量c是十六进制形式?
var texSize = 64;
var image1 = new Array();
for (var i =0; i<texSize; i++)
image1[i] = new Array();
for (var i =0; i<texSize; i++)
for ( var j = 0; j < texSize; j++)
image1[i][j] = new Float32Array(4);
for (var i =0; i<texSize; i++)
for (var j=0; j<texSize; j++)
{
var c = (((i & 0x8) == 0) ^ ((j & 0x8) == 0));
image1[i][j] = [c, c, c, 1];
}
解决方法:
SMchrohan的回答是正确的.代码基本上是一个棋盘纹理.
?? ?? &安培; 0x8表示当第3位(0,1,2,3)为真时表达式为真.二进制中的位3是每隔一组8个值为真(0-7为假,8-15为真,16-23为假等).
然后代码与== 0相反.
它适用于i和j.
^表示异或 – 当两个部分不同(true,false或false,true)时为true,当它们都相同时为false(false,false或true,true).因为^是一个按位运算符,所以这两个值首先转换为整数,因此false变为0,true变为1.然后,2个int值的位被排除在外
0 ^ 0 = 0
1 ^ 0 = 1
0 ^ 1 = 1
1 ^ 1 = 0
这意味着image1中的每个条目都是[0,0,0,1]或[1,1,1,1]
这里有一些代码来绘制它
var texSize = 64;
var image1 = new Array();
for (var i =0; i<texSize; i++)
image1[i] = new Array();
for (var i =0; i<texSize; i++)
for ( var j = 0; j < texSize; j++)
image1[i][j] = new Float32Array(4);
for (var i =0; i<texSize; i++)
for (var j=0; j<texSize; j++)
{
var c = (((i & 0x8) == 0) ^ ((j & 0x8) == 0));
image1[i][j] = [c, c, c, 1];
}
// lets plot it
var ctx = document.createElement("canvas").getContext("2d");
document.body.appendChild(ctx.canvas);
ctx.canvas.width = texSize;
ctx.canvas.height = texSize;
for (var i =0; i<texSize; i++)
for (var j=0; j<texSize; j++)
{
var c = image1[i][j][0]
ctx.fillStyle = c ? "red" : "yellow";
ctx.fillRect(i, j, 1, 1);
}
canvas { border: 1px solid black; }
<body></body>
请注意,代码似乎没有多大意义.它说texSize所以它似乎正在制作一个纹理,但它每个像素制作一个Float32Array(说的那条线)
image1[i][j] = new Float32Array(4);
然后它在这一行用一个JavaScript本机数组替换每个单独的Float32Arrays
image1[i][j] = [c, c, c, 1];
这使得Float32Array系列毫无用处.
最重要的是,我不知道1像素Float32Arrays的数组或数组是多少.您无法将其上传到WebGL.
通常我会为这样的整个纹理制作一个Uint8Array
var texSize = 64;
var pixels = new Uint8Array(texSize * texSize * 4);
for (var i =0; i<texSize; i++) {
for (var j=0; j<texSize; j++) {
var c = (((i & 0x8) == 0) ^ ((j & 0x8) == 0));
var p = c ? 255 : 0;
var offset = (i * texSize + j) * 4;
pixels[offset + 0] = p; // red
pixels[offset + 1] = p; // green
pixels[offset + 2] = p; // blue
pixels[offset + 3] = 255;// alpha
}
}
或者我使用2D画布API来制作纹理
没有一些上下文虽然我不知道代码的最终目的是什么.
内容总结
以上是互联网集市为您收集整理的JavaScript二元运算符全部内容,希望文章能够帮你解决JavaScript二元运算符所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。