首页 > 解决方案 > 如何更改arcore sceneform中所选模型的颜色?我正在使用颜色选择器

问题描述

//该方法用于创建锚节点

private void addNodeToScene(ArFragment 片段,Anchor 锚,Renderable 可渲染) { AnchorNode anchorNode = new AnchorNode(anchor); TransformableNode 节点 = new TransformableNode(fragment.getTransformationSystem()); node.setRenderable(可渲染);node.setParent(anchorNode); fragment.getArSceneView().getScene().addChild(anchorNode); 节点选择();颜色颜色=新颜色();lRenderable = 可渲染;

     //this using the given method to change color
    //renderable.getMaterial(1).setFloat3("baseColorTint", 1, 1, 0);

}

// 我正在使用颜色选择器来生成 r,b,g

objimage.setOnTouchListener(new View.OnTouchListener()

{ @Override

public boolean onTouch(View v, MotionEvent 事件)

{

if (event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_MOVE)

  {
     if (objimage.getWidth() > event.getX() && event.getX() > 0 && event.getY() > 0 && 

objimage.getHeight() > event.getY())

{

                    bmap = objimage.getDrawingCache();

int 像素 = bmap.getPixel((int) event.getX(), (int) event.getY());

                     //getting rbg
                    float r = red(pixel);
                    float b = Color.blue(pixel);
                    float g = Color.green(pixel);

                  if (  lRenderable!=null  )
                    {

                                          //set the rbg but i dont know how to use it properly
                        lRenderable.getMaterial().setFloat3("baseColorTint", new Color( r,  g,  b));

                 }

                }
            }

          return true;
        }
    });

标签: androidaugmented-realityarcore

解决方案


您可以按如下方式设置可渲染对象的颜色 - 本质上这是制作原始可渲染对象的副本,然后更改其颜色:

ModelRenderable newColorCopyofRenderable = originalRenderable.makeCopy();
newColorCopyofRenderable.getMaterial().setFloat3("baseColorTint", 
                  new Color(android.graphics.Color.rgb(255,0,0)));
yourAnchroNode.setRenderable(newColorCopyofRenderable);

您可以在这里看到一个工作示例 - 当您在此应用程序中触摸一个节点时,它的颜色将从绿色变为红色:https ://github.com/mickod/LineView


推荐阅读