javafx 3d第一人称摄影机透视形状

javafx 3d第一人称摄影机透视形状,java,javafx,javafx-8,javafx-3d,Java,Javafx,Javafx 8,Javafx 3d,我正在用javaFx8开发一个3d第一人称射击游戏。我在场景中用作墙的3DShapes方面遇到问题。有一种奇怪的效果,我可以透过一堵墙看到后面的另一面墙 我注意到我在组中添加墙的顺序确实会影响效果。 看起来列表中的最后一面墙的行为正常,当播放器相机指向它时,它保持不透明,但如果同一面墙在列表中的第一面,它将是透明的 启用场景的depthBuffer没有帮助,因为我知道这是用于重叠形状的,而我的情况不是这样。 也许我错过了什么。任何帮助都将不胜感激 问题说明: 公共类显示扩展了应用程序{ 专用最

我正在用javaFx8开发一个3d第一人称射击游戏。我在场景中用作墙的3DShapes方面遇到问题。有一种奇怪的效果,我可以透过一堵墙看到后面的另一面墙

我注意到我在组中添加墙的顺序确实会影响效果。
看起来列表中的最后一面墙的行为正常,当播放器相机指向它时,它保持不透明,但如果同一面墙在列表中的第一面,它将是透明的

启用场景的depthBuffer没有帮助,因为我知道这是用于重叠形状的,而我的情况不是这样。 也许我错过了什么。任何帮助都将不胜感激

问题说明:

公共类显示扩展了应用程序{
专用最终整数宽度=1920;
专用最终内部高度=1080;
私人团体阶段;
私人相机;
专用障碍平台;
私人玩家;
私密场景;
@凌驾
公共空间开始(舞台游戏世界){
平台=新障碍物(7000,7000,0,0,0,0);
玩家=新玩家(100,-3000,0,92.0);
摄像头=新的MyCamera(播放器);
initStage();
初始化场景();
initKeyListner(场景);
initMouseControl(舞台、场景);
游戏世界.setScene(场景);
GameWorld.show();
}
私有void initScene(){
场景=新场景(舞台、宽度、高度、true、sceneatialiasing.BALANCED);//true允许3D功能
场景。设置填充(颜色。白色);
scene.setCamera(camera.getCamera());
}
private void initStage(){
阶段=新组();
stage.getChildren().add(新环境光(Color.WHITE));
stage.getChildren().add(platform.getBody());
stage.getChildren().add(player.getBody());
障碍物墙1=新障碍物(60,7000,2003500,0,接地);
障碍墙2=新障碍物(7000,60,200,10,-3500,接地);
障碍物墙3=新障碍物(60,7000,200,-3500,0,接地);
障碍墙4=新障碍物(7000,60,200,10,3500,接地);
障碍墙5=新障碍物(600、2500、200、-2000、1600,地面);
障碍墙6=新障碍物(6002500020001600,地面);
障碍墙7=新障碍物(600250002002,-1600,地面);
障碍墙8=新障碍物(600、2500、200、-2000、-1600,地面);
groupgroupwall=新组(wall1.getBody(),wall2.getBody(),wall3.getBody(),
wall4.getBody(),wall6.getBody(),wall5.getBody(),wall7.getBody(),wall8.getBody();
groupWall.setId(“墙”);
stage.getChildren().add(groupWall);
}
公共静态void main(字符串[]args){
应用程序启动(args);
}
}
公共级MyCamera{
私人摄像机;
公共MyCamera(播放器){
摄像头=新透视摄像头(正确);
init(播放器);
}
public void init(玩家){
camera.getTransforms().addAll(新的Translate(0,player.getSize()/2,-30),新的Rotate(90,Rotate.X_轴));
摄像机。setFarClip(6000);
摄像头。setNearClip(0.01);
}
公共摄像机{
返回摄像机;
}
}
公共阶级障碍{
公共箱障碍;
公共障碍物(双w、双h、双深度、,
双xt、双yt、双zt){
障碍物=新箱子(宽、高、深);
setTranslation(xt、yt、zt);
}
公共无效集转换(双x、双y、双z){
障碍物:setTranslateX(x);
障碍物。setTranslateY(y);
障碍物。setTranslateZ(z);
}
公共框getBody(){
返回障碍;
}
}

很难说您所有的自定义类和资源都发生了什么。首先,不要设置
camera.setNearClip(0)
,而是设置
camera.setNearClip(0.01)
或类似设置。资源中是否使用透明度?纹理文件中没有透明层。如果我对墙壁和地面使用纯色而不是纹理,则无法解决问题。是否修复了近剪裁并进行了检查?是的,我尝试了0.01和0.1,但没有成功。必须启用深度缓冲以及近剪裁>0。请使用这些更改更新帖子,并验证问题是否仍然存在。