我需要独特的可重复使用的ID.用户可以选择自己的ID,也可以要求免费.API基本上就是
class IdManager {
public:
int AllocateId(); // Allocates an id
void FreeId(int id); // Frees an id so it can be used again
bool MarkAsUsed(int id); // Let's the user register an id.
// returns false if the id was already used.
bool IsUsed(int id); // Returns true if id is used.
};
Run Code Online (Sandbox Code Playgroud)
假设ID恰好从1开始,进展,2,3等.这不是一个要求,只是为了帮助说明.
IdManager mgr;
mgr.MarkAsUsed(3);
printf ("%d\n", mgr.AllocateId());
printf ("%d\n", mgr.AllocateId());
printf ("%d\n", mgr.AllocateId());
Run Code Online (Sandbox Code Playgroud)
会打印
1
2
4
Run Code Online (Sandbox Code Playgroud)
因为id 3已经被声明使用了.
什么是最好的容器/算法,以记住使用哪些ID并找到一个免费的ID?
如果你想知道一个特定的用例,OpenGL的glGenTextures,glBindTexture和glDeleteTextures等同于AllocateId,MarkAsUsed和FreeId
我正试图在画布上做我的第一个图像动画.我希望图像旋转但我的代码中的某些内容不正确.有任何想法吗?这一切都在jquery文档中准备好了:
var canvas = document.getElementById('logobg1');
var ctx = canvas.getContext('2d');
var img = new Image(); // Create new Image object
img.src = 'images/containerbg.png'; // Set source path // set img src
img.onload = function(){ // when image loads
ctx.drawImage(img,0,0);
setInterval(function() {
ctx.save();
ctx.clearRect(-ctx.canvas.width/2, -ctx.canvas.height/2, ctx.canvas.width, ctx.canvas.height);
ctx.drawImage(img,0,0);
ctx.translate(ctx.canvas.width/2, ctx.canvas.height/2); // set canvas context to center
ctx.rotate(Math.PI / 180 * 0.5); // 1/2 a degree
ctx.restore();
}, 16);
}
Run Code Online (Sandbox Code Playgroud) 我是html5和three.js的新手.我一直在试验它,基本上我想做的就是有一个Mesh(我正在使用planeGeometry,正如我后面的教程所使用的那样).网格显示不同的纹理,可以在以后更改.
这是我的代码的样子:
angelTexture = THREE.ImageUtils.loadTexture("images/textures/chars/angel/angel.png");
angelTexture.offset.x = -0.75;
angelTexture.offset.y = -0.75;
angelMesh = new THREE.Mesh( new THREE.PlaneGeometry(79, 53, 79, 53), new THREE.MeshBasicMaterial( { map: angelTexture, wireframe: false } ));
angelMesh.position.x = 0;
angelMesh.position.y = 0;
scene.add(angelMesh);
Run Code Online (Sandbox Code Playgroud)
问题是每当我偏移时,Mesh看起来都足以显示所有其他Sprite(我将纹理用作2D Sprite,我将其偏移以对其进行动画处理).结果是非常灾难性的,我仍然在弄清楚如何控制Mesh的大小,以便它只显示Sprite的一个快照.我所有的尝试似乎只是调整网格和底层纹理的大小,仍然显示所有精灵.
有人能指出我正确的方向吗?提前致谢.
...
我的朋友提出了一个解决方案...我错过了重复属性.
angelTexture = THREE.ImageUtils.loadTexture("images/textures/chars/angel/angel.png");
angelTexture.offset.x = -0.75;
angelTexture.offset.y = -0.75;
angelTexture.repeat.x = 0.25;
angelTexture.repeat.y = 0.25;
scene.add(angelMesh);
Run Code Online (Sandbox Code Playgroud)
希望这有助于其他人遇到同样的问题.
我正在尝试一个简单的Three.js场景(这方面的新手).我正在使用Three.js WebGLRenderer并设置了一个平面,一个投射阴影和定向光源的立方体.结果显示在图像中.
我如何能:
1.提高阴影渲染的质量?
2.摆脱锯齿状的边缘?
我已将antialiasing设置为true,但它似乎对任何浏览器都没有帮助......
renderer = new THREE.WebGLRenderer({antialias:true});

