Articles of jogl

JOGL硬件阴影映射透明阴影纹理

我正在基于由发行版提供的演示(HardwareShadowMapping)在JOGL上使用硬件阴影映射。 从灯光的角度生成阴影纹理后,我将其应用到我的场景中,没有任何问题。 我正在寻找的是柔和的阴影,而不是阴影黑色的阴影。 有什么方法可以在应用阴影/深度纹理时更改Alpha值? 顺便说一句,我不是在OpenGL的专家,尤其是自定义着色器,我不想花更多的时间来理解和开发自定义着色器,而不是游戏。 这里是应用程序的屏幕截图,以便您想出另一个解决scheme来实现我的目标。 游戏实际上是一个黑客和斜杠RTS hybrid.Here的阴影pbuffer gl事件监听器的伪代码。 gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); gl.glPolygonOffset(polygonOffsetFactor, polygonOffsetUnits); gl.glEnable(GL.GL_POLYGON_OFFSET_FILL); //render shadow casting geometry gl.glDisable(GL.GL_POLYGON_OFFSET_FILL); gl.glBindTexture(GL.GL_TEXTURE_2D, lightViewTextureID); gl.glCopyTexSubImage2D(GL.GL_TEXTURE_2D, 0, 0, 0, 0, 0, textureSize, textureSize); //I sense here a way of updating alpha values of this texture

基于JOGL硬件的阴影映射 – 计算纹理matrix

我正在实现这里所描述的硬件阴影映射。 我已经从光线POV中成功渲染了场景,并将场景的深度缓冲区加载到纹理中。 这个纹理已经正确加载 – 我通过渲染一个小缩略图来检查,如左下角截图所示。 场景的深度似乎是正确的 – 远处的物体越暗,越接近光线越浅。 然而,在使用深度纹理从相机视角渲染场景时,我遇到了麻烦 – 场景中多边形的纹理以怪异的,不确定的方式渲染,如屏幕截图所示。 我相信我在计算纹理变换matrix时犯了一个错误,但我不确定在哪里。 因为在JOGL中没有matrix实用程序,除了gl[Load|Mult]Matrix程序,我使用它们乘以matrix,如下所示: void calcTextureMatrix() { glPushMatrix(); glLoadIdentity(); glLoadMatrixf(biasmatrix, 0); glMultMatrixf(lightprojmatrix, 0); glMultMatrixf(lightviewmatrix, 0); glGetFloatv(GL_MODELVIEW_MATRIX, shadowtexmatrix, 0); glPopMatrix(); } 我通过使用glOrtho和gluLookAt过程获得这些matrix: glLoadIdentity() val wdt = width / 45 val hgt = height / 45 glOrtho(wdt, -wdt, -hgt, hgt, -45.0, 45.0) glGetFloatv(GL_MODELVIEW_MATRIX, lightprojmatrix, 0) glLoadIdentity() glu.gluLookAt( xlook […]

围绕固定轴旋转场景

我正在寻找一种方法来移动我的场景,这样当我向前/向后/向左翻译时,它可以直接在屏幕上向上/向下/向左/向右移动。 目前它是这样做,直到我旋转(除了360以外的任何东西)。 旋转后,上/下/左/右向旋转方向移动。 我需要它在屏幕上直接上/下/左/右移动。 我一直在绞尽脑汁尝试各种不同的matrix旋转和乘法,但我无法得到它。 最重要的是 – 我需要它保持一个0,0,0的旋转轴,所以无论我滚动多远,旋转中心总是靠近屏幕的中间。 我可以很容易地在场景中心旋转,并将其转换成我想要的forms(翻译为合作,旋转,回转,到位),但是我需要这个轴保持固定。 否则,旋转的中心可能在某个地方的屏幕外。 图1.显示模型(场景)的起始位置。 图2.模型视图旋转45度。 图3.减小z值导致模型沿z移出 – 这是我不想要的。 图4我需要模型直回(在z和x之间)。 我尝试过使用sin / cos规则,试图将顶点沿着不希望的位置(图3)和期望的位置(图4)之间的圆弧翻转回去,但是mathclosures并且过程是混乱的。 我只知道那里必须有一个干净/简单的解决scheme。 我在Java(JOGL)中编码,并将模型视图和投影matrix传递给顶点着色器。 此外,我不使用弃用的function(无开始/结束/ glRotate等)。 有谁知道matrix乘法,将完成这个?

在OpenGL中创建墙

Eclipse如何在JOGL 2.0中创建墙? 到目前为止,我已经尝试了列表顶点,直到我意识到这是一个C方法,而我需要在Java中工作。

我如何使用JOGL绘制纹理?

我已经开始学习OpenGL和使用JOGL。 有什么我没有find任何实际或简单的指导,但我怎样才能绘制纹理? 例如,我需要什么样的代码来在(X, Y, Z)位置绘制纹理? 我想要使​​用glDrawArrays()或glDrawElements() 。

多次绘制相同的对象,但翻译和旋转

我想用Opengl4和JOGL在不同的位置和方向上画很多的球体。 由于顶点和颜色都是相同的,我只有一个顶点和另一个颜色的数组。 对于职位和方向,我有另一个大matrix,我拥有所有领域的所有数据。 原则上,用glDrawArrays绘制一个不是一个问题,但对于几个,我已经读了,我应该使用glDrawArraysInstanced来代替。 我的问题是我有点困惑如何应用每个转换我的粒子。 我应该如何将这个数组引入着色器? 我应该在cpu中进行转换之后发送matrix模型还是应该发送位置和方向并在着色器中转换它们? 如何将数据连接到着色器? 着色器应该如何?

努力与JOGL2.0建立

我确实有JOGL1.1的设置和工作,但是我很快就发现它不支持最新的OpenGL,于是我开始升级到JOGL2.0,这不太好。 首先,我试图让JOGL工作,还是应该转向LWJGL? 我对OpenGL(通过C ++)感觉相当舒服,而且从我使用JOGL1.1开始,我似乎可以适应它。 假设我坚持使用JOGL,我试图使用JOGL2.0是愚蠢的吗? 从我能收集到的信息来看,JOGL2.0还处于testing阶段,但是我愿意用它来使用最新的OpenGL。 我一直在使用Eclipse IDE,并为JOGL设置了一个用户库,这是一个configuration的屏幕截图,我已经将这个用户库添加到我自己的Eclipse项目中。 系统variables%JOGL_HOME%指向“C:\ Users \ edacosh \ Downloads \ JOGL2.0”,这样应该可以正常工作。 现在,我实际上遇到的问题,当我尝试运行我的代码,就行了 GLProfile glp = GLProfile.getDefault(); 该代码停止以下消息… Exception in thread "main" java.lang.NoClassDefFoundError: com/jogamp/common/jvm/JVMUtil at javax.media.opengl.GLProfile.<clinit>(GLProfile.java:1145) at DiCE.DiCE.<init>(DiCE.java:33) at App.<init>(App.java:17) at App.main(App.java:12) Caused by: java.lang.ClassNotFoundException: com.jogamp.common.jvm.JVMUtil at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) […]

