在 2D 纹理上绘制的红色矩形在绘制后立即消失

2024-05-18

跟随我的另一个问题 https://stackoverflow.com/questions/18477291/render-an-outlined-red-rectangle-on-top-a-2d-texture-in-opengl/18478717#18478717,我提供了绘制矩形的代码,如下所示:

void COpenGLControl::DrawRectangleOnTopOfTexture()
{
wglMakeCurrent(hdc, hrc);
glPushAttrib(GL_ENABLE_BIT|GL_CURRENT_BIT);
glDisable(target);
glColor3f(1.0f,0.0f,0.0f);
glBegin(GL_LINE_LOOP);
   glVertex2f(RectangleToDraw.at(0),RectangleToDraw.at(1));
   glVertex2f(RectangleToDraw.at(0),RectangleToDraw.at(3));
   glVertex2f(RectangleToDraw.at(2),RectangleToDraw.at(3));
   glVertex2f(RectangleToDraw.at(2),RectangleToDraw.at(1));
glEnd();
glPopAttrib();
SwapBuffers(hdc);
wglMakeCurrent(NULL, NULL);
}  

void COpenGLControl::OnDraw(CDC *pDC)
{
// TODO: Camera controls
wglMakeCurrent(hdc,hrc);
glLoadIdentity();
gluLookAt(0,0,1,0,0,0,0,1,0);
glTranslatef(m_fPosX, m_fPosY, 0.0f);
glScalef(m_fZoom,m_fZoom,1.0);
setViewRectangle();
if (WantToDrawRectangle)
    DrawRectangleOnTopOfTexture();
wglMakeCurrent(NULL, NULL);
}  

the problem here is:
the red rectangle disappears right after the OnDraw returns. I mean for example when you do a fixed zoom in or fixed zoom out by pressing a button on the dialog, a red rectangle flashes and then immediately disappears.
Or when you make the OnDraw run constanly ( for example you pan with high speed ), you get something like this: enter image description here
surely red rectangles are deleted(disappeared) after a short time but this track of red rectangles is shown for a short period of time?

如何使当前的红色矩形渲染在纹理上,直到下一次调用OnDraw?
另外,如何使当前的红色矩形在下次调用时立即删除OnDraw occurs?

如果第二个问题很难回答,没问题,至少回答第一个问题。显然,如果用户以正常速度平移,则不会显示该矩形轨迹。


我猜你的问题与双缓冲有关。

有些设备在交换后台缓冲区时不会删除后台缓冲区的内容。我的建议是在开始渲染到新缓冲区之前显式清除屏幕(glClear)。这应该可以解决与多个红色矩形相关的问题。