我测试自己的路由处理程序没有问题,但在这种情况下我想测试express的静态处理程序.我无法为我的生活弄清楚为什么它会悬挂.显然,我缺少一些回调或者我需要发出一些事件.
我尽力做出最小的例子.
var events = require('events');
var express = require('express');
var stream = require('stream');
var util = require('util');
function MockResponse(callback) {
stream.Writable.call(this);
this.headers = {};
this.statusCode = -1;
this.body = undefined;
this.setHeader = function(key, value) {
this.headers[key] = value;
}.bind(this);
this.on('finish', function() {
console.log("finished response");
callback();
});
};
util.inherits(MockResponse, stream.Writable);
MockResponse.prototype._write = function(chunk, encoding, done) {
if (this.body === undefined) {
this.body = "";
}
this.body += chunk.toString(encoding !== 'buffer' ? encoding : undefined);
done();
};
function createRequest(req) {
var …Run Code Online (Sandbox Code Playgroud) 尝试打开本地 Unity WebGL 构建时,多个浏览器(Chrome、Firefox、Internet Explorer)会出现以下错误:
您的浏览器似乎不支持从 file:// url 运行 Unity WebGL 内容。请将其上传到 http 服务器,或尝试其他浏览器。
Microsoft Edge 能够运行它,但我想知道是否可以更改任何设置以使其在 Chrome/Firefox/其他浏览器上运行。
我在foo中设置了一个git repo
cd
mkdir foo
cd foo
git init
Run Code Online (Sandbox Code Playgroud)
现在我想远程引用它
git clone git+ssh://me@somemachine/home/me/foo.git
fatal: git remote error '/home/me/foo.git' does not appear to be a git repository
Run Code Online (Sandbox Code Playgroud)
所以我把.git关闭然后就可以了.但是我看到的几乎所有例子最后都有".git".那".git"是什么意思?
另外,ssh:// ...和git + ssh:// ...之间的区别是什么(在意义和实际意义上)
我试图使用Three.js渲染一个在面上有6个不同图像的立方体.
THREE.CubeGeometry的构造函数如下所示:
THREE.CubeGeometry = function ( width, height, depth, segmentsWidth, segmentsHeight, segmentsDepth, materials, sides )
Run Code Online (Sandbox Code Playgroud)
我可以从代码中看到,"材料"应该是一种材料,或者是一种由6种不同材料组成的阵列,但这里传递的材料在渲染时似乎永远不会被使用.
相反,给予Mesh构造函数的单个材质用于所有6个面.
var face_materials = ... <load 6 textures here>...
var cube_g = new THREE.CubeGeometry(400,400,400,1,1,1, face_materials); // <= ignored?
var cube = new THREE.Mesh(cube_g, some_material); // <= this is used instead
Run Code Online (Sandbox Code Playgroud)
即使我将null或undefined作为"some_material"传递,它似乎会覆盖face_materials并且不呈现任何内容.
有没有办法使用CubeGeometry来完成这项工作?或者我是否必须单独创建6个面并将它们添加到场景中?
我试图在一些基于THREE.js rev 49的代码中使用一些自定义着色器修复预先存在的错误.
我是一个完整的WebGL新手,所以我无法做出其他答案的多少或多少,因为他们似乎承担了比我更多的知识.我会非常感谢任何关于要寻找什么的提示!:)代码的最终结果是绘制一个半透明的框线框并用半透明纹理绘制面.
特别的错误是:
[.WebGLRenderingContext]GL ERROR :GL_INVALID_OPERATION : glDrawElements: attempt to access out of range vertices in attribute 1
我将问题追溯到_gl.drawElements( _gl.TRIANGLES, geometryGroup.__webglFaceCount, _gl.UNSIGNED_SHORT, 0 );THREE.WebGLRenderer.renderBuffer中的特定问题.
这是调用代码的片段:
scene.overrideMaterial = depthMaterial; // shaders below
var ctx = renderer.getContext(); // renderer is a THREE.WebGLRenderer
ctx.disable(ctx.BLEND);
// renderTarget is a THREE.WebGLRenderTarget, _camera, scene is obvious
renderer.render(scene, _camera, renderTarget, true); // error occurs here
Run Code Online (Sandbox Code Playgroud)
以下是相关着色器:
uniforms: {},
vertexShader: [
"varying vec3 vNormal;",
"void main() {",
"vec4 mvPosition = modelViewMatrix * vec4( position, …Run Code Online (Sandbox Code Playgroud) 在我的WebGL中,在JavaScript控制台中,我看到了警告
PERFORMANCE WARNING: Some textures are unrenderable.
Run Code Online (Sandbox Code Playgroud)
这是什么意思?
three.js ×4
javascript ×3
webgl ×3
animation ×1
antialiasing ×1
c++ ×1
express ×1
git ×1
html ×1
html5-canvas ×1
image ×1
mocking ×1
node.js ×1
rotation ×1
unit-testing ×1
unity-webgl ×1