GPU.js 计算多个对象 xyz 之间的距离?

问题描述

我尝试编写一些非常快速的逻辑来检测游戏中的所有碰撞。
所以我为此使用了 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 (将#修改为@)