Tag: 3d

取消投影鼠标以获取3D世界坐标Libgdx

我的问题:如何使用鼠标光标移动3D模型,使模型的y位置保持为0.(使用Libgdx) 我尝试过:我正在尝试让我的3D模型跟随我的光标。 目前我只是简单地使用鼠标的x和y坐标移动模型,并添加乘数和摄像机位置等因子。 这不是很好,因为它不跟随光标,如果我旋转相机,那么模型不会以正确的方向移动。 这是我为移动模型而创建的代码: instances.get(modelIndex).transform.setToTranslation(((Gdx.input.getX()-650)/10) + cam.position.x,0,((Gdx.input.getY()-400)/10)+ cam.position.z); 这是一个问题图像的链接(绿色圆圈是鼠标所在的位置)。 我知道我错了,我应该使用unproject方法。 我试图使用unproject方法并没有取得什么成功,模型只是粘在相机的近窗格上。 我希望我的对象在y轴上保持为0,所以我使用了这个: cam.unproject(mousePos); instances.get(modelIndex).transform.setToTranslation(mousePos.x, 0, mousePos.z); 然后,这导致模型在正确的方向上移动得非常缓慢(不是用鼠标)。 此外,当我旋转或移动相机时,模型将被设置在距离的某处或者甚至在相机后面。

通用简单3D矩阵旋转问题

