相关疑难解决方法(0)

Opengl:3D上的2d HUD

我已经看过这里发布的一些关于此事的问题,但仍然无法解决为什么我的2d HUD出现但让我的3D渲染世界消失了.

编辑:似乎2d场景正在控制整个屏幕所以我时不时地看到3D场景在2d场景中出现故障.因此即使我只渲染一个10 x 10像素的四边形,它也会渲染出来,然后将剩余的屏幕空白.

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(40.0,(GLdouble)x/(GLdouble)y,0.5,20.0);
glMatrixMode(GL_MODELVIEW);
glViewport(0,0,x,y);
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0,-0.5,-6.0);

glPushMatrix();

..Draw some 3d stuff...

glPopMatrix();
// Start 2d
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, -1, 1);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glColor3f(0.0f, 255.0f, 1.0f);
glBegin(GL_QUADS);
    glVertex2f(0.0, 0.0);
    glVertex2f(10.0, 0.0);
    glVertex2f(10.0, 10.0);
    glVertex2f(0.0, 10.0);
glEnd();
Run Code Online (Sandbox Code Playgroud)

然后我交换缓冲区

这是我的代码的顺序.就像它使得3d空间然后使得2d空间反过来取消了3d空间.

c++ opengl

17
推荐指数
2
解决办法
3万
查看次数

如何使用OpenGL在2D模式下渲染完美的线框矩形?

编辑:只是让你知道:我还没有完全解决这个问题,目前我正在使用0.5px偏移,它似乎工作,但正如其他人所说,它不是"适当的"解决方案.所以我正在寻找真正的交易,钻石退出规则解决方案根本不起作用.

我相信它可能是显卡中的一个错误,但如果是这样,那么任何专业程序员都应该为此提供防弹解决方案,对吧?

编辑:我现在买了一张新的nvidia卡(以前有ATI卡),我仍然遇到这个问题.在很多很多游戏中我也看到了同样的错误.所以我想这是不可能以一种干净的方式修复?

这是错误的图像:

在此输入图像描述

你是如何克服这个问题的?如果可能的话,最好是非着色器解决方案.当我自己绘制4条单独的线而不是使用线框模式时,我尝试设置第一条线的偏移量,但是效果不是很好:如果矩形大小改变了,它有时看起来很完美,但有时甚至比修复之前更糟糕.

这就是我渲染四边形的方式:

glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glBegin(GL_QUADS);
    glVertex2f(...);
    glVertex2f(...);
    glVertex2f(...);
    glVertex2f(...);
glEnd();
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
Run Code Online (Sandbox Code Playgroud)

是的,我知道我可以使用顶点数组或VBO,但这不是重点.

我也尝试过GL_LINE_LOOP,但它没有解决这个问题.

编辑:一个解决方案是,到目前为止:Lie Ryan的Opengl像素完美2D绘图:

请注意,OpenGL坐标空间没有整数概念,一切都是浮点数,OpenGL像素的"中心"实际上是0.5,0.5而不是左上角.因此,如果你想要从0,0到10,10(含)的1px宽线,你真的必须画一条从0.5,0.5到10.5,10.5的线.

如果你打开抗锯齿,这将是特别明显的,如果你有抗锯齿,并且你尝试从50,0到50,100绘制,你可能会看到模糊的2px宽线,因为线条落在两个像素之间.

c++ opengl

15
推荐指数
2
解决办法
5332
查看次数

GPU供应商之间的OpenGL确定性渲染

我目前正在使用OpenGL编写科学成像应用程序.

我想知道当我的代码(C++/OpenGL和简单GLSL)在不同的硬件上执行时,OpenGL渲染(根据FBO检索到的像素)应该是完全确定的(ATI与NVidia,各种NVidia代和各种操作系统) )?

更确切地说,每次在任何硬件上运行我的代码(可以运行基本的GLSL和OpenGL 3.0)时,我都需要完全相同的像素缓冲区...

那可能吗?我应该考虑一些建议吗?

如果不可能,是否有一个特定品牌的视频卡(也许是Quadro?)可以在改变主机操作系统的同时做到这一点?

opengl rendering invariants

8
推荐指数
1
解决办法
868
查看次数

如何使用 OpenGL 将像素数组直接绘制到屏幕上?

我想将像素直接写入屏幕(不使用顶点和多边形)。我调查了类似问题的各种答案,最引人注目的是这里这里

我看到有几种方法可以将像素绘制到屏幕上,但它们似乎都是间接的,并且使用了不必要的浮点运算:

  1. GL_POINT为屏幕上的每个像素绘制一个。我试过这个并且它有效,但这似乎是一种在屏幕上绘制像素的低效方法。当我的数据将被转换为像素数据数组时,为什么要以浮点形式写入我的数据。

  2. 创建一个跨越整个屏幕的二维四边形并向其写入纹理。与第一个选项一样,这似乎是将像素放在屏幕上的一种迂回方式。纹理在放到屏幕上之前仍然需要经过光栅化。纹理也必须是方形的,而且大多数屏幕都不是方形的,所以我必须处理这个问题。

如何使用 OpenGL 以最直接、最有效的方式将颜色矩阵(其中pixels[0][0]对应于左上角和pixels[1920][1080]对应于右下角)显示在屏幕上?

直接写入帧缓冲区似乎是最有前途的选择,但我只看到人们使用帧缓冲区进行着色。

opengl graphics drawing image-processing pixels

4
推荐指数
1
解决办法
8293
查看次数

OpenGL中的像素完美投影矩阵?

我正在使用OpenTK,我希望能够在Z是特定数字的情况下渲染多边形和纹理像素完美,投影中的任何其他位置都无关紧要(这适用于UI).有没有办法设置这样做的投影矩阵?

vb.net opengl projection-matrix

2
推荐指数
1
解决办法
1114
查看次数