问题描述
我尝试编写一些非常快速的逻辑来检测游戏中的所有碰撞。
所以我为此使用了 GPU.js 并且我的代码崩溃了,因为我试图在函数内部创建新的数组变量?
我需要常量(加载到 GPU/cpu 内存)中的所有对象的列表,这比使用新上下文的任何调用都要快。
import {GPU,KernelFunction,IKernelRunShortcut,IConstantsThis,IKernelFunctionThis,Texture} from 'gpu.js';
interface IConstants extends IConstantsThis {
elementsSize: number,elements: Array<[number,number,number]>,}
interface IThis extends IKernelFunctionThis {
constants: IConstants,}
const gpu = new GPU({mode: 'cpu'});
gpu.addFunction<number[]>(function distance(x1,y1,z1,x2,y2,z2) {
const dx = x1 - x2;
const dy = y1 - y2;
const dz = z1 - z2;
return Math.sqrt(dx * dx + dy * dy + dz * dz);
},{
argumentTypes: {x1: 'Float',y1: 'Float',z1: 'Float',x2: 'Float',y2: 'Float',z2: 'Float'},returnType: 'Float',});
const kernelMap = gpu.createKernel(function kernelFunction(this: IThis,objposition: [number,number]) {
// @ts-ignore
const d = distance(
this.constants.elements[0][0],this.constants.elements[0][1],this.constants.elements[0][2],objposition[0],objposition[1],objposition[2],)
const distances = []; // can't create here new variable
for (let i = 0; i < this.constants.elementsSize; i++) {
distances[i] = d;
}
return distances;
},{
argumentTypes: {objposition: 'Array(3)'},constants: <IConstants>{
elementsSize: 2,elements: [
[1,1,1],[2,2,2],// ... 100k elements
],},output: [1],pipeline: true,precision: 'single',immutable: true
})
const result = kernelMap([0,0]);
console.log(JSON.stringify(result,null,2));
如何从常量中检查所有对象并获得每个对象的结果距离?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)