Tag: jogl

使用帧缓冲区将深度缓冲区渲染为纹理

我正在使用JOGL,但这个问题一般适用于OpenGL。 似乎存在类似的问题,但它们要么针对GLSL代码,要么与复制帧缓冲区的内容有关,要么是一般建议 – 使用帧缓冲对象而不是glCopyTexSubImage2D 。 题 我正在做一些阴影贴图。 如何使用帧缓冲对象将深度通道直接渲染到纹理? 你能发一个初始化纹理和帧缓冲对象的代码块,以及在渲染场景之前初始化所有内容的代码吗? 目前,我使用glCopyTexSubImage2D 。 我像这样初始化纹理: glGenTextures(1, &textureNo) glBindTexture(GL_TEXTURE_2D, textureNo) glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST) glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST) glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE) glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE) glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE) glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL) glTexParameterf(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_INTENSITY) glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, 2048, 2048, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, null) 然后我像这样渲染: glBindTexture(GL_TEXTURE_2D, textureNo) glClear(GL_DEPTH_BUFFER_BIT) drawScene() glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, […]

Java:openGL:JOGL:当我调用display()方法时,幕后会发生什么?

我有这行代码: renderableObject.renderObject(gl, glu); 这会导致openGL呈现大量对象,但只有在使用时才会起作用: @Override public void display(GLAutoDrawable drawable) { renderableObject.renderObject(gl, glu); } 如果我在重写的显示方法之外调用该行,我得到一个exception,说当前线程上没有glContext,实际上如果我在这个方法之外调用任何gl draw命令,我得到相同的exception 理想情况下,我想创建一次大量的显示列表,然后使用奇数显示列表每帧渲染它们以定期重新创建。 但是我必须通过这个单一的display()方法,这意味着如果显示列表已经创建,或者需要更改等,我必须测试每一帧…每秒60次! 当我需要时可以单独处理它们时会浪费处理能力。 所以无论调用display()方法做什么,我都希望能够复制它,这样我就可以创建大量自己的自定义显示方法,而无需通过这一方法来实现一切! 那么我可以做一个简单的电话吗?

JOGL没有自动释放池

我试图将JOGL添加到我的项目中,经过很长一段时间搜索网络后,我找到了解决方案。 我将jar添加到我的构建路径中,Eclipse识别它们。 我想测试它,所以从这里获取代码: https : //sites.google.com/site/justinscsstuff/jogl-tutorial-2并编译。 AWT-way给了我这个结果: 2012-06-03 18:20:44.623 java[1481:903] [Java CocoaComponent compatibility mode]: Enabled 2012-06-03 18:20:44.626 java[1481:903] [Java CocoaComponent compatibility mode]: Setting timeout for SWT to 0.100000 2012-06-03 18:20:46.253 java[1481:903] *** __NSAutoreleaseNoPool(): Object 0x102034900 of class NSConcreteMapTableValueEnumerator autoreleased with no pool in place – just leaking 2012-06-03 18:20:46.259 java[1481:903] *** __NSAutoreleaseNoPool(): Object 0x10209e3f0 of […]

Java OpenGL绑定中的GLU.gluLook似乎什么都不做

