c_cpp [失败例]コンピュートシェーダで大量の立方体を回す

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp [失败例]コンピュートシェーダで大量の立方体を回す相关的知识,希望对你有一定的参考价值。

using UnityEngine;

public class ComputeCubes : MonoBehaviour
{
    [SerializeField]
    private ComputeShader _computeShader;

    private ComputeBuffer _buffer;

    /// <summary>
    /// 生成個数
    /// </summary>
    private int _cubeCount = 640;

    /// <summary>
    /// キューブ参照
    /// </summary>
    private GameObject[] _cubes;

    /// <summary>
    /// 各キューブの角度を格納配列
    /// </summary>
    private float[] _angles;

    private int _mainKernel = 0;

    void Start()
    {
        _cubes = new GameObject[_cubeCount];
        _angles = new float[_cubeCount];
        for (int i = 0; i < _cubeCount; i++)
        {
            var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
            // 配置範囲
            float len = 20f;
            cube.transform.localPosition =
                new Vector3(Random.Range(-len, len), Random.Range(-len, len), Random.Range(-len, len));
            _cubes[i] = cube;
        }

        _buffer = new ComputeBuffer(_cubeCount, sizeof(float));
        _mainKernel = _computeShader.FindKernel("CSMain");
        _computeShader.SetBuffer(_mainKernel, "Result", _buffer);
    }

    void Update()
    {
        // 現在の角度をシェーダにpush
        for (int i = 0; i < _cubeCount; i++)
        {
            _computeShader.SetFloat("eulerAngleX", _angles[i]);
        }

        // GPU並列処理実行
        _computeShader.Dispatch(_mainKernel, 8, 1, 1);

        var data = new float[_cubeCount];
        // 更新結果を取得
        _buffer.GetData(data);

        for (int i = 0; i < _cubeCount; i++)
        {
            float result = data[i];
            _angles[i] = result;
            _cubes[i].transform.localEulerAngles = new Vector3(_angles[i], 0, 0);
        }
    }

    private void OnDestroy()
    {
        _buffer.Release();
    }
}

以上是关于c_cpp [失败例]コンピュートシェーダで大量の立方体を回す的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 的HelloWorldコンピュートシェーダ

csharp コンピュートシェーダ的HelloWorld

[日文]中国語のコンピュータ用語を紹介する記事

python 「実践コンピュータビジョン」7章画像検索の読书会用コード

golang ツタンカーメン机器人(TUTコンピュータクラブ2015年度夏合宿成果)

c_cpp ランバートシェーダ(シェーダだけで完结)