编辑:为了进行实时绘图,在opengl和opencl之间的"互操作性"中开始使用ljjgl(jmonkeyengine和jocl的基础),现在可以实时计算和绘制100k粒子.也许mantle版本的jmonkey引擎可以解决这个drawcall开销问题.
几天来,我一直在学习Eclipse(java 64位)中的jMonkey引擎(版本:3.0)并尝试使用GeometryBatchFactory.optimize(rootNode);
命令优化场景.
没有优化(具有改变球体位置的能力):
好的,只有1-fps来自pci-express带宽+ jvm开销.
通过优化(无法改变球体位置):
现在即使三角形数量增加也是29 fps.
Java3D有一种setCapability()
方法,即使在优化的形式下也能够读/写场景对象.jMonkey引擎3.0必须能够满足这个主题,但我找不到它的任何痕迹(搜索过的教程和示例,失败了).
问题:如何在jMonkey 3.0中设置场景节点的read/write position/rotation/scale
功能optimized
?如果你不能回答第一个问题,你能告诉我为什么在使用优化命令时三角数会增加吗?我是否必须创建一种新方法来访问图形卡并自己更改变量(可能是jogl?)?
场景信息:16k粒子(16x16 res的球体)+ 1点光源(以及4096分辨率的阴影).
我确信我们可以通过pci-express轻松地在几毫秒内发送数千个浮点数.
对于batchNode.batch();
优化的情况,这里再次使用减少的对象数1 fps:
对象编号现在只有几百个,但fps仍然是1!
将球体位置发送到gpu并让它计算顶点位置可能比计算cpu上的顶点以及向gpu发送大量数据更好.
这里没有人帮忙吗?已经尝试过batchNode但没有帮助.
我不想改变3d api,因为jMonkey人已经重新发明了轮子,我对目前的情况很满意.只是试图挤出更多的性能(取消阴影给出100%的速度,但质量也很重要!).
这个java程序将成为一个小行星撞击场景模拟器(将有小行星大小,质量,速度,角度的选择)与带有LOD的行进立方体算法(将是数百万个粒子).
Marching-cubes算法会大大减少三角形数.如果你无法回答这个问题,那么任何行进立方体(或任何O(n)凸包)算法都将被接受!数据:作为源的x,y,z数组和作为目标的三角形条形阵列(等面网格点)
谢谢.
以下是有关流的一些示例(分辨率低得多):
1)通过引力折叠立方体形状的岩石组:
2)排斥力开始显现:
3)排斥力+引力使得组形成更平滑的形状:
4)组形成一个球体(如预期的那样):
5)然后,一个大的恒星身体接近:
6)即将触摸:
7)影响的时刻:
借助Barnes-Hutt算法和截断电位,粒子数将增加10倍(可能超过100倍).
不是Marching-Cubes算法,包裹nbody的鬼布可以给出低分辨率的船体(比BH更容易但需要更多的计算)
鬼布会受到nbody(重力+排除)的影响,但是不会受到包裹它的布的影响.Nbody不会被渲染,但布料网格将以较低的triange数量渲染.
如果MC或以上工作,这将使程序渲染一个包裹布,大约200倍的粒子.
我对JMonkey感兴趣的一些有趣的项目,但当我搜索谷歌找到教程和文档时,我只能找到真正的基本和/或不完整的东西,比如这些在http://jmonkeyengine.org/上,或者真的具体那些.你知道JMonkey的一些"从初学者到专家"的教程吗?
在64位JVM上,在Linux中,无论本机库加载是什么,都会尝试加载32位库.
我问这是一个clojure和(甚至更多)java n00b.
我到目前为止找到的答案(在Leiningen/Clojure中使用lwjgl似乎是搜索结果中最突出的)似乎是旧版本的lein,问题围绕着:native-dependencies或project.clj中的LD_LIBRARY_PATH.
我正在重新发明轮子并将基本的jME教程翻译成clojure作为一个小的个人家庭作业,以学习它们.在迄今为止我发现人们如何做到这一点的所有教程和示例中,这部分似乎"正常工作".
(在Windows下,它对我来说很好用).
我正在使用lein构建一个新的空项目.我已经在clojars上设置了各种版本的jMonkeyEngine库的依赖项.在'lein deps'之后,liblwjgl64.so和libopenal64.so结束在我的项目目录的根目录中.
当我尝试'lein run'时,它会显示设置的Monkey splash屏幕,然后在尝试实际运行时抛出异常,因为它正在尝试加载liblwjgl.so.
该文件存在于target/native/linux和target/native/linux64下(但奇怪的是,不在target/native/linux32下).
如果我将它想要的文件复制到项目的根目录中,则错误会更改为"错误的ELF类:ELFCLASS32(可能的原因:架构字宽度不匹配)",这是Google一直在给我的另一组讨论.这里提到的解决方案似乎都相当于"切换到32位JVM以使Minecraft正常工作",但我更倾向于获得有关正在发生的事情的实际线索.
这个问题在我可以在clojars中得到的每一组依赖库都非常一致(回到版本2,无论如何......那些有更大的问题,似乎不值得深入研究).查尔斯污渍在窗户上为我设置了"Just Worked".
到目前为止,我能够提出的最好的假设是这样的:
我怀疑某个版本必须在某个时候指定.http://docs.oracle.com/javase/7/docs/technotes/guides/javaws/developersguide/syntax.html#resources提到了一个看起来非常合适的资源属性,但这似乎没什么用与JNLP合作.我想知道是否有一个明显的文件坐在.jar的某个地方我无法找到(这里是我的n00bishness发挥作用...我真的不知道我在寻找什么).
那么,有没有人有任何关于我应该看的地方或者我应该问什么的指示?我不知道甚至不知道从哪里开始.讨论jMonkeyEngine论坛,#clojure或者lwjgl邮件列表(或者他们使用的任何东西......我实际上根本没有考虑过他们的一面......我应该吗?)
接下来我将尝试将jME库捆绑到我自己的存储库中.这似乎是一项艰巨而艰巨的任务,当我正在解决这个问题时,我决定在这里提出要求.
我知道这很模糊,我为此道歉.我的google-fu让我失望了.我很感激任何人都可以提出任何建议.
提前致谢!
我正在尝试为Android制作一个简单的3D游戏,我想使用jmonkeyengine.我可以这样做吗?我该怎么做?有人能告诉我一个例子吗?
我最近开始使用jMonkey引擎,非常好.但是我试图实现相对引力.
我想制造围绕彼此旋转的行星(不一定是完美的圆形轨道,取决于速度).所以每个对象都应该影响其他对象.
我现在拥有的:
关闭全球引力
bulletAppState.getPhysicsSpace().setGravity(Vector3f.ZERO);
Run Code Online (Sandbox Code Playgroud)
初始化球体并添加到物理空间
Sphere sphere = new Sphere(50, 50, 5);
Geometry sun = new Geometry("Sun", sphere);
sun.setMaterial(stone_mat);
rootNode.attachChild(sun);
sun.setLocalTranslation(0, 0, 0);
sunPhysics = new RigidBodyControl((float) (50*Math.pow(10, 5)));
sun.addControl(sunPhysics);
bulletAppState.getPhysicsSpace().add(sunPhysics);
Geometry mercury = new Geometry("Mercury", sphere);
mercury.setMaterial(stone_mat);
rootNode.attachChild(mercury);
mercury.setLocalTranslation(15f, 0, 0);
mercuryPhysics = new RigidBodyControl((float) (5));
mercury.addControl(mercuryPhysics);
bulletAppState.getPhysicsSpace().add(mercuryPhysics);
Run Code Online (Sandbox Code Playgroud)
我注意到RigidBodyControl类中有方法setGravity,但它只是设置方向.所以对象就这样消失了.
我真的很期待找到答案.
我正在教我的孩子编程,看起来我已经把它缩小到两个选项:
我找不到任何"当前"的比较,所以我想我会问:
哪个更好的jME3 +或Unity4.3 +用于教学编程与引擎优势?
我不是游戏开发人员,但作为一名企业和控制系统开发人员,我在C#和Java方面都有经验.
我目前倾向于使用Unity4.3 +,因为:
从编程的角度来看,我认为C#比Java更干净,但如果引擎编码和对象模型鼓励编程不好,这意味着很少
引擎优势:Unity4.3 +将"据称"即将支持XBox One和PS4
注意:为了公平对待jME,我会记下jME的这个"pre-alpha state"iOS选项,它比营销"假设"更好:(http://hub.jmonkeyengine.org/wiki/doku.php/jme3:ios)
如果在所有其他方面它们相同,哪一个具有更好的服务集成?
你如何在Intellij IDEA中设置JMonkeyEngine.它没有在文档中指定(http://hub.jmonkeyengine.org/wiki/doku.php/).
我更喜欢C#作为Java语言,但我找不到类似jMonkey Engine for Java的东西.我希望能够简单地将块(在jMonkey引擎中称为Box)添加到我的世界而不是加载模型.
也许我只是遗漏了一些东西,但我没有在任何C#东西(OGRE,Axiom,XNA)中发现任何类似的东西.
我正在学习JME3,我设法创建自己的高度图并修改一些示例代码等.现在,我创建了一个非常简单的4墙无屋顶房间,带有Blender,将其导出为Wavefront .Obj文件并将其加载到我的场景(我将它攻击到terrain
节点.
现在,我terrain
已经应用了碰撞检测,因此玩家可以移动和跳跃,但它也可以穿过我模型的墙壁.我能找到的所有例子都加载了一个已经预先构建的场景,而我仍然无法知道为什么玩家会直接通过加载的模型?
对不起大代码,但我看不出别的怎么办.物理学应用于以下部分/** 6. Add physics: */
:
public class Main extends SimpleApplication
implements ActionListener {
private BulletAppState bulletAppState;
private RigidBodyControl landscape;
private CharacterControl player;
private Vector3f walkDirection = new Vector3f();
private boolean left = false, right = false, up = false, down = false;
private TerrainQuad terrain;
private Material mat_terrain;
public static void main(String[] args) {
AppSettings settings = new AppSettings(true);
settings.setResolution(1366, 768);
settings.setFullscreen(true);
Main app = new Main();
app.setSettings(settings);
app.setShowSettings(false);
app.start();
} …
Run Code Online (Sandbox Code Playgroud) 我们使用jme3,setMaxSlope
并且没有实现BetterCharacterControl的问题.引擎的开发人员说我们可以使用新的控制器自己解决它:
http://hub.jmonkeyengine.org/forum/topic/setmaxslope-for-bettercharactercontrol/
我真的很喜欢解决方案,因为我的游戏需要它.之前我问过它,但我们没有解决它:
你能帮助我们进步吗?我录制了一个有问题的视频:
http://www.youtube.com/watch?v=PF_UzoOXD0E
一些文档在这里:http://hub.jmonkeyengine.org/wiki/doku.php/jme3:advance: walking_character?s [] = bettercharactercontrol#bettercharactercontrol
我努力将功能添加到控制器:
package adventure;
import com.jme3.math.Vector3f;
import com.jme3.bullet.control.BetterCharacterControl;
public class GameCharControl extends BetterCharacterControl {
protected Vector3f lastlocation = new Vector3f();
public GameCharControl(float x, float y, float z) {
super(x, y, z);
}
@Override
public void update(float tpf) {
super.update(tpf);
System.out.println("location " + location);
System.out.println("lastlocation " + lastlocation);
if (location.equals(lastlocation)) {
System.out.println("update2");
this.setHeightPercent(101);
}
rigidBody.getPhysicsLocation(location);
applyPhysicsTransform(location, rotation);
lastlocation = location;
} …
Run Code Online (Sandbox Code Playgroud)