问题描述
我想构建一个可以改变地板纹理的应用程序,我的想法是用我想要的纹理来修改白点扫描纹理。我尝试了这段代码,但是此刻它只改变了正在扫描的表面,因此当我移动手机时,它将失去以前的扫描。
如何维护扫描的表面,或以其他方式做我想做的事情?
class ShowModelActivity : AppCompatActivity() {
private lateinit var fragment: ArFragment
private lateinit var renderableSource: RenderableSource
private lateinit var path: Uri
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_show_model)
val model = intent.getStringExtra(MODEL)
val color1 = intent.getStringExtra(COLOR1)
val color2 = intent.getStringExtra(COLOR2)
setModel(model!!,color1!!,color2!!)
setSupportActionBar(toolbar)
supportActionBar?.setDisplayShowHomeEnabled(true)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
fragment = supportFragmentManager.findFragmentById(R.id.arFragment) as ArFragment
fragment.setOnTapArPlaneListener { hitResult,plane,motionEvent ->
createObject(hitResult.createAnchor())
}
//setPlaneTexture("floor_texture.png",fragment)
}
private fun setPlaneTexture(texturePath: String,fragment: ArFragment){
val sampler: Texture.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 {assets.open(texturePath)}
.setSampler(sampler)
.build().thenAccept { texture: Texture? ->
fragment.arSceneView.planeRenderer.material
.thenAccept { material ->
material.setTexture(MATERIAL_TEXTURE,texture)
material.setFloat(MATERIAL_UV_SCALE,10f)
}
}.exceptionally { ex: Throwable? ->
Log.e("SHOW MODEL","Failed to read an asset file",ex)
null
}
}
private fun createObject(anchor: Anchor) {
renderableSource = RenderableSource
.builder()
.setSource(this,path,RenderableSource.SourceType.GLB)
.setRecenterMode(RenderableSource.RecenterMode.ROOT)
.build()
ModelRenderable
.builder()
.setSource(this,renderableSource)
.setRegistryId(path)
.build()
.thenAccept(Consumer { modelRenderable: ModelRenderable ->
placeModel(
modelRenderable,anchor
)
})
}
private fun placeModel(modelRenderable: ModelRenderable,anchor: Anchor) {
val node = AnchorNode(anchor)
val transformableNode = TransformableNode(fragment.transformationSystem)
transformableNode.setParent(node)
transformableNode.renderable = modelRenderable
fragment.arSceneView.scene.addChild(node)
transformableNode.select()
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)