回答
可以使用直接设置其缓冲区的网格(或技术上的缓冲区;因为点网格不需要索引缓冲区,因为其他更复杂的网格物体需要可以创建一个点(与球体相对)。 How can I draw a straight line in the JMonkey Engine library)。网格创建记录为here。
使用网在三维空间中创建点下面是一个例子:
import com.jme3.app.SimpleApplication;
import com.jme3.material.Material;
import com.jme3.math.*;
import com.jme3.renderer.RenderManager;
import com.jme3.scene.*;
import com.jme3.util.BufferUtils;
public class Main extends SimpleApplication {
public static void main(String[] args) {
Main app = new Main();
app.start();
}
@Override
public void simpleInitApp() {
Vector3f[] lineVerticies=new Vector3f[5];
lineVerticies[0]=new Vector3f(2,0,0);
lineVerticies[1]=new Vector3f(-1,0,1);
lineVerticies[2]=new Vector3f(0,1,1);
lineVerticies[3]=new Vector3f(1,1,1);
lineVerticies[4]=new Vector3f(1,4,0);
plotPoints(lineVerticies,ColorRGBA.White);
}
public void plotPoints(Vector3f[] lineVerticies, ColorRGBA pointColor){
Mesh mesh = new Mesh();
mesh.setMode(Mesh.Mode.Points);
mesh.setBuffer(VertexBuffer.Type.Position, 3, BufferUtils.createFloatBuffer(lineVerticies));
mesh.updateBound();
mesh.updateCounts();
Geometry geo=new Geometry("line",mesh);
Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
mat.setColor("Color", pointColor);
geo.setMaterial(mat);
rootNode.attachChild(geo);
}
@Override
public void simpleUpdate(float tpf) {
//TODO: add update code
}
@Override
public void simpleRender(RenderManager rm) {
//TODO: add render code
}
}
这将创建pointVerticies内点如下图所示
如果你以后需要更新您可以在缓冲区中使用以下信息:
VertexBuffer posBuffer = mesh.getBuffer(Type.Position);
posBuffer.updateData(BufferUtils.createFloatBuffer(newData));
posBuffer.setUpdateNeeded();
mesh.updateCounts();
mesh.updateBound();
或者(更有效率),您可以将几何图形附加到节点并移动(取决于您的使用情况)。
注
在其最基本的状态下的顶点缓冲器预计X1,Y1,Z1,X2,Y2,Z2,X3 ....等与在一个顶点结束并且其它开始之间没有分界。所以下面的内容会输入3个顶点到缓冲区中; (1.1,1.2,1.3),(2.1,2.2,2.3)和(3.1,3.2,3.3)
m.setBuffer(VertexBuffer.Type.Position, 3, new float[]{1.1,1.2,1.3,2.1,2.2,2.3,3.1,3.2,3.3});
然而createFloatBuffer()
方法从阵列的Vector3f
成这种形式变换。
另外;它往往可以'脱身'不打电话mesh.updateBound();
,但没有它的对象可能会被淘汰,因为显卡认为他们在屏幕上时,他们实际上是可见的
谢谢。这个缓冲区似乎比例子更快。我在使用颗粒工厂,效率很低。我也开始使用缓冲区(几天前),但不是这样我也使用了颜色缓冲区。你知道任何其他类型的缓冲区吗? –
非常好,我认为这一切都取决于你的使用情况,如果你有一堆所有移动的点,这可能是要走的路。另一方面,如果所有点都独立移动,我认为粒子工厂会更好(但我没有数据支持这一点)。目前我主要使用三角形模式的网格来创建自定义的风景;这需要我设置位置缓冲区,索引缓冲区,TexCoord缓冲区,正常缓冲区和颜色缓冲区。我还没有使用任何其他的缓冲区,虽然 –
粒子工厂(或者它是发射器?)正在使用一个单独的算法来计算粒子随机旋转和一些alpha混合和一些其他我不需要的东西,使一些慢200k粒子后。但是你的缓冲方法很容易得到6M粒子。我在使用jocl在多个设备上进行opencl计算的N-body实验中使用它。 –
- 1. 如何在JMonkey引擎库中绘制直线
- 2. 在jmonkey引擎appstates中访问intent extras?
- 3. Java:在JMonkey中绘制3D点
- 4. 用JMonkey绘制矩形
- 5. 在JMonkey引擎中为Scala设置自动完成
- 6. 可以使用JMonkey引擎而不使用着色器吗?
- 7. 在JMonkey引擎中编辑启动屏幕
- 8. 画布引擎:绘制等轴测图
- 9. “绘制火柴人”引擎
- 10. 焦点引擎tvOS
- 11. 使用Angular的节点视图引擎
- 12. 游戏引擎vs图形引擎vs渲染引擎
- 13. iOS图形引擎
- 14. Javascript引擎的优点
- 15. 规则引擎 - 优缺点
- 16. 在绘图引擎中找到交叉线
- 17. 绘制引擎以创建贴子并保存图像
- 18. 如何用谷歌应用程序引擎绘制图像?
- 19. 使用Achart引擎绘制垂直折线图
- 20. 路径线绘制C/C++图形库/引擎?
- 21. 在基本的XNA引擎中优化绘图调用
- 22. OrgXML + Blender + JMonkey
- 23. jMonkey SimpleApplication设置
- 24. 的ActionScript 3.0绘图API问题
- 25. 绘图点
- 26. 绘图点
- 27. Innodb引擎和Myisam引擎
- 28. 使用assetManager.registerLocator无法看到图像(Jmonkey)
- 29. Vue.js ExpressJS视图引擎
- 30. 虚幻引擎4蓝图
您是否尝试过ImagePainter SDK插件? http://hub.jmonkeyengine.org/forum/topic/image-getpixelsetpixel-imagepainter-editing-jme3-images/page/4/#post-300344 –
谢谢,我没有尝试过,可能更快,但我已经去了opengl :) –