当矢量的最后一个对象都应该绘制时,只绘制它们
Only the last object of a vector is drawn when they should all be drawn
我有一个Application对象,它的成员变量之一是GameChar对象的向量。此GameChar对象包含一个GLbatch,该GLbatch在构造函数中初始化,并在调用GameChar对象的draw方法时绘制。当程序启动时,我创建了一个应用程序对象和三个GameChar对象,并使用push_back()方法将GameChar推送到应用程序对象的向量中。然后,在一个游戏循环中,我遍历向量并调用所有I’ts对象的draw方法。问题是,只有最后一个放在向量中的对象才会被绘制出来。我已经确保向量被正确迭代,并且在所有对象上都调用了draw方法,但无论我以什么顺序调用这些draw方法(我试图从头到尾迭代向量以确保这一点),只有最后插入向量的对象才会被绘制。
以下是创建应用程序和GameChar对象的代码(构造函数按以下顺序获取参数:宽度、高度、x、y):
Application app;
GameChar character(0.5f,0.5f,0.0f,0.0f);
GameChar character2(0.5f,0.5f,0.5f,0.5f);
GameChar character3(0.5f,0.5f,-1.0f,-1.0f);
app.characters.push_back(character);
app.characters.push_back(character2);
app.characters.push_back(character3);
这是一个循环:
while (1)
{
vector<GameChar>::size_type sz=characters.size();
unsigned int i;
for (i=0;i<sz;i++)
{
characters[i].update();
}
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
for (i=0;i<sz;i++)
{
characters[i].draw();
}
glfwSwapBuffers();
}
更新:以下是GameChar的构造函数:
GameChar::GameChar(GLfloat lWidth,GLfloat lHeight,GLfloat lX,GLfloat lY)
{
xPos=lX;
yPos=lY;
height=lHeight;
width=lWidth;
if (xPos<-1)
{
xPos=-1;
}
if (xPos+width>1)
xPos=1-width;
if (yPos<-1)
yPos=-1;
if (yPos+height>1)
yPos=1-height;
verts[0]=xPos;
verts[1]=yPos;
verts[2]=0.0f;
verts[3]=xPos+width;
verts[4]=yPos;
verts[5]=0.0f;
verts[6]=xPos;
verts[7]=yPos+height;
verts[8]=0.0f;
verts[9]=xPos+width;
verts[10]=yPos+height;
verts[11]=0.0f;
batch.Begin(GL_TRIANGLE_STRIP, 4);
batch.CopyVertexData3f(verts);
batch.End();
}
绘制方法:
void GameChar::draw()
{
batch.Draw();
}
我已经用完整的代码更新了游戏循环。
此外,如果我试图更改代码:
for (i=0;i<sz;i++)
{
characters[i].draw();
}
使用此代码:
for (i=0;i<sz;i++)
{
GLBatch batch;
batch=characters[i].batch;
batch.Draw();
}
没有画出正方形。我真的觉得这一切都是无稽之谈
另一个更新:
如果我在推入第三个对象后将其弹出(_back),如下所示:
Application app;
GameChar character(0.5f,0.5f,0.0f,0.0f);
GameChar character2(0.5f,0.5f,0.5f,0.5f);
GameChar character3(0.5f,0.5f,-1.0f,-1.0f);
app.characters.push_back(character);
app.characters.push_back(character2);
app.characters.push_back(character3);
app.characters.pop_back();
什么都没有画出来,但如果不把它推进去,就像这样:
Application app;
GameChar character(0.5f,0.5f,0.0f,0.0f);
GameChar character2(0.5f,0.5f,0.5f,0.5f);
GameChar character3(0.5f,0.5f,-1.0f,-1.0f);
app.characters.push_back(character);
app.characters.push_back(character2);
绘制第二个字符。所以我认为问题是,当推送一个新的字符时,矢量中已经存在的字符会无效,但我不知道为什么会发生这种情况,也不知道如何修复
我终于修复了它!我仍然不知道问题的原因是什么,但我已经将GameChar的向量更改为指向GameChar对象的指针向量,现在它起作用了!
相关文章:
- 读取文件的最后一行并输入到链接列表时出错
- lower_bound()返回最后一个元素
- 从控制台中删除最后打印的元素
- QuadTree只在窗口的右上角绘制
- 绘制旋转的三角形
- 获取向量C++中第一个值和最后一个值的和
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 获取用C/C++打印的最后一个字符串
- 如何在QT中的自定义视频小工具t上绘制矩形
- 如何在Visual Basic中使用矩形函数OpenGL绘制矩形
- 读取最后一行代码算法 - c++ 时出现问题
- 无法使用VAO和EBO(openGL)绘制多个对象
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- 绘制顺时针三角形,重新排序点
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- 如何检测是否在缓冲绘画动画中绘制最后一帧?
- 为什么我的 OpenGL 对象相对于最后一个绘制的对象绘制
- QwtPlot:使最后绘制的点看起来具有不同的颜色或大小
- 当矢量的最后一个对象都应该绘制时,只绘制它们
- 在QGraphicsView上的第一个和最后一个QPoint之间绘制一条线