小编Get*_*eto的帖子

OpenGL - 索引缓冲困难

我有一个自定义文件格式,其中包含3D网格所需的所有信息(从3ds Max导出).我已经提取了顶点,顶点索引和法线的数据.

我向顶点数据,顶点索引和法线数据传递给OpenGL,我通过调用渲染网格 glDrawElements(GL_TRIANGLES,...)

一切看起来都正常,但正常情况.问题是法线具有不同的指数.并且因为OpenGL只能使用一个索引缓冲区,所以它对顶点和法线都使用该索引缓冲区.

如果你能建议我如何解决这个问题,我将非常感激.

需要注意的重要一点是顶点/普通数据没有"排序",因此我无法使用glDrawArrays(GL_TRIANGLES,...)- 网格无法正确渲染的功能.

有没有一种方法/算法可以用来对数据进行排序,以便可以正确绘制网格glDrawArrays(GL_TRIANGLES,..)?但即使有一个算法,还有一个问题 - 我将不得不复制一些顶点(因为我的顶点缓冲区由唯一的顶点组成 - 例如,如果你有立方体我的缓冲区将只有8个顶点)我不确定怎么做.

c++ opengl 3d rendering mesh

3
推荐指数
1
解决办法
3227
查看次数

Pre C++ 11等效于显式删除构造函数(Type(const Type&)= delete;)

有没有办法在不支持C++ 11的编译器上实现这种行为?

class Meow
{
public:
    Meow(const Meow&) = delete;
};
Run Code Online (Sandbox Code Playgroud)

使构造函数私有不是一个解决方案,因为那样你可以做这样的事情:

class Meow
{
private:  
    Meow(const Meow&);

public:
    Meow();

    void doSomething()
    {
        Meow kitty;
        Meow secondKity(kitty); // allowed
    }
};
Run Code Online (Sandbox Code Playgroud)

如果构造函数被标记为deleted上面是不可能的.

c++ constructor c++11

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

在包含指向对象的指针的数组中释放内存的正确方法

假设我有阵列:

Geometry* shapes[MAX_SIZE];
Run Code Online (Sandbox Code Playgroud)

然后我像这样填充数组:

for (int i = 0; i < MAX_SIZE; ++i)
{
    shapes[i] = new Geometry;
}
Run Code Online (Sandbox Code Playgroud)

delete [] shapes;完成工作或我必须循环遍历数组并逐个删除:

for (int i = 0; i < MAX_SIZE; ++i)
{
    delete shapes[i];
}
Run Code Online (Sandbox Code Playgroud)

我想我必须单独循环和删除每个指针,因为delete []调用数组中对象的析构函数,这并不意味着将释放内存.但我需要更有经验的人的确认.

c++ memory free pointers delete-operator

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

标签 统计

c++ ×3

3d ×1

c++11 ×1

constructor ×1

delete-operator ×1

free ×1

memory ×1

mesh ×1

opengl ×1

pointers ×1

rendering ×1