小编EdF*_*EdF的帖子

管理OpenGL状态机的策略

我现在正在处理OpenGL.我从GLUT开始,但决定"毕业"到SFML库.SFML实际上提供的GL实用程序甚至比GLUT少,但它是可移植的并提供了一些其他功能.所以它真的只有我,GL和GLU.是的,我是一个惩罚的傻瓜.

我想询问一下人们管理矩阵变化,颜色变化,材料变化等方面的策略.

目前,我正在遵循"裸体对象"设计理念从单个线程渲染.即.每个图形对象都有一个Render()功能,可以完成绘制工作.这些对象本身可以是其他对象的聚合,或图形基元的聚合.当一个特定的Render()被调用时,它没有关于在它之前调用了什么变换/材料变化的信息(当然是好事).

随着事情的发展,我已经确定了某些策略,比如让每个函数都承诺推送,然后在执行任何转换时弹出矩阵.使用其他设置,我在调用之前显式设置了需要设置的任何内容,glBegin()并且没有理所当然.当一个渲染函数对不常见的状态变量进行一些更改时,问题就会蔓延,我开始考虑使用一些RAII来强制撤销范围内所做的所有状态更改.使用OpenGL有时会让我想起很多汇编编程.

为了保持这一切,并帮助调试,我发现我实际上正在开发自己的openGL包装器,所以我认为听听其他人使用的策略,或者关于这个主题的想法和考虑因素会很好.或者也许是时候切换到类似场景图库的东西了?

更新:13/5/11

现在看看使用顶点/普通/颜色数组和VBO的渲染我决定将所有实际的openGL通信合并到一个单独的模块中.渲染过程包括从我的对象中获取GL独立的空间/材料数据,然后以可解释的格式将所有这些信息传递给openGL.这意味着所有原始数组处理和状态操作将合并到一个区域中.它为渲染过程添加了额外的间接和一点计算开销,但这意味着我可以为我的所有数据使用单个VBO /数组,然后一次传递一次,每帧一次传递给openGL.

c++ opengl design-patterns

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

重载的运算符和继承与模板(强大的组合)

问候所有.

我正在使用Boost Units库编写一些代码并遇到了问题.

我已经设法从Boost代码中抽象出问题所以你不会看到大量的boost模板元编程.虽然我确定你是否有经验,但它可以提供帮助.这是复制品:

class Base{};
class Derived : public Base
{
public:
  Derived(){}
  Derived(const Base &){}
};

class Q {};
class U
{
public:
  template< typename Y >
  Q operator * (Y)
  {
    Q r;
    return r;
  }
};

Base operator * (U, const Base &)
{
  Base r;
  return r;
}

int main(int argc, char **argv)
{
  Base myBase;
  U myU;
  Base myOtherBase = myU * myBase;
  Derived myDerived;
  Derived myOtherDerived =  myU * myDerived;
  return 0;
} …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance templates operator-overloading

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

Assignment involving generic property of generic object fails to typecheck correctly within generic function

I have a generic function that reads or writes the caller-chosen property of a given object. I'm using type constraints to ensure that the key passed is for a property that is assignable to or from the relevant type. Calling code appears to typecheck correctly. The usage of the object's property within the implementation does not typecheck as expected.

In this example I use boolean as the expected type. I've commented the lines that are not typechecking as expected. You …

javascript typescript typescript-generics

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

避免动态演员表的建筑策略

人们经常会读到如何设计代码以避免需要进行强制转换,以及如何发现自己需要进行强制转换可能会表明有更好的实现可用.我正在尝试在虚拟世界引擎的实现中实现"无铸造代码"的圣杯,其中许多对象具有各种各样的接口,充当许多不同形式的调解器和数据(有时两者) .作为类似问题中的一个答案(Linkage),目的是始终在所需位置具有正确类型的引用/指针,而不是试图从大范围的候选对象中挖出一个.

我管理这个大问题的最新尝试涉及使用调解器注册对象,这在控制粒度方面具有一些很好的优势(运行时可以在调解器和目标之间配置多对多的映射).

还有一些问题......我现在看到的最大问题是调解员的目标撤销.为了跟踪谁在使用什么而不必轮询每个可能的中介,程序需要存储更多关于已创建链接的数据.一方面,调解员可以通过检查他们的目标是否已过期来断开连接(我使用智能指针和弱指针,因此这并不困难),但这只是处理对象的到期,并且没有建立有意义的行为重新配置的框架.

从远处看,这只是软件在时间和记忆之间进行权衡的另一种情况.存储更多数据以减少计算量.

我想问一下你对构建程序以避免动态转换的想法,以及你是否可以分享在这些情况下有效的任何策略/模式.

c++ architecture design-patterns casting

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