Java JOGL图像渲染
最终目标是能够在JOGL中渲染任意大小的图像,并在基本图形卡上快速渲染 我最初的尝试是使用纹理来实现这一点。然而,我在一些图形卡(更准确地说,是虚拟机图形卡)上遇到了问题 某些图像超过了Java JOGL图像渲染,java,opengl,textures,jogl,mesa,Java,Opengl,Textures,Jogl,Mesa,最终目标是能够在JOGL中渲染任意大小的图像,并在基本图形卡上快速渲染 我最初的尝试是使用纹理来实现这一点。然而,我在一些图形卡(更准确地说,是虚拟机图形卡)上遇到了问题 某些图像超过了GL\u MAX\u TEXTURE\u大小,并且如果卡不支持非二次幂的纹理(GL.isnpotextureavailable()) 然后,我跟踪了几个(1,2)样本,它们使用glDrawPixels直接渲染图像 gl.glBlendFunc (GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_S
GL\u MAX\u TEXTURE\u大小
,并且如果卡不支持非二次幂的纹理(GL.isnpotextureavailable()
)
然后,我跟踪了几个(1,2)样本,它们使用glDrawPixels直接渲染图像
gl.glBlendFunc (GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
gl.glEnable (GL.GL_BLEND);
gl.glColor3f (0.0f, 0.0f, 0.0f);
gl.glRasterPos2i (10, 300);
gl.glDrawPixels (dukeWidth, dukeHeight,
gl.GL_RGBA, gl.GL_UNSIGNED_BYTE,
dukeRGBA);
这可以正常工作,但光栅位置移动到视口之外时除外。当部分图像(左下角)超出视口时,不会显示整个图像
[1]
[2]
我用glWindowPos2d
替换了glRasterPos2i
,成功地解决了图像消失问题,但这又导致了另一个问题-glWindowPos2d
仅受openGL 1.4支持,我的虚拟机仅支持1.1
我的方法有什么问题
我应该通过填充纹理来处理非功率大小的图像吗
我是否应该将大型图像分割为许多纹理(如被子),以便最大纹理大小不超过?担心在这种情况下的表现
已尝试Mesa3D以确保获得更高的openGL版本,但无法使其为windows编译。推荐其他软件渲染器吗?(等待Swiftshader支持)我已经设法找到了我自己问题的答案 如何绘制在窗口左边缘或下边缘外具有初始glRasterPos()的glBitmap()或glDrawPixels()基元 当光栅位置设置在窗口之外时,它通常位于视图体积之外,随后被标记为无效。渲染glBitmap和glDrawPixels原语时,光栅位置无效。由于glBitmap/glDrawPixels在光栅位置的右侧和上方生成像素,因此似乎无法渲染由窗口的左边缘和/或下边缘剪裁的此类基本体 但是,这里有一个常用技巧:将光栅位置设置为视图体积内的有效值。然后拨打以下电话: glBitmap(0,0,0,0,xMove,yMove,NULL)
这会告诉OpenGL渲染无操作位图,但将当前光栅位置移动(xMove,yMove)。应用程序将提供(xMove、yMove)值,用于将光栅位置放置在视图体积之外。使用glBitmap()或glDrawPixels()执行此调用以执行所需的渲染。您尝试使用的所有这些东西都已弃用!切换到现代OpenGL.Btw,使用Mesa您可以访问GL3。2@MichaelIV-谢谢你的评论。如何使用现代OpenGL渲染图像?关于Mesa,我需要自己为windows编译Mesa,而我到目前为止还没有做到这一点。这似乎让人怀疑我是否应该使用它。我只想下载一个预构建的驱动程序/dll,但似乎没有地方可以获得它,这让我觉得我的方法没有得到广泛应用。