我的3D对象上的旋转有问题(它在java中但它并不重要) 的背景: 我有一个简单的3D模型,你是它上面的第一人称游戏,你向上移动鼠标向上移动(IE按3D的x轴旋转)并向下移动鼠标向下看(向相反方向旋转) 但: 我还有左右箭头键左/右转动(旋转3D的y轴) 现在问题是,当我转动时,当我按x轴旋转时,它不再按预期转动,即如果你转动180度,通过向下移动鼠标实际上是向上看,如果你向上移动鼠标,你实际上看起来下。 我可以在x / y轴上执行什么旋转来修复此问题? – 无论我转动了多少/一点点,向上移动鼠标都会向上移动,向下移动鼠标会向下看。 对不起,我无法更好地解释,但如果您需要更多信息,请发表评论。 非常感谢, 这可能是一个简单的转变,但我想不到:( 一些Java旋转代码: 鼠标向上/向下: public void rotateXY(double radians, double Yradians) { vpTrans.getTransform(T3D); Transform3D test = new Transform3D(); Transform3D testX = new Transform3D(); Transform3D testY = new Transform3D(); translate.set(lastXcord, lastYcord, lastZcord); testX.rotX(radians); testY.rotY(Yradians); test.mul(testX, testY); test.setTranslation(translate); vpTrans.setTransform(test); //System.out.println(test); } // end of rotateXY() 左:(右边是相似但在角度变化时使用减号而不是加号) […]

是否可以在Netbeans 7.0应用程序中使用Jzy3D?

好吧,所以我们试图在我们的Netbeans 7.0项目中加入3D散点图,我们选择测试的其中一个库是Jzy3D。 看起来它会像我们需要的那样做,但不幸的是,它没有做任何事情。 我已经正确安装了JOGL,并对其进行了测试并发现它正常工作。 然后我包含了与demo中相同的依赖项。 我也尝试过直接包含.jars。 是的,gluegen-rt.jar在库文件夹中。 编辑:为了让JOGL工作,我们不得不大量修改构建设置。 老实说,我的老板做了大部分工作,所以我还不完全确定如何复制它。 现在,我正在尝试将图表放在JFrame中,而Jzy3D库中的FrameSwing扩展会出现以下错误: 线程“main”中的exceptionjava.lang.ClassCastException:org.jzy3d.plot3d.rendering.canvas.CanvasAWT无法强制转换为javax.swing.JComponent 在org.jzy3d.bridge.swing.FrameSwing。(FrameSwing.java:36) at scratchwork.My3DChart.main(My3DChart.java:40) 我会继续努力,但如果有人知道什么是错的,那就知道了。 更新:似乎CanvasAWT是从Canvas扩展而来的,它是从Component扩展而不是JComponent。 这似乎是问题,我已经将它提交给了Jzy3D作者。

在已知的缺失时间间隔之间插值3D坐标

数据是空间中的路径。 我有3D位置数据(x,y,z)和记录位置点的时间。 x,y和z坐标是穿过3D Space的物体的点位置。 时间值是记录每个点的时间(从0开始)。 xyz time(s) 0.1 2.2 3.3 0 2.4 2.4 4.2 0.3 4.5 2.5 1.8 0.6 我最终会错过一些录音活动。 (这是已知的并且被接受为真)并且数据流将以不同的时间间隔继续: xyz time(s) 0.1 2.2 3.3 0 2.4 2.4 4.2 0.3 //missing x,y,z data point at time 0.6 //missing x,y,z data point at time 0.9 4.5 2.5 1.8 1.2 … … 请注意,数据已经简化。 我的目标是在已知的丢失时间内插入缺失的3D点。 我已经研究了各种插值技术,但我不完全确定哪种插值方法适合我的问题。 1)有人可以简洁地解释这是什么问题吗? […]

在java3d中面部着色

使用java3d,我怎样才能在每个顶点基础上而不是在每个基础上进行着色? 我试着了解java3d但是我生产的Shape3d看起来并不像预期的那样。 我想用不同的颜色着色不同的三角形,但我不知道如何做到这一点。 纹理看起来像是一种矫枉过正,更重要的是,我根本没有掌握这一部分。 据我所见,材料在一个完整的GeometryArray上工作,所以这里没有好处。 每个顶点颜色都不会起作用。

使用xyz坐标和jzy3d构建三维曲面图

我一直在寻找一种方法将coord(x,y,z)列表发送到jzy3d。 但没有成功。 我发现的唯一方法是使用带有“coord3d”和“tesselator”列表的“构建器”,但它实际上不起作用。 事实上,我不是真正理解Tesselator的意思吗? 这是我试过的代码: public Chart getChart(){ List coordinates = new ArrayList(); for(int i=0; i<200; i++) coordinates.add( new Coord3d(5, 10, 15) ); Tesselator tesselator = new Tesselator() { @Override public AbstractComposite build(float[] x, float[] y, float[] z) { return null; } }; tesselator.build(coordinates); org.jzy3d.plot3d.primitives.Shape surface = (Shape)Builder.build(coordinates, tesselator); /*/ Define a function to plot […]

Libgdx如何通过电话方向在多个轴上旋转3D模型

我正在尝试使用手机的加速度计一次在多个轴上旋转3D模型。 当我这样做时,我使用setToRotation()但是,这一次只能做一个轴。 例如: ModelInstance modelInstance = instances.first(); //ROLL modelInstance.transform.setToRotation(Vector3.Z, phoneAccel.y*9); //PITCH modelInstance.transform.setToRotation(Vector3.X, phoneAccel.z*9); 手机处于强制横向模式。 我得到了我想要旋转的模型的实例。 我根据Gdx.input.getAccelerometerX/Y/Z()设置了Vector3 phoneAccel 。 在上面的示例中,两行代码都正常工作,但只能独立工作。 当我尝试使用两者(一个接一个)时,第一次旋转(ROLL)被移除。 我原本认为两个旋转矩阵将累积,即Z轴应用旋转,然后X轴应用旋转。 我是否需要创建自己的累积旋转矩阵,然后在最后应用它? 有什么想法吗? 干杯

无法在libgdx中批处理多维数据集

我正在尝试开发一种游戏,我在屏幕上渲染多达300个立方体。 在为每个多维数据集创建新的modelInstance时,modelBatch的性能非常糟糕。 据我所知,没有3D批处理将所有立方体批量分配到一个绘图调用。 所以我拼命地尝试以某种方式批量处理它们。 这个问题与此直接相关: LibGDX 3D增加性能 发布的答案成功批量处理所有多维数据集,但是当添加环境以获得某些照明时,看起来立方体缺少侧面或其他东西是错误的。 下图是: 这是我的立方体类(几乎从上面的答案复制) public class Cube { int index; int vertexFloatSize; int posOffset; int norOffset; boolean hasColor; int colOffset; private Vector3 position = new Vector3(); private Matrix4 rotationTransform = new Matrix4().idt(); private Color color = new Color(); public float halfWidth, halfHeight, halfDepth; private boolean transformDirty = false; private […]

Libgdx ModelBuilder.createRect仅从一侧可见

在我的第一个libgdx 3D游戏中,我现在从createBox切换到createRect ,仅创建可createBox (如果墙在另一面墙的左侧,则其右面不可见……)。 我正在创建4个模型: frontFace backFace rightFace leftFace 它们几乎是他们实际应该如何绘制的。 但是有一个大问题:只有当我看向正z-Direction才能看到侧面。 如果我看另一边(负z-Direction ),他们不画画。 正面和背面只绘制,如果我在负x-Direction看它们。 这与法线有关吗? 我把它们设置为: normal.x = 0; normal.y = 1; normal.z = 0; 这是错误吗? 我该如何设置法线? 他们代表什么? 关于照明的法线贴图,我有一些基本的想法,是一样的吗? 重要提示:我已禁用背面剔除,但没有任何区别。 查看视锥体剔除已打开。 如果需要更多信息,请发表评论,我会尽快添加。 谢谢

Java3D:在Canvas3D上绘制2D HUD

我正在使用Java3D来渲染三维场景。 我想在3D图像的顶部覆盖二维“抬头显示”。 如何在3dcanvas上高效绘制2D内容? 谢谢!