小编ano*_*non的帖子

以下foward声明的多继承指针转换代码如何工作?

在followint代码中,指针转换和多继承如何一起发挥作用?

class Foo {
  public:
  virtual void someFunc();
};

class Bar;


void someWork(Bar *bar) {
  ((Foo*) bar)->someFunc();
}

class Bar: public Zed, public Foo {
...
virtual void someFunc() { ... do something else ... }
}

Bar bar;

int main() {
  someWork(&bar);
}
Run Code Online (Sandbox Code Playgroud)

我的理解有点不稳定.

一方面,有些工作对Bar一无所知,所以这不应该工作; 但另一方面,我已经向前宣布了Bar.

谢谢!

c++ virtual-functions multiple-inheritance forward-declaration

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

c ++名称空间导出

在C++中是否有一种方法可以创建一个匿名命名空间,并且只从中导出一个函数?

我想要的东西:

namespace {
  void Bar() {}
  void Foo() { Bar(); }
}
Run Code Online (Sandbox Code Playgroud)

现在,我想以某种方式访问​​,Foo()但确保没有办法触摸Bar()

谢谢!

c++ namespaces export

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

OpenGL漫反射照明着色器Bug?

橙皮书第16.2节列出了实施漫射照明:

void main()
{
  vec3 N = normalize(gl_NormalMatrix * gl_Normal);
  vec4 V = gl_ModelViewMatrix * gl_vertex;
  vec3 L = normalize(lightPos - V.xyz);
  gl_FrontColor = gl_Color * vec4(max(0.0, dot(N, L));
}
Run Code Online (Sandbox Code Playgroud)

但是,当我运行它时,我移动相机时灯光会发生变化.另一方面,当我改变

  vec3 N = normalize(gl_NormalMatrix * gl_Normal);
Run Code Online (Sandbox Code Playgroud)

to vec3 N = normalize(gl_Normal);

我获得了像固定管道一样工作的漫射光.

什么是gl_NormalMatrix,删除它做了什么,...这是橙皮书中的一个错误......还是我不正确地设置我的OpenGl代码?

[为完整起见,片段着色器只复制颜色]

vertex-shader fragment-shader

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

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