java-3D对象相遇的边缘和毛刺不均匀

java-3D对象相遇的边缘和毛刺不均匀,第1张

概述我正尝试将基于图块的游戏转换为3D游戏,从而直接进入我的第一个3D游戏.我正在使用libGDX的新3D类来完成此 *** 作.在这种情况下,我将每个图块渲染为一个盒子,将图块图中的每个块都转换为3D对象.它工作得相当好,但是当框共享一个边或角时,我收到了图形错误.这似乎在桌面项目上更好地

我正尝试将基于图块的游戏转换为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对象相遇的边缘和毛刺不均匀所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1075744.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存