其次,我不确定您的代码中是否发生了超过必要的缓冲区交换。请检查是否有其他显式或隐式调用交换缓冲区,这可能会导致显示错误的缓冲区。 (最终显示的缓冲区可能不是您在其中绘制矩形的缓冲区)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 2D 纹理上绘制的红色矩形在绘制后立即消失 的相关文章

  • 实体框架中的多态性

    具体类 BankAccount and CreditCard 在控制器上不可见 我被这个问题困扰了 我正在使用该网站的示例 http weblogs asp net manavi archive 2010 12 28 inheritance
  • 创建并使用我自己的纹理图集的 mipmap

    我目前正在使用自动 mipmap 生成 C OpenTK GL GenerateMipmap GenerateMipmapTarget Texture2D 我使用的纹理平铺为 16px 的块 所以我的问题是 是否可以使用不会缩小至 1x1
  • Hyperledger私有数据动态访问

    是否可以在 Hyperledger Fabric 1 4 中动态设置对私有数据的访问 与集合文件不同 我们必须添加可以访问特定 集合 的组织 是否可以通过链代码添加访问权限 我自己必须对此进行一些研究 但从 Fabric v1 4 开始 可
  • 纹理采样:根据LOD值计算BIAS值

    GL ES 2 0 中的功能纹理2DLod在片段着色器中不可用 我需要移植 GLSL 着色器 在 GL ES 2 0 中我只能使用二维纹理 sampler2D 采样器 vec2 坐标 浮点数bias 告诉我如何计算 a 的值bias相当于已
  • 具有交错缓冲区的 openGL glDrawElements

    到目前为止 我只使用了 glDrawArrays 并希望转向使用索引缓冲区和索引三角形 我正在绘制一个有点复杂的对象 其中包含纹理坐标 法线和顶点坐标 所有这些数据都收集到一个交错的顶点缓冲区中 并使用类似于以下的调用进行绘制 假设所有血清
  • 在 Actionscript-3 中优化 2D Flash 游戏的动态背景引擎

    编辑2 根据缺乏回复来判断 我开始怀疑我的问题是否足够清楚 请告诉我是否需要详细说明 注意 请参阅底部以获取代码更新 简短介绍 我正在用 ActionScript 编写一个二维 Flash 空间游戏 宇宙无限大 由于这个特性 背景必须动态渲
  • 进行亚像素平移时,2D 纹理会扭曲

    我想知道一个理论推理为什么这是可能的 几何体的平移与纹理映射有何关系 我只能在进行子像素平移时注意到这种效果 如果通过整个像素平移 纹理看起来很好 我正在使用正交投影 GL CLAMP TO EDGE GL NEAREST 片段着色器是hi
  • 如何使绘图的 xtick 标签成为简单的绘图?

    我不想用单词或数字作为 x 轴的刻度标签 而是想绘制一个简单的绘图 由直线和圆圈组成 作为每个 x 刻度的标签 这可能吗 如果是这样 在 matplotlib 中处理它的最佳方法是什么 我会删除刻度标签并将文本替换为patches http
  • 是否支持动态变量?

    我想知道Go中是否可以动态创建变量 我在下面提供了一个伪代码来说明我的意思 我将新创建的变量存储在切片中 func method slice make type for i 0 i lt 10 i var variable i i slic
  • 动态添加字段到数据类对象

    我正在编写一个库来访问 REST API 它返回带有用户对象的 json 我将其转换为 dict 然后将其转换为数据类对象 问题是并非所有字段都是固定的 我想动态添加其他字段 未在我的数据类中指定 我可以简单地为我的对象分配值 但它们不会出
  • 如何让 Plotly.js 监听刻度标签的点击事件?

    因此 在这个动态图表中 我想在单击任何 Y 轴的刻度标签时更改 Y 轴的最小值和最大值 您可以向所有 y 刻度添加 d3 事件侦听器 并确保 SVG 组获取所有events https stackoverflow com a 1692356
  • 如何在 R 中导入并绘制三角形网格?

    我想在 R 中绘制我的模型输出 它是格式为的三角形网格 x1 y1 z1 x2 y2 z2 x3 y3 z3 value 每行代表一个三角形 我想用以下方法绘制这些三角形value作为规模 mymesh lt structure c 0 9
  • 新显卡上的 nvoglv32.dll 中的绘制调用崩溃

    几天前 由于一些硬件更改 我设置了计算机并安装了新的 Windows 8 副本 其中 我将显卡从 Radeon HD 7870 更改为 Nvidia GTX 660 再次设置 Visual Studio 11 后 我从 Github 下载了
  • 调整在drawRect中绘制的矩形的大小

    我有两个UIViews 我的目标是绘制包含这两个的最小矩形UIViews 我想用我要摆脱的框架画一个矩形 CGRectUnion view1 frame view2 frame 但是当我移动两者中的任何一个时UIViews 我需要更新轮廓矩
  • 当用户到达 UITableView 的最后一行时,如何动态添加行?

    我有一个UITableview当前显示 10 行 固定为静态 现在我想在其中添加一个功能 当用户到达最后一行时 我想向表中添加更多 10 行UITableView 我的意思是目前我在应用程序中显示固定的 10 行 但现在我想在用户到达上一个
  • GLSL memoryBarrierShared() 有用吗?

    我想知道 memoryBarrierShared 的用处 事实上 当我查找屏障功能的文档时 我读到 对于计算着色器中任何给定的静态屏障实例 单个工作组内的所有调用都必须进入该实例 然后才能允许任何调用继续超出该实例 这确保了在给定的屏障静态
  • OpenGL 计算着色器调用

    我有一个与新计算着色器相关的问题 我目前正在研究粒子系统 我将所有粒子存储在着色器存储缓冲区中 以便在计算着色器中访问它们 然后我派遣一个一维工作组 define WORK GROUP SIZE 128 shaderManager gt u
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • 线性/非线性纹理映射扭曲的四边形

    In my 上一个问题 https stackoverflow com questions 10832909 quad strip texturing distortion 已经确定 当对四边形进行纹理化时 面被分解为三角形 并且纹理坐标以

随机推荐