我在过去几天的空闲时间里一直在研究Maven,但似乎无法弄清楚如何组织项目以便使用JOGL库.我最好喜欢以下内容:
我认为我的问题的一部分是我不完全理解JOGL的使用,在运行代码时放置本机库的位置等等.我需要回到基础并编写一个JOGL hello世界,从中编译它命令行并从命令行运行它,以确切了解它对本机库的目录放置所需的内容; 实际上,我现在可能会这样做.
在第1项中,我发现了一些特定于操作系统的功能; 可以基于系统的属性(包括操作系统)激活Maven配置文件.那么我就可以激活一个Windows配置文件,该配置文件具有Windows特定的JOGL库的依赖性,对于Linux也是如此,并且都具有64位的改变自我.(激活官方文档/非官方文档.)
我尝试创建一个基于JOGL jar文件的Maven存储库,然后添加JOGL jar文件项目作为我项目的依赖项; 依赖项已下载,但未使用.我不知道jar文件在哪里或如何使用它,解压缩等等.这是我使用的命令.
简而言之:JOGL由四个.jar文件和一些本机库组成.如何将这些文件集成到我的Maven项目中,以便我可以使用Maven编写JOGL应用程序来处理我的构建过程?此外,我如何根据操作系统使用不同的文件集,因为Windows,Linux和Mac之间的本机库甚至.jar文件当然不同.
我正在寻找一些物理模拟,我需要在Java中快速渲染.
我过去遇到过Java2d的性能问题,那么快速的选择是什么?JOGL明显比Java2d快吗?
我感兴趣的是关于速度的信息sin()
,并cos()
在Open GL的着色语言.
所述GLSL规范文献表明:
内置功能基本上分为三类:
- ...
- ...
- 它们代表一种操作图形硬件可能在某些时候加速.三角函数属于这一类.
编辑:
正如已经指出的那样,像计算单个操作的时钟周期sin()
,并cos()
没有真正告诉整个故事的性能.
因此,为了澄清我的问题,我真正感兴趣的是,是否值得优化sin()
并cos()
呼吁常见案例.
例如,在我的应用程序中,参数将是非常常见的0
.这样的事情是否有意义:
float sina, cosa;
if ( rotation == 0 )
{
sina = 0;
cosa = 1;
}
else
{
sina = sin( rotation );
cosa = cos( rotation );
}
Run Code Online (Sandbox Code Playgroud)
或将GLSL
编译器或sin()
与cos()
实现照顾优化像我吗?
尝试从gdb运行java应用程序导致segfault,但单独运行app却没有.这个应用程序是.JAR,它使用JOGL和一些内存映射来与GPU通信.
下面的Stacktrace暗示了某种内存访问问题,但我不明白它为什么会出现在GDB中而不是现实生活中.是否有一些环境因素gdb需要知道才能正确执行?
这个问题在JVM OpenJDK 6和7以及Oracle JRE 7之间仍然存在.在启用segfault之前,oracle JRE在启动时运行得更远.所有段错误在试验之间的发生和位置都是一致的.
Segfault在GPU和驱动程序之间持续存在(!!):nvidia,radeon,fglrx current和fglrx beta(14.xx).GDB将成功附加到已经运行的程序实例,但是gDEBugger似乎不可能这样做,这最终需要工作.
没有意图使用gdb进行实际调试.相反,我试图使用gDEBugger来执行OpenGL调试.gDEBugger显然依赖于GDB作为其后端的一部分,因此如果GDB失败,gDEBugger也会失败.这导致尝试单独运行gdb以隔离问题.
gDEBugger output:
GDB String: [Thread debugging using libthread_db enabled]
GDB String: Using host libthread_db library /lib/x86_64-linux-gnu/libthread_db.so.1 .
Thread Created: 140737353893632 (LWP: 3265)
Thread Created: 140737294624512 (LWP: 3266)
Thread Created: 140737293571840 (LWP: 3267)
Thread Created: 140737292519168 (LWP: 3268)
Thread Created: 140737155180288 (LWP: 3269)
Thread Created: 140737154127616 (LWP: 3270)
Thread Created: 140736913602304 (LWP: 3271)
Thread Created: 140736909629184 (LWP: 3272)
Thread Created: 140736908576512 (LWP: 3273)
Thread Created: …
Run Code Online (Sandbox Code Playgroud) 我需要导入javax.media.opengl.*
包.从Java OpenGL Wiki到http://jogamp.org/,我有点困惑我需要哪个下载.还有很长的构建下载列表在这里,但他们都是.7z压缩文件,我正在寻找一个Windows XP 32位的机器可用下载.
我使用直接缓冲区(java.nio)来存储JOGL的顶点信息.这些缓冲区很大,在应用程序生命周期中它们会被更换几次.内存未及时解除分配,并且在几次更换后我的内存不足.
似乎没有好的方法来释放使用java.nio的缓冲区类.我的问题是:
JOGL中有一些方法可以删除Direct Buffers吗?我正在研究glDeleteBuffer(),但似乎这只是从显卡内存中删除缓冲区.
谢谢
我正在运行以下Scala代码.它编译10,000个立方体的单个显示列表.然后它在显示循环中显示它们,动画师尽可能快地运行.但FPS只有20左右.我原以为使用显示列表可以很快处理这个问题.我有一种情况需要能够显示10k-100k的物体.有没有更好的方法呢?在显示循环中,几乎所有它都是调用gluLookAt和glCallList(它是最后一个方法).
我正在使用jogamp.org的JOGL 2.0-rc5,它说它支持"OpenGL 1.3 - 3.0,3.1 - 3.3,≥4.0,ES 1.x和ES 2.x +几乎所有供应商扩展"
class LotsOfCubes extends GLEventListener {
def show() = {
val glp = GLProfile.getDefault();
val caps = new GLCapabilities(glp);
val canvas = new GLCanvas(caps);
canvas.addGLEventListener(this);
val frame = new JFrame("AWT Window Test");
frame.setSize(300, 300);
frame.add(canvas);
frame.setVisible(true);
}
override def init(drawable: GLAutoDrawable) {
val gl = drawable.getGL().getGL2()
gl.glEnable(GL.GL_DEPTH_TEST)
gl.glNewList(21, GL2.GL_COMPILE)
var i = -10.0f
var j = -10.0f
while (i < 10.0f) {
while (j < 10.0f) {
drawItem(gl, i, j, …
Run Code Online (Sandbox Code Playgroud) 我的同事正在使用Java3D来可视化有限元模拟的结果.问题是Java3D似乎已经死了,这对OSX来说是一种痛苦.这是我们寻找替代品的原因之一.我们当前基于Java3D的实现已经做了很多工作,所以问题是离开Java3D需要付出多少努力.JOGL是一个选项,但看起来很多工作.
有没有关于替代品的建议?有这种迁移的经验吗?
我正在编写一个渲染3D岛的OpenGL ES 2.0应用程序.我已经有了在岛上生成天空圆顶的代码.这是一个由三角形组成的半球,它以z点向上铺设岛屿.
圆顶有一些非常基本的移动云,使用perlin噪声纹理覆盖在自身上并移动不同的速度.
但最终我还需要圆顶渲染:
我需要非常有效地完成这项工作,因为它最终会在Android上运行,尽管它目前在测试工具中运行.因此,例如太阳,月亮和星星将只是纹理,尽管它们的点可以以合理的准确度绘制.
我已经有了生成圆顶的代码,以及根据日期和时间绘制太阳的代码.所以主要是我需要的着色器以及它们提供的是什么.
有没有举例说明这些事情?我发现很多基本的立方体地图或有限的东西,但没有达到我需要的复杂程度.显然,因为这是OpenGL ES 2.0,它必须在着色器中完成.
我现有天空圆顶的着色器渲染2层perlin噪声来模拟云.纹理连续包裹,因此我可以根据圆顶顶点到xy平面的角度(通过将x和y馈入atan)和使用圆顶顶点z的v偏移来计算u偏移.
顶点着色器演示了我是如何做到的:
#ifdef GL_ES
precision mediump float;
precision mediump int;
#endif
attribute vec4 aVertex;
uniform mat4 uPMVMatrix;
uniform float uTime;
uniform float uSkyDomeRadius;
const float PI = 3.1415926535897932384626433832795;
varying vec2 texCoord0, texCoord1;
void main()
{
vec2 centre = vec2(600., 600.);
gl_Position = uPMVMatrix * aVertex;
float slow_time = uTime / 100.;
vec2 dome_point = aVertex.xy - centre;
float tex_u = atan(dome_point.x, dome_point.y);// / (.25 * PI); …
Run Code Online (Sandbox Code Playgroud) 这个错误是什么意思?
嵌套类型HelloWorld无法隐藏封闭类型
HelloWorld是java文件名.如果您需要,这是代码:
import net.java.games.jogl.*;
public class HelloWorld
{ // open HelloWorld
public class HelloWorld
{ // open HelloWorld
public static void main (String args[])
{ // open main
try
{ // open try
System.loadLibrary("jogl");
System.out.println("Hello World! (The native libraries are installed.)");
} // close try
catch (Exception e) // all try's need a catch
{ } // even if the catch does nothing
} // close main
} // close HelloWorld
);
Run Code Online (Sandbox Code Playgroud)