小编Sat*_*own的帖子

结构中的向量 - 最佳方法?C++

我试图在我的结构中包含一个向量.

这是我的结构:

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)

有趣的是,如果我将它分配到结构之外并且只是在我使用的函数中,它就不会发生.有任何想法吗?

c++ struct vector

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

是否有可能/建议在结构中存储一个向量?C++

我总是把结构想象成一个固定大小的对象,虽然似乎没有任何明显的编译器错误,但我想知道这样做是否通常是好的做法.将结构更改为类更可取,还是结构也可以更好?

代码,只是因为人们变得挑剔:

struct Sprite
{
    float x;
    float y;
    std::vector<Sprite> sprite;
}
Run Code Online (Sandbox Code Playgroud)

我正在做的事情的本质是让一个类的子类与父类相同.当父母去世时,孩子们也会这样做.

c++ struct vector

9
推荐指数
2
解决办法
741
查看次数

外部测试环境时程序崩溃 - C++

我有一个程序,当从Visual Studio 2010 Express内部运行时运行非常好,但是当构建和取出时,它有问题.我设置的外部测试环境与在Visual Studio中运行时相同,因此不应该是问题.我想将它附加到.exe以查看崩溃的位置,但我没有非Express版本.

有什么建议?为什么程序会在VSC++ 2010 Express环境之外崩溃,但在内部运行完美.

我会发布代码,但它是一个巨大的项目,而不是会导致错误的行.

非常感谢您的参与.

c++ crash debugging environment visual-c++

6
推荐指数
1
解决办法
2149
查看次数

OpenGL - 为什么删除矩阵堆栈以及现在人们使用什么?

我正在阅读OpenGL Superbible Fifth Edition,他们讨论通过他们自己的类使用堆栈.这一切都很棒,但他们提到矩阵堆栈已被弃用.为什么他们被弃用,人们使用什么而不是他们?

opengl stack matrix

6
推荐指数
2
解决办法
1905
查看次数

OpenGL - VAO,VBO,IBO,glDrawElements不显示

我无法将我的关卡数据显示在屏幕上.我正在使用我的着色器正确渲染立方体而不是水平.

这是我的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)

c++ opengl vbo

6
推荐指数
1
解决办法
3239
查看次数

Java Iterator在C++中的等价物?(带代码)

大家好.一位朋友为我编写了一些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)

c++ java

5
推荐指数
1
解决办法
902
查看次数

使用VBO渲染顶点的问题 - OpenGL

我正在将我的顶点数组函数转移到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中渲染什么.

渲染: …

c++ opengl render vbo

5
推荐指数
1
解决办法
1561
查看次数

zlib 压缩的最佳大小?

我见过关于 zlib 压缩的最小和最大大小的线程。我想知道人们认为可确保最佳速度的压缩数据块的最佳大小是多少。将文件分割成多个文件块是否有优势?

谢谢。

compression performance zlib

5
推荐指数
1
解决办法
1836
查看次数

将文件输出到特定文件夹C++ Windows 7

我正在使用C++并尝试将文件输出到特定位置,具有指定名称的文件夹与可执行文件位于同一目录中.无法通过简单的方法找到一个很好的资源,但我知道它必须是可能的.

我的例子.我正在保存一个日志文件,而不是将其保存到与可执行文件相同的目录,它保存到/ logs /

感谢您的时间!

编辑:我使用mkdir创建一个文件夹,但如何输出到该文件夹​​.mkdir甚至是一件好事吗?我想学习最好的方法,不一定是最简单的方法.

c++ file-io save

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

关于glDrawRangeElements()的问题

我试图使用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++ opengl render

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