第一步是创建AnchorNode
s的列表,以便能够获得Anchor
s的坐标。我们将在列表中添加所有这些坐标:
private final List<AnchorNode> anchorsList = new ArrayList<>();
然后在OnTapArPlaneListener
中,如果我们到达三个锚(或三个坐标),我们可以创建三角形。我们将生成我们的三角形作为ModelRenderable
:
final Anchor anchor = hitResult.createAnchor();
final AnchorNode anchorNode = new AnchorNode(anchor);
anchorNode.setParent(arFragment.getArSceneView().getScene());
anchorsList.add(anchorNode);
if (anchorsList.size() == 3) {
final Texture.Sampler sampler = Texture.Sampler.builder()
.setMinFilter(Texture.Sampler.MinFilter.LINEAR_MIPMAP_LINEAR)
.setMagFilter(Texture.Sampler.MagFilter.LINEAR)
.setWrapModeR(Texture.Sampler.WrapMode.REPEAT)
.setWrapModeS(Texture.Sampler.WrapMode.REPEAT)
.setWrapModeT(Texture.Sampler.WrapMode.REPEAT)
.build();
Texture.builder()
.setSource(() -> getAssets().open("wall.jpg"))
.setSampler(sampler)
.build()
.thenAccept(texture -> MaterialFactory.makeOpaqueWithTexture(this, texture)
.thenAccept(material -> {
final Node node = new Node();
final ModelRenderable triangle = makeTriangleWithAnchors(anchorsList, material);
node.setParent(arFragment.getArSceneView().getScene());
node.setRenderable(triangle);
})
);
}
下面是方法的详细信息makeTriangleWithAnchors()
:
private ModelRenderable makeTriangleWithAnchors(@NonNull final List<AnchorNode> anchorNodes, @NonNull final Material material) {
if (anchorNodes.size() != 3) throw new IllegalStateException("Different count of anchorsList than 3");
final Vector3 p0 = anchorNodes.get(0).getLocalPosition();
final Vector3 p1 = anchorNodes.get(1).getLocalPosition();
final Vector3 p2 = anchorNodes.get(2).getLocalPosition();
final Vector3 up = Vector3.up();
final UvCoordinate uvTop = new UvCoordinate(0.5f, 1.0f);
final UvCoordinate uvBotLeft = new UvCoordinate(0.0f, 0.0f);
final UvCoordinate uvBotRight = new UvCoordinate(1.0f, 0.0f);
final List<Vertex> vertices = new ArrayList<>(Arrays.asList(
Vertex.builder().setPosition(p0).setNormal(up).setUvCoordinate(uvTop).build(),
Vertex.builder().setPosition(p1).setNormal(up).setUvCoordinate(uvBotRight).build(),
Vertex.builder().setPosition(p2).setNormal(up).setUvCoordinate(uvBotLeft).build()
));
final List<Integer> triangleIndices = new ArrayList<>(3);
triangleIndices.add(0);
triangleIndices.add(2);
triangleIndices.add(1);
triangleIndices.add(0);
triangleIndices.add(1);
triangleIndices.add(2);
final RenderableDefinition.Submesh submesh = RenderableDefinition.Submesh.builder()
.setTriangleIndices(triangleIndices)
.setMaterial(material)
.build();
final RenderableDefinition renderableDefinition = RenderableDefinition.builder()
.setVertices(vertices)
.setSubmeshes(Arrays.asList(submesh))
.build();
final CompletableFuture future = ModelRenderable.builder()
.setSource(renderableDefinition)
.build();
final ModelRenderable result;
try {
result = (ModelRenderable) future.get();
} catch (InterruptedException | ExecutionException e) {
throw new AssertionError("Error creating renderable.", e);
}
if (result == null) {
throw new AssertionError("Error creating renderable.");
} else {
return result;
}
}
问题内容: 我需要知道如何在画布上绘制多边形。不使用jQuery或类似的东西。 问题答案: 使用和创建一个路径:
问题描述 (Problem Description) 如何使用GUI绘制多边形? 解决方案 (Solution) 下面的示例演示如何通过创建Polygon()对象来绘制多边形。 addPoint()和drawPolygon()方法用于绘制多边形。 import java.awt.*; import java.awt.event.*; import javax.swing.*; public cla
ARCore场景表单示例项目“hello场景表单”很酷,工作非常好。 问题是需要移动手机以获得一个放置锚的表面。太慢了。 我的应用程序不需要在垂直平面(墙)上显示任何东西,只需要在地板上显示。我是否可以跳过“移动手机”步骤,或者至少加快速度? 我试过: 认为如果我不需要寻找垂直面,那么一切都会更快。。。。。似乎还不够快。 谢谢
我需要在Mapbox Android SDK地图上绘制一个带孔的GeoJSON多边形。 正如GeoJSON规范所说, 对于类型“多边形”,“坐标”成员必须是线性环坐标数组的数组。对于有多个环的多边形,第一个必须是外环,其他必须是内环或孔。 在手册Mapbox JS和Mapbox GL JS中,加载GeoJSONs由库本身处理。从这把小提琴中可以看出,lib考虑了内环,因此正确地绘制了孔。 当我查看
我能够创建一个窗口,并清除到所需的颜色。但无法在左下角绘制正方形。
问题内容: 我在本教程中使用了六边形代码,并创建了一个createHex类(我应该发布代码吗?)。链接的网页已使用以下代码通过createHex中的数学运算实际绘制六边形: 我遇到的问题是Android没有包含所有必需方法的Graphics类。我在android文档上做了大约一个半小时的钓鱼,而我发现最接近的东西是Path类,但是它没有我需要的方法。我想在顶部的链接文章中使用六边形代码,但找不到等