如何在渲染器中制作一个圆柱体

我一直在试图在renderscript中制作一个圆柱体。这是我试过的代码:

public Mesh cylinder(){
    float radius=1.25f, halfLength=5;
    int slices=16;

    Mesh.TriangleMeshBuilder mbo= new TriangleMeshBuilder(mRSGL,3, Mesh.TriangleMeshBuilder.TEXTURE_0);
    for(int i=0; i

但是,这段代码给了我一个长度为5的矩形。任何想法我都会出错?

0
额外 编辑
意见: 1

1 答案

这里你确实有一些问题。首先,你的角度总是等于2pi的倍数。计算角度时,需要除以扇区数。另外在这一步你有一个不必要的显式类型转换,java会处理你的整数转换为double。

其次,您不断在网格中添加相同的两个三角形,而不是为圆柱体的一侧添加任何三角形,而只是添加两个端面。在你的循环调用addTriangle()时,你应该使用索引,例如addTriangle(n,n + 1,n + 2)。

最后,当你创建第4个顶点时,你错过了一个负号,所以它实际上是halfLength,而不是-halfLength。

尝试这个:

public Mesh cylinder(){
    float radius=1.25f, halfLength=5;
    int slices=16;

    Mesh.TriangleMeshBuilder mbo= new TriangleMeshBuilder(mRSGL,3, Mesh.TriangleMeshBuilder.TEXTURE_0);

    /*vertex at middle of end*/
    mbo.addVertex(0.0f, halfLength, 0.0f);
    mbo.addVertex(0.0f, -halfLength, 0.0f);

    for(int i=0; i

我还添加了一个轻微的优化,只创建了一次圆心的顶点,从而节省了内存。这里的指数顺序是用于背面剔除。如果你想要正面,请将其反转。如果您的需求最终需要更高效的方法,分配构建器允许使用trifans和tristrips,但对于这种复杂性的网格来说,三角网格的易用性是值得的。我在我自己的系统上运行这个代码来验证它的工作原理。

0
额外
谢谢,那工作:)
额外 作者 Deepak Mittal,
没问题,乐意帮忙
额外 作者 Jared,