我有一个自定义文件格式,其中包含3D网格所需的所有信息(从3ds Max导出).我已经提取了顶点,顶点索引和法线的数据.
我向顶点数据,顶点索引和法线数据传递给OpenGL,我通过调用渲染网格 glDrawElements(GL_TRIANGLES,...)
一切看起来都正常,但正常情况.问题是法线具有不同的指数.并且因为OpenGL只能使用一个索引缓冲区,所以它对顶点和法线都使用该索引缓冲区.
如果你能建议我如何解决这个问题,我将非常感激.
需要注意的重要一点是顶点/普通数据没有"排序",因此我无法使用glDrawArrays(GL_TRIANGLES,...)- 网格无法正确渲染的功能.
有没有一种方法/算法可以用来对数据进行排序,以便可以正确绘制网格glDrawArrays(GL_TRIANGLES,..)?但即使有一个算法,还有一个问题 - 我将不得不复制一些顶点(因为我的顶点缓冲区由唯一的顶点组成 - 例如,如果你有立方体我的缓冲区将只有8个顶点)我不确定怎么做.
有没有办法在不支持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上面是不可能的.
假设我有阵列:
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 []调用数组中对象的析构函数,这并不意味着将释放内存.但我需要更有经验的人的确认.