我一直在研究我遇到的这个问题,但我似乎无法很好地理解它来解决它,所以我想我不妨把它扔在那里,聪明的一群可能会有一些想法。:P
基本上我已经在 iPhone 项目上工作了一段时间,在那里我可以奢侈地使用所有最新的框架和目标 5.1。所以我一直在使用 GLKit 和 GLKBaseEffect 对我来说效果很好。我开始使用 GLKBaseEffect 而不是编写自己的着色器的原因是我不太了解 glsl。然而,要求变得更加精确,基本效果似乎不再削减它。
由于我已经在使用基础效果进行所有变换,因此我希望我可以保持基础效果完好无损,但如果有任何意义,可以在顶部添加 glsl 类型的着色器。
我的旧方法看起来像这样(这是在一个循环中渲染所有对象,其中一个对象包含变换、网格和其他一些对这个问题不太重要的东西,比如纹理、材质等)
ObjectBase *obj = [ResourceManager.shared getObjectNamed:name inScene:sceneName];
GLKMatrix4 modelview = effect.transform.modelviewMatrix;
effect.transform.modelviewMatrix = GLKMatrix4Multiply(effect.transform.modelviewMatrix, obj.transform);
[effect prepareToDraw];
[obj render];
effect.transform.modelviewMatrix = modelView;
这里我们获取一个对象来渲染和变换(即平移、旋转和缩放)对象,然后我们渲染它,渲染本身获取对象的网格,绑定缓冲区并渲染它。
到目前为止,一切都很好。
然而,我想做的是,在[obj render];
调用过程中,我希望对象也能做一些事情,比如glUseProgram(someProgram);
添加更专业的着色器代码。
我想有人可能会争辩说我正在尝试为我的顶点着色器使用基本效果,并希望为我的片段着色器使用“普通”着色器。至少这是我想我想做的。
我一直在尝试一些事情。
我试图只创建片段着色器并glUseProgram
在其上创建,但是它说我在设置和编译时需要一个顶点和一个片段着色器。我还尝试创建一个空的顶点着色器,结果不是很好,我不知道会发生什么,但我猜它会否决基本效果。
最后,我倾向于接受最好放弃基础效果并一直编写自己的着色器。我只是觉得窗外有很多工作,所以我想看看我能节省多少。
我明白我对着色器的理解是给我带来最多问题的部分,所以请耐心等待这个事实。