小编gma*_*man的帖子

用于C++中唯一可重用的id的最快容器或算法

我需要独特的可重复使用的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

c++

12
推荐指数
1
解决办法
4607
查看次数

在画布中围绕其中心旋转图像

我正试图在画布上做我的第一个图像动画.我希望图像旋转但我的代码中的某些内容不正确.有任何想法吗?这一切都在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)

javascript animation image rotation html5-canvas

12
推荐指数
3
解决办法
3万
查看次数

Three.js使用2D纹理\ sprite进行动画制作(planeGeometry)

我是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)

希望这有助于其他人遇到同样的问题.

html javascript three.js

12
推荐指数
2
解决办法
2万
查看次数

Chrome/MacOS中Three.js影子的质量?

我正在尝试一个简单的Three.js场景(这方面的新手).我正在使用Three.js WebGLRenderer并设置了一个平面,一个投射阴影和定向光源的立方体.结果显示在图像中.

我如何能:

1.提高阴影渲染的质量?
2.摆脱锯齿状的边缘?

我已将antialiasing设置为true,但它似乎对任何浏览器都没有帮助......

renderer = new THREE.WebGLRenderer({antialias:true});

在此输入图像描述

antialiasing webgl three.js

12
推荐指数
2
解决办法
8670
查看次数

如何为express.static模拟http.ServerResponse和http.IncomingMessage

我测试自己的路由处理程序没有问题,但在这种情况下我想测试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)

javascript unit-testing mocking node.js express

12
推荐指数
1
解决办法
1457
查看次数

如何运行本地 Unity WebGL (file:// url) 构建?

尝试打开本地 Unity WebGL 构建时,多个浏览器(Chrome、Firefox、Internet Explorer)会出现以下错误:

您的浏览器似乎不支持从 file:// url 运行 Unity WebGL 内容。请将其上传到 http 服务器,或尝试其他浏览器。

Microsoft Edge 能够运行它,但我想知道是否可以更改任何设置以使其在 Chrome/Firefox/其他浏览器上运行。

unity-game-engine unity-webgl

12
推荐指数
3
解决办法
3万
查看次数

".git"在git URL中的含义是什么?

我在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:// ...之间的区别是什么(在意义和实际意义上)

git

11
推荐指数
2
解决办法
3035
查看次数

如何在Three.js立方体中使用多种材质?

我试图使用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

11
推荐指数
1
解决办法
2万
查看次数

WebGL GL错误:GL_INVALID_OPERATION:glDrawElements:尝试访问属性1中的范围外顶点

我试图在一些基于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 three.js

11
推荐指数
1
解决办法
2万
查看次数

Chrome中的"性能警告:某些纹理是不可渲染的"是什么意思?

在我的WebGL中,在JavaScript控制台中,我看到了警告

PERFORMANCE WARNING: Some textures are unrenderable.
Run Code Online (Sandbox Code Playgroud)

这是什么意思?

webgl

10
推荐指数
1
解决办法
3616
查看次数