【问题标题】:How can I convert an ArrayList<Vector3f> to a ByteBuffer?如何将 ArrayList<Vector3f> 转换为 ByteBuffer?
【发布时间】:2015-05-08 18:39:21
【问题描述】:

我正在尝试使用 JBullet 创建一个 TriangleIndexVertexArray,但为此我需要解析模型中所有顶点的 ByteBuffer

我有一个模型中所有顶点的ArrayList&lt;Vector3f&gt;

如何将Vector3f 的列表解析为ByteBuffer

【问题讨论】:

    标签: java arraylist nio bytebuffer


    【解决方案1】:

    你可以这样做

    声明你的顶点

    ArrayList<Vector3f> verticesnew = new ArrayList<Vector3f>();
    

    设置你的顶点

    vertices.add( new Vector3f(someVertice) );
    

    从顶点获取浮点缓冲区:

    // There are 3 floats needed for each vertex (x,y,z)
    int bufferSize = vertices.size() * 3 * Float.SIZE;
    FloatBuffer verticesBuffer = ByteBuffer.allocateDirect( bufferSize ).order( ByteOrder.nativeOrder() ).asFloatBuffer();
    
    // Copy the values from the list to the direct float buffer
    for ( Vector3f v : vertices )
        verticesBuffer.put( v.x ).put( v.y ).put( v.z );
    

    【讨论】:

    • 我特别需要传递一个 ByteBuffer,而不是 FloatBuffer。这是个问题吗?
    • 检查 this 将 FloatBuffer 转换为 ByteBuffer。
    • 如果我明白你的意思,你需要FloatBuffer。因为ByteBuffer 只是获得结果的中间人。也检查this
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    相关资源
    最近更新 更多