当前位置: 首页 > 知识库问答 >
问题:

显示ContextAttribs和GL11投影矩阵模式-不支持该功能

澹台俊材
2023-03-14

当我试图将LWJGL程序的矩阵模式设置为GL_投影时,我遇到了一个错误。

glMatrixMode(GL_PROJECTION);

错误是:

异常线程"main"java.lang.IllegalStateException:函数不支持org.lwjgl.BufferChecks.checkFunctionAddress(BufferChecks.java:58)在org.lwjgl.opengl.GL11.glMatrixMode(GL11.java:2075)...

我已将错误跟踪到我显示的时间。当我删除我的ContextTrib时,我的代码不会显示错误并呈现!(当我注释掉需要contextribs的代码时)

这是我的代码:

显示代码:

Display.setDisplayMode(new DisplayMode(WIDTH, HEIGHT));
ContextAttribs attribs = new ContextAttribs(3, 2).withProfileCore(true).withForwardCompatible(true);
Display.create(new PixelFormat().withDepthBits(24).withSamples(4), attribs);
Display.setTitle(TITLE);
Display.setInitialBackground(1, 1, 1);
GL11.glEnable(GL13.GL_MULTISAMPLE);
GL11.glViewport(0, 0, WIDTH, HEIGHT);

初始化方法:

glMatrixMode(GL_PROJECTION);
glOrtho(0, width, height, 0, -1, 1);
glMatrixMode(GL_MODELVIEW);
glClearColor(0, 1, 0, 0);

textureID = loadTexture("res/hud.png");

glEnable(GL_TEXTURE_2D);

渲染方法:

glClear(GL_COLOR_BUFFER_BIT);

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

glPushMatrix();

glTranslatef(0, 0, 0);

glBindTexture(GL_TEXTURE_2D, textureID);

glBegin(GL_QUADS);

{
        glTexCoord2f(0, 0);
        glVertex2f(0, 0);

        glTexCoord2f(1, 0);
        glVertex2f(width, 0);

        glTexCoord2f(1, 1);
        glVertex2f(width, height);

        glTexCoord2f(0, 1);
        glVertex2f(0, height);
}

glEnd();
glPopMatrix();

有人知道如何让这段代码与ContextAttribs一起工作吗?

提前感谢!

编辑1:我静态导入了GL11中的所有函数和变量。

共有1个答案

陶腾
2023-03-14

首先,使用glBegin/glEnd序列绘图已弃用10多年。有关最先进的渲染方式,请参阅顶点规范。

与线路连接

ContextAttribs attribs = new ContextAttribs(3, 2).withProfileCore(true).withForwardCompatible(true);

生成具有前向兼容性位集的OpenGL核心配置文件上下文。

在这种情况下,所有不推荐使用的函数,如glBegin/glEnd序列、矩阵堆栈(glMatrixMode)、标准光模型等都被删除。这会导致错误。

另请参见固定函数管道和OpenGL上下文

跳过前向兼容位的设置(。withForwardCompatible(true))以解决此问题。

 类似资料:
  • 本章节主要给大家引入视图矩阵和投影矩阵两个新的概念,如果你没有图形学基础,对这两个概念暂时还没有认知,也没有关系。通过前面的学习相信你对平移、旋转等矩阵有了一定的认知,至于投影和视图矩阵和平移、旋转等模型矩阵一样也会对WebGL顶点进行坐标变换,至于如何变换下面会逐步讲解。 在学习本章节之前,如果你对Three.js已经有了一定的了解,可以尝试从WebGL视图矩阵和投影矩阵的角度去深入理解Thre

  • 我有一个基本的OpenGL应用程序,我想使用我的投影矩阵。 这是我的矩阵: (WorldCoordinates是Matrix4结构,它只包含一个名为m的变量,即浮点[4][4])(宽度和高度是两个s)。然后,我使用以下方法将此坐标应用于我的<code>顶点 (Shader是一个类,并且有一个绑定()方法,它只是glUseProgram)。 这是我的顶点着色器GLSL 使用这个,它不起作用。但将gl

  • 问题内容: 我试图在OpenGL中使用gluUnProject,首先我需要获取projectoin,model_view和viewort矩阵。根据我在网上找到的例子 但是我收到错误消息“ ValueError:glGetFloatv需要1个参数(pname),收到2:(GL_PROJECTION_MATRIX,[])” 那么,我应该使用什么来获取这些矩阵? 问题答案: 也许: 之后在变量中应该是投

  • 问题内容: 是我在尝试运行时收到的错误消息: 是形状如下的: 是一个: 我已经搜索了一些错误消息,但还没有真正找到可以应用的内容。有什么提示吗? 问题答案: 不,您输入的内容必须是预测列表,而不是OHE(一种热编码)。调用您的和,您应该得到期望的结果。

  • WGS84 EPSG:4326 EPSG:4269 EPSG:3875 EPSG:3785 EPSG:4139 EPSG:4181 EPSG:4272 EPSG:4302 EPSG:21781 EPSG:102113 EPSG:26591 EPSG:26912 EPSG:27200 EPSG:27563 EPSG:41001 EPSG:42304 EPSG:102067 EPSG:102757 E

  • 我使用OpenGL进行2D渲染,并希望使用实际像素坐标。我的意思是,我希望(0,0)位于窗口的左上角,而(宽度,高度)位于窗口右下角(其中宽度和高度是窗口的像素尺寸)。为了做到这一点,我使用了一个投影矩阵,该矩阵由glOrtho生成,然后传递给顶点着色器: 我使用的是LWJGL,它没有glm的绑定,所以我使用上面的OpenGL调用获得2D正交矩阵。我重置了投影矩阵,这样它就不会影响我以后的绘图调用