小编Aul*_*ulz的帖子

c ++前向声明设计

从我所读到的,我应该尽可能使用前瞻声明.我有这样的类(由于前向声明,每个字段都是指针):

class A
{
    // ...

    A* a;
    B* b;
    C* c;
    D* d;
    E* e;
};
Run Code Online (Sandbox Code Playgroud)

但是存在问题.

1 - 这意味着调用new和delete(或至少与全新智能指针),用于构造每一个领域,而堆栈中分配领域不需要这个.

2-我读过堆栈分配比堆分配快.

3-这也意味着几乎每个类的每个字段都应该是指针.

我是否以正确的方式做我的示例类?或者我错过了有关前瞻性声明的内容?

c++ forward forward-declaration

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

c ++移动语义澄清

我有一个包含std :: string的Text类.一个方法SetText如下:

void Text::SetText( const std::string& str )
{
    m_str = str;
}
Run Code Online (Sandbox Code Playgroud)

因为这个方法几乎总是以rvalues作为参数调用,所以我想到了移动构造函数.我理解基础知识,但这就是全部.所以我做了测试并得出结论,像这样的另一个函数会更好,一旦定义了移动构造函数和移动分配,就可以获得性能提升:

void Text::SetText( std::string&& str )
{
    m_str = move( str );
}
Run Code Online (Sandbox Code Playgroud)

有我的问题:

  • 它适用于标准容器吗?他们是否提供移动构造和分配?
  • 当没有堆分配时,移动语义是否有用?(我的意思是根本没有堆分配,所以没有智能指针作为类成员)

谢谢.

c++ c++11

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

Directx 11骨骼动画

我迷失了骨骼动画.我已经读过一些有关这方面的事情,但他们仍然是我不明白的一件事.这是我的结论.我看到了3种使用骨骼为网格设置动画的方法:

  • 我有一个Mesh类,它包含顶点,顶点缓冲区,索引缓冲区和纹理着色器,以及变换矩阵.我可以为每个骨骼使用类,增加重量,我可以轻松地为模型设置动画.但这意味着使用太多的内存,因为存储的某些内容在必须只使用一次时会被使用.

  • 使用顶点着色器.在输入顶点参数中添加权重和骨骼索引,并使用矩阵数组作为全局变量,因此在着色器中我只需要使用骨骼矩阵.这个解决方案似乎对我来说效率更高,但我记得在directx 11教程(来自Rastertek)中他说HLSL应该很快,因为它使用了很多时间,而且我认为这太重了.无论如何这是我会尝试的解决方案,至少知道它是否有效.

  • 为每个骨骼使用矩阵和逆矩阵.至于阅读,这是采取的方式.但这是我不理解的方式.为什么这里使用矩阵求逆,以及矩阵如何"链接"到顶点.我的意思是如果我移动右手骨骼的矩阵,代码中说什么只会使用右手顶点?

所以我的问题是:

  • 第二种方式可行吗?或者对于具有一些网格和动画的GPU来说太多了?
  • 有人可以解释矩阵链接到顶点的方式以及为什么使用矩阵求逆?或者给我一些关于此事的信息.

我希望你能理解我,因为我不确定我解释得好.请原谅我的英语,我尽我所能.提前致谢.

directx skeletal-animation

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