我正尝试将基于图块的游戏转换为3D游戏,从而直接进入我的第一个3D游戏.我正在使用libGDX的新3D类来完成此 *** 作.
在这种情况下,我将每个图块渲染为一个盒子,将图块图中的每个块都转换为3D对象.它工作得相当好,但是当框共享一个边或角时,我收到了图形错误.
这似乎在桌面项目上更好地工作(似乎有时会发生,但不太严重):
但不是在android设备上:
此小故障取决于在块的屏幕上绘制位置.这在几种不同的androID设备上会发生,但在屏幕分辨率更高的设备上会更加明显.
这是我用来在主libGDX项目中呈现的代码:
@OverrIDepublic voID create() { modelBatch = new ModelBatch(); instances = new Array@R_419_6818@<Modelinstance>(); //Setup camera cam = new PerspectiveCamera(67, Gdx.graphics.getWIDth(), Gdx.graphics.getHeight()); cam.position.set(0, 0, 150f); cam.lookAt(0, 0,0); cam.near = 0.1f; cam.far = 500f; cam.update(); //Setup lighting environment = new Environment(); environment.set(new colorAttribute(colorAttribute.AmbIEntlight, 0.4f, 0.4f, 0.4f, 1f)); environment.add(new Directionallight().set(0.8f, 0.8f, 0.8f, -1f, -0.8f, -0.2f)); // Add Boxes addBox(new Vector3(-50,0,0)); addBox(new Vector3(-50,16,0)); addBox(new Vector3(-50,32,0)); addBox(new Vector3(-50,48,0)); addBox(new Vector3(50,48,0)); addBox(new Vector3(66,48,0)); addBox(new Vector3(82,48,0)); addBox(new Vector3(98,48,0));}private voID addBox(Vector3 position){ ModelBuilder modelBuilder = new ModelBuilder(); Model model = modelBuilder.createBox(16f, 16f, 16f, new Material(colorAttribute.createDiffuse(color.GREEN)), Usage.position | Usage.normal); Modelinstance mis = new Modelinstance(model); mis.transform.setTranslation(position); instances.add(mis);}@OverrIDepublic voID render() { Gdx.gl.glVIEwport(0, 0, Gdx.graphics.getWIDth(), Gdx.graphics.getHeight()); Gdx.gl.glClear(GL10.GL_color_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);// The next two lines seem to improve the problem. Problem is almost totally gone// I tweaked the values in glpolygonOffset to make it work better Gdx.gl20.glEnable(Gdx.gl20.GL_polyGON_OFFSET_FILL); Gdx.gl20.glpolygonOffset(0.1f,0.1f);// These make it worse!// Gdx.gl.glEnable(Gdx.gl20.GL_DEPTH_TEST);// Gdx.gl20.glDepthFunc(Gdx.gl20.GL_LEQUAL); // GL_LESS is default modelBatch.begin(cam); for(Modelinstance mi : instances) modelBatch.render(mi,environment); modelBatch.end();}
有任何想法吗?
编辑:
更改render()方法后,在手机上渲染(放大,减少不良边缘):
解决方法:
当两个对象在完全相同的深度处重叠时出现的问题称为“拼接”.
您可以通过使用polygon depth offset避免它.它基本上为绘制的多边形增加了一些额外的深度.您可能需要为要渲染的每个对象使用一个不同的值,该值可能会重叠.
Gdx.gl.glEnable(Gdx.gl10.GL_polyGON_OFFSET_FILL);Gdx.gl10.glpolygonOffset(1.0f, 1.0f);
有时调整深度功能也可能会有所帮助.我们希望对其进行调整,以在深度等于之前已渲染的深度时也渲染多边形.
Gdx.gl.glEnable(Gdx.gl10.GL_DEPTH_TEST);Gdx.gl10.glDepthFunc(GL10.GL_LEQUAL); // GL_LESS is default
总结 以上是内存溢出为你收集整理的java-3D对象相遇的边缘和毛刺不均匀全部内容,希望文章能够帮你解决java-3D对象相遇的边缘和毛刺不均匀所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)