我想渲染球体,如下面附有锚点的图像所示。
不幸的是,所有示例均基于我不想使用的Sceneform。球体应该在空气中自由流动,而不要束缚在平坦的表面上。
借助Google的Hello_AR示例,我能够将3D球体渲染到空间中并通过将其附加到锚点进行固定。
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
...
backgroundRenderer.createOnGlThread(this);
virtualObject.createOnGlThread(this, "models/sphere.obj", "models/sphere.png");
virtualObject.setMaterialProperties(0.0f, 0.0f, 0.0f, 0.0f);
...
}
@Override
public void onDrawFrame(GL10 gl) {
...
// Get projection matrix.
float[] projmtx = new float[16];
camera.getProjectionMatrix(projmtx, 0, 0.1f, 100.0f);
// Get camera matrix and draw.
float[] viewmtx = new float[16];
camera.getViewMatrix(viewmtx, 0);
// Compute lighting from average intensity of the image.
// The first three components are color scaling factors.
// The last one is the average pixel intensity in gamma space.
final float[] colorCorrectionRgba = new float[] {255f, 0, 0, 255f};
frame.getLightEstimate().getColorCorrection(colorCorrectionRgba, 0);
// Visualize anchors created by touch.
float scaleFactor = 1.0f;
for (Anchor anchor : anchors) {
if (anchor.getTrackingState() != TrackingState.TRACKING) {
continue;
}
anchor.getPose().toMatrix(anchorMatrix, 0);
virtualObject.updateModelMatrix(anchorMatrix, scaleFactor);
float[] objColor = new float[] { 255f, 255f, 255f, 0 };
virtualObject.draw(viewmtx, projmtx, colorCorrectionRgba, objColor);
}
}
这样一来,我就可以在距离相机不远处1米处创建一个黑色球体。
我的问题:
这是一个好的/正确的方法吗?
如何更改球体的颜色,因为颜色值对对象没有影响
如何使其透明?
非常感谢你。
最佳答案
您需要将其附加到锚点。您不需要使用sceneform。 Sceneform只是两种方法之一。
在颜色和透明度方面,这取决于您服务对象的方式。在您的代码中,我看到您使用的是材质,因此很难更改颜色。
关于android - 不带Sceneform的Android ARCore渲染对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57386286/