0

我正在尝试制作一个模拟掷骰子的应用程序,目前一切正常。我试图为用户选择骰子时添加一个着色器,它会在选定的骰子周围放置一个轮廓。我的做法是使特定的骰子稍微放大并完全变黑,然后在其顶部绘制纹理骰子,使其看起来像有轮廓。

我遇到的问题是,当第一次应用用于绘制黑色对象的着色器时,它会很好地绘制黑色骰子,但是当纹理骰子试图在它上面绘制时,它会在错误的位置绘制它,并绘制错误骰子。奇怪的是它把它画在屏幕上的另一个骰子里。

如果我将相同的着色器应用到对象两次,那么一切都绘制了它应该如何用于该特定着色器(由于轮廓着色器而全黑,或者所有纹理着色器由普通着色器照亮),但是当我将两个着色器应用到同样的型号,出问题了。

这个类加载顶点和东西,并绘制对象: http: //pastebin.com/N5aYAtBC

此类管理着色器:http: //pastebin.com/0bT7ABRu

我遗漏了很多我认为与问题无关的代码,但如果您需要更多代码,请发表评论

当我点击不同的骰子时,会发生这种情况(第一张图片是正常的):http: //imgur.com/a/ikZVX

4

1 回答 1

4
glUniformMatrix4fv(toon_mvp, 1, 0, modelViewProjectionMatrix.m);
glUniform4fv(toon_outline, 1, oc);
glUseProgram(Toon);

我认为你处理制服的方式有误。作为示例,我从您的来源中提取了此代码段。

当您上传制服时,它只会影响当前绑定的程序(每个程序都有自己的制服内部存储)。

如果您希望“toon”程序可以使用“toon_mvp”和“toon_outline”,那么它们将不可用。你需要先绑定你要修改的程序,绑定后修改它的制服,而不是其他顺序。

您可能还必须在代码的其他位置修复此问题。

于 2012-08-31T01:18:27.670 回答