Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JOGL图像渲染_Java_Opengl_Textures_Jogl_Mesa - Fatal编程技术网

Java 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

最终目标是能够在JOGL中渲染任意大小的图像,并在基本图形卡上快速渲染

我最初的尝试是使用纹理来实现这一点。然而,我在一些图形卡(更准确地说,是虚拟机图形卡)上遇到了问题

某些图像超过了
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,但似乎没有地方可以获得它,这让我觉得我的方法没有得到广泛应用。