我已经检查了关于这个主题的其他问题,他们的解决方案对我没用。 我有点失落。 我的GLEventListener实现中有以下函数。 public void init(GLAutoDrawable gl) { GL2 gl2 = gl.getGL().getGL2(); gl2.glMatrixMode(GL2.GL_PROJECTION); gl2.glLoadIdentity(); GLU glu = GLU.createGLU(gl2); glu.gluPerspective(45.0f, 1, 0.1f,100.0f); gl2.glMatrixMode(GL2.GL_MODELVIEW); gl2.glLoadIdentity(); gl2.glViewport(0, 0, width, height); gl2.glEnable(GL.GL_DEPTH_TEST); } private void render(GLAutoDrawable drawable) { GL2 gl = drawable.getGL().getGL2(); GLU glu = GLU.createGLU(gl); gl.glClear(GL.GL_COLOR_BUFFER_BIT); gl.glMatrixMode(GL2.GL_MODELVIEW); gl.glLoadIdentity(); glu.gluLookAt(5, 0, 20, 0, 30, 0, 0, 1, 0); gl2.glPushMatrix(); […]

WorldWind PointPlacemark标题

在NASA WorldWind Java中,我使用PointPlacemark来表示图像,因为无论缩放级别如何,它都保持相同的大小。 问题是我想在Point Placemark上设置标题,即使相机倾斜,它也会保持在指南针上。 它在查看一个倾斜的地球时完全按照我想要的方式工作,但是当我倾斜时,地标继续面向屏幕而不是与地球一起倾斜,这导致它行为奇怪。 这是一个GIF,说明了我所看到的: https : //giphy.com/embed/3o7WIqZUceR8xh6BOg 我希望点地标图像保持在相对于地球的标题上,即使在倾斜时 – 因此当视图倾斜时图像基本上“平坦化”,而不管缩放级别如何仍然保持相同的大小。 这是我正在使用的代码片段。 我正在设置attrs.setHeadingReference(AVKey.RELATIVE_TO_GLOBE); 在关联的PointPlacemarkAttributes上。 在此示例中,我将标题设置为135度。 import gov.nasa.worldwind.WorldWind; import gov.nasa.worldwind.avlist.AVKey; import gov.nasa.worldwind.geom.Position; import gov.nasa.worldwind.layers.RenderableLayer; import gov.nasa.worldwind.render.Offset; import gov.nasa.worldwind.render.PointPlacemark; import gov.nasa.worldwind.render.PointPlacemarkAttributes; public class Placemarks extends ApplicationTemplate { public static class AppFrame extends ApplicationTemplate.AppFrame { public AppFrame() { super(true, true, false); final RenderableLayer layer = new […]

如何实现FPS相机?

所以我目前正在开发OpenGL中的一些FPS游戏编程(JOGL,更具体地说)只是为了好玩,我想知道创建类似FPS的摄像头的推荐方法是什么? 目前我基本上有一个玩家面向方向的矢量,按下“w”或前进键后,它将被添加到当前玩家位置。 该向量的负数当然用于“s”或后向键。 对于“a”,left和“d”,右边我使用方向向量的法线。 (我知道这会让玩家飞起来,但这不是问题) 移动鼠标后,将使用三角学和矩阵旋转方向向量。 当然,所有矢量都被标准化以便于速度控制。 这是常见的和/或好的方式还是更容易/更好的方式?

什么是Java2d更快的替代品?

我正在寻找一些物理模拟,我需要在Java中快速渲染。 我过去遇到过Java2d的性能问题,那么快速的选择是什么? JOGL明显比Java2d快吗?

是否可以在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作者。

为什么这个Java OpenGL(JOGL)程序不会运行?

以下代码来自https://sites.google.com/site/justinscsstuff/jogl-tutorial-2 import java.awt.Frame; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.media.opengl.*; import javax.media.opengl.awt.GLCanvas; public class SimpleScene { public static void main(String[] args) { GLProfile glp = GLProfile.getDefault(); GLCapabilities caps = new GLCapabilities(glp); GLCanvas canvas = new GLCanvas(caps); Frame frame = new Frame(“AWT Window Test”); frame.setSize(300, 300); frame.add(canvas); frame.setVisible(true); // by default, an AWT Frame doesn’t do anything […]

用JOGL画出屏幕

作为一个大项目的一部分,我正在尝试使用JOGL实现一个工具,将3D渲染导出为位图格式。 我们通过创建一个GLJPanel并绘制我们想要的场景,然后提取位图来实现这一点。 只要系统在屏幕上至少有一个可见窗口,这一切都可以正常工作 – 不一定是包含我们绘制的面板的窗口。 但是如果我们尝试这样做而不使任何窗口可见,则GLJPanel将不会绘制。 单步执行JOGL源我发现它不会绘制,除非它有一个有效的对等体 – 基本上除非已经调用了addNotify()。 文档说只有当面板成为可见窗口层次结构的一部分时才会调用addNotify()。 更改为GLCanvas没有太大区别 – 故障模式不同。 未设置LOCK_SURFACE_NOT_READY ,这意味着lockSurface返回LOCK_SURFACE_NOT_READY ,导致makeCurrent()失败。 欢迎任何帮助,如何创建一个Java应用程序,可以创建和导出3D场景,而不必让它的窗口可见。