2011-11-26 90 views
0

我写过一个Vector类,用于3D“引擎”。它在编译调试模式时的工作方式与预期相同,但在发布模式下编译时,颜色完全错误。不是我指定的颜色,它变成了随着相机改变的纯色。在发布模式下编译时出现奇怪的结果

我拍下了照片来展示它的样子:debug moderelease mode。请注意,我也使用这个类来转换我的顶点,并且在调试和发布模式下都可以正常工作。

这是我如何将颜色向量传递给我的着色器(伪代码)。

Vector3 Diffuse = Vector3(0.3f, 0.5f, 1.0f); 
Vector3 Ambient = Vector3(0.3f, 0.3f, 0.3f); 

Shaders.SetUniformData("AmbientColor", sizeof(float) * 3, 1, &Ambient); 
Shaders.SetUniformData("DiffuseColor", sizeof(float) * 3, 1, &Diffuse); 

如果你需要看到更多的代码,请告诉我们。

这里是我的Vector类源代码:http://pastebin.com/spy7FWFg(必须删除http://因为我只允许发布2个超级链接)。 这一直困扰我一段时间,所以任何帮助非常感谢。

编辑:好吧我解决了它!呵呵,这是没有错的Vector类,它是我如何将它发送到着色器...

事情是我有2个功能,我已经把数据传递给着色器,第一个是我展示的在第一篇文章和其他(我真正使用的)需要一个UNIFORM结构(自定义结构)的数组,显然这是一个在发布模式下不工作...

对不起,浪费你的时间和谢谢为你的帮助=)

+1

你的Vector类对我来说看起来非常完美。由于这种情况只发生在发布模式中,所以请在所有代码中查看(或寻找)未初始化的变量(通常在调试模式下,变量会被初始化,但它们不处于发布模式)。 –

+0

如何向我们提供矢量类本身的源代码?否则,这只是猜测,什么是没有正确初始化。 – datenwolf

+0

@datenwolf源代码在我的文章中链接,你可能错过了它,因为它是纯文本而不是真正的链接。这里再次是:http://pastebin.com/spy7FWFg – Traxmate

回答

0

我同意cli_hlt,首先要寻找的是未初始化的变量在你的代码中的任何地方。另外一个,有点不太可能是,虽然你可以尝试储存您在一条直线float[]环境和漫反射颜色经过他们面前:

float diffuseArray[] = { Diffuse.X,Diffuse.Y,Diffuse.Z }; 
float ambientArray[] = { Ambient.X,Ambient.Y,Diffuse.Z }; 
Shaders.SetUniformData("AmbientColor", sizeof(float) * 3, 1, ambientArray); 
Shaders.SetUniformData("DiffuseColor", sizeof(float) * 3, 1, diffuseArray); 

由于是,你正在工作(比较合理的,我认为)假设所有Vector的成员变量都会显示在内存中,在Vector对象的前12个字节中,所以传入向量的指针应该相当于传入一个包含三个数组的三维数组。我相信这通常是有效的,但如果您确定问题出现在给定的代码行中,则可能值得尝试。

+0

这样做虽然做的工作,但它有点乏味......我已经检查,如果它是通过放置断点来获得地址,然后检查与欺骗引擎顺序,这是为了这张图片显示:http:// localhostr.com/file/RvgSnMw/cheat%20engine%20values.PNG 它应该不是一个未初始化的变量的问题,因为类自动初始化所​​有变量为0,但是,所有这些对我来说都是新鲜的,所以我可能是错的:P – Traxmate

+0

既然它是这样工作的,为什么不在你的顶点类中创建一个返回浮点数组的方法,这样你就不必显式地抓取每个组件? – NickLH

+0

谢谢大家! – Traxmate

相关问题