使用JOGL(OpenGL Java绑定)时应注意或避免哪些types的问题?

我对OpenGL是全新的,但在Java中有一个很好的基础。 我最近用最新版本的JOGL设置了Eclipse,发现它是我作为一个初学者程序员时所感觉的,非常容易适应原来的OpenGL代码。 通过简单地使用replace all命令将C ++本机库命令从gl更改为gl.gl,将GL_ETC更改为glu.GL2_ETC等,并使用最近发现的nehe.gamedev.net上的OpenGL教程网站想知道是否有任何巨大的问题或我应该避免的事情,例如使用awt或swing作为视窗程序的框架或窗口。 也许我试图在我自己尝试一个更具体的问题之前提出一个更具体的问题,那就是“我是否连续使用两种语言的窗口,还是只创建两个窗口,而只尝试打开一个窗口? ,因为它们都有类似的方法,除OpenGL之外的对象更多地集中在3Dgraphics上。 我所要问的原因是,据我所知,OpenGL的3Dgraphics通常必须建立在一个框架上,或者与任何东西的主要方法相关联。

如何使用JOGL保存屏幕图像

希望这是一个更好的地方来问这样的事情。 我有一个2D场景,其中一些在Swing框架中绘制的小精灵。 我需要他们被保存为一个图像。 问题是我发现每一个教程似乎已经过时了。 我发现使用glReadPixels并把结果放到一个BufferedImage应该会有所帮助,但所有这些片段看起来陈旧,API已经改变。 我正在使用目前的JOGL 2.1.5。 我有一种感觉,这应该是一个广为人知的专业用例。 任何帮助,将不胜感激! 更新:我采用了一些陈旧的片段(请不要告诉我API没有明显改变,有几十个动作和重新命名)没问题是我越来越黑屏在PNG文件。 它来自字节缓冲区读取仅零。 public static void main(String[] args) { TestPNGSaver saver = new TestPNGSaver(); saver.run(); } private void writeBufferToFile(GLAutoDrawable drawable, File outputFile) { int width = drawable.getWidth(); int height = drawable.getHeight(); ByteBuffer pixelsRGB = Buffers.newDirectByteBuffer(width * height * 3); GL2 gl = drawable.getGL().getGL2(); gl.glReadBuffer(GL.GL_BACK); gl.glPixelStorei(GL.GL_PACK_ALIGNMENT, 1); gl.glReadPixels(0, […]

我的程序太慢了,我如何使用Eclipse进行configuration?

我的简单的opengl程序真的太慢,不stream畅。 我用简单的照明和简单的材料渲染30个球体。 我做的唯一复杂的计算的东西是光线鼠标和球体之间的碰撞检测(这工作正常,我只在mouseMoved做)我没有使用任何线程,只是一个animation师移动领域。 我怎样才能剖析我的jogl项目? 或者也许(最可能…)我有一些opengl指令,我不明白,使渲染特别准确(或背面渲染,我不需要或任何我不知道我只是进入opengl世界)