我试图在我的结构中包含一个向量.
这是我的结构:
struct Region
{
bool hasPoly;
long size1;
long size2;
long size3;
long size4;
long size5;
long size6;
//Mesh* meshRef; // the mesh with the polygons for this region
long meshRef;
std::vector<int> PVS;
} typedef Region;
Run Code Online (Sandbox Code Playgroud)
此声明中的向量是有效还是更有意义地指向向量.在指向矢量的指针的情况下,我是否需要分配新的矢量.我怎么做到这一点?
谢谢!
编辑:问题是它最终导致错误指向xmemory.h,这是MSVC++平台附带的文件.
void construct(pointer _Ptr, _Ty&& _Val)
{ // construct object at _Ptr with value _Val
::new ((void _FARQ *)_Ptr) _Ty(_STD forward<_Ty>(_Val)); // this is the line
}
Run Code Online (Sandbox Code Playgroud)
有趣的是,如果我将它分配到结构之外并且只是在我使用的函数中,它就不会发生.有任何想法吗?
我总是把结构想象成一个固定大小的对象,虽然似乎没有任何明显的编译器错误,但我想知道这样做是否通常是好的做法.将结构更改为类更可取,还是结构也可以更好?
代码,只是因为人们变得挑剔:
struct Sprite
{
float x;
float y;
std::vector<Sprite> sprite;
}
Run Code Online (Sandbox Code Playgroud)
我正在做的事情的本质是让一个类的子类与父类相同.当父母去世时,孩子们也会这样做.
我有一个程序,当从Visual Studio 2010 Express内部运行时运行非常好,但是当构建和取出时,它有问题.我设置的外部测试环境与在Visual Studio中运行时相同,因此不应该是问题.我想将它附加到.exe以查看崩溃的位置,但我没有非Express版本.
有什么建议?为什么程序会在VSC++ 2010 Express环境之外崩溃,但在内部运行完美.
我会发布代码,但它是一个巨大的项目,而不是会导致错误的行.
非常感谢您的参与.
我正在阅读OpenGL Superbible Fifth Edition,他们讨论通过他们自己的类使用堆栈.这一切都很棒,但他们提到矩阵堆栈已被弃用.为什么他们被弃用,人们使用什么而不是他们?
我无法将我的关卡数据显示在屏幕上.我正在使用我的着色器正确渲染立方体而不是水平.
这是我的VBO,VAO和IBO的设置:
void ZoneMesh::buildData()
{
// Create the VBO for this mesh
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
// Create the IBO
glGenBuffers(1, &ibo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, numPoly * 3 * sizeof(short), indices, GL_STATIC_DRAW);
// Create the VAO
glGenVertexArraysAPPLE(1, &vao);
glBindVertexArrayAPPLE(vao);
// Bind the VBO to the buffer and set up the attributes
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), BUFFER_OFFSET(0));
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), BUFFER_OFFSET(sizeof(float)*3));
glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), BUFFER_OFFSET(sizeof(float)*5));
//Bind the IBO to the …Run Code Online (Sandbox Code Playgroud) 大家好.一位朋友为我编写了一些Java代码,我很容易将其转换为C++,但我对C++中的Java迭代器的等价物非常好奇.这是代码,我很可能希望将数据返回到向量中.任何帮助表示赞赏
public class RLEIterator
extends RegionIterator
{
public int reg = 0;
public int mode = 0;
public int skip = 0;
// mode is the number of IDs that are valid still (count down)
// skip is used after we run out of mode IDs, and move forward
// The goal is, to always have a valid 'hasNext' state, after
// an ID is read via 'next'. Thus, the initial search, and then
// the reading forward if mode …Run Code Online (Sandbox Code Playgroud) 我正在将我的顶点数组函数转移到VBO,以提高我的应用程序的速度.
这是我原来的工作顶点数组渲染函数:
void BSP::render()
{
glFrontFace(GL_CCW);
// Set up rendering states
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glVertexPointer(3, GL_FLOAT, sizeof(Vertex), &vertices[0].x);
glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &vertices[0].u);
// Draw
glDrawElements(GL_TRIANGLES, numIndices, GL_UNSIGNED_SHORT, indices);
// End of rendering - disable states
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
}
Run Code Online (Sandbox Code Playgroud)
工作得很好!
现在我将它们转移到VBO中,我的程序实际上导致我的显卡停止响应.我的顶点和索引上的设置完全相同.
新设置:
vboId在bsp.h中设置如下:GLuint vboId [2];
我刚刚运行createVBO()函数时没有出错!
void BSP::createVBO()
{
// Generate buffers
glGenBuffers(2, vboId);
// Bind the first buffer (vertices)
glBindBuffer(GL_ARRAY_BUFFER, vboId[0]);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
// Now save indices data in buffer
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboId[1]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
}
Run Code Online (Sandbox Code Playgroud)
以及VBOS的渲染代码.我很确定它就在这里.只想像在顶点数组中那样在VBO中渲染什么.
渲染: …
我见过关于 zlib 压缩的最小和最大大小的线程。我想知道人们认为可确保最佳速度的压缩数据块的最佳大小是多少。将文件分割成多个文件块是否有优势?
谢谢。
我正在使用C++并尝试将文件输出到特定位置,具有指定名称的文件夹与可执行文件位于同一目录中.无法通过简单的方法找到一个很好的资源,但我知道它必须是可能的.
我的例子.我正在保存一个日志文件,而不是将其保存到与可执行文件相同的目录,它保存到/ logs /
感谢您的时间!
编辑:我使用mkdir创建一个文件夹,但如何输出到该文件夹.mkdir甚至是一件好事吗?我想学习最好的方法,不一定是最简单的方法.
我试图使用glDrawRangeElements()命令渲染一些旧的级别数据.我的顶点设置正确,我的索引设置正确,但我似乎无法渲染它.我终于在网上查了一下,发现了这里的例子:http://www.songho.ca/opengl/gl_vertexarray.html
从这个例子来看,我认为我做错了.显然,start是索引值,结尾是索引值,而不是indices数组的索引.我假设,例如,如果你想渲染10个三角形,开始将是0,结尾将是29,计数将是30.但我显然是错的?
只有当索引值为0和29实际上是0和29时,这才是正确的.因此,如果索引以400开始并以452结束,则对该相同数组的调用将改为
glDrawRangeElements(GL_TRIANGLES, 400, 452, 29, GL_UNSIGNED_BYTE, indices);
Run Code Online (Sandbox Code Playgroud)
那是对的吗?有没有人认为这有点反直觉?关于顶点数组的任何其他建议?
c++ ×8
opengl ×4
render ×2
struct ×2
vbo ×2
vector ×2
compression ×1
crash ×1
debugging ×1
environment ×1
file-io ×1
java ×1
matrix ×1
performance ×1
save ×1
stack ×1
visual-c++ ×1
zlib ×1