我正在学习OpenGL。目前我知道如何使用VBO定义基元。 我实现了简单的类Mesh,并在这个类中使用了一些像Square这样的原语。 现在我想学习定义颜色的好方法。我正在考虑使用着色器。我的想法就是得到这样的东西。
class ColorShader{
public:
static GLuint red = LoadShaders( "SimpleVertexShader.vertexshader", "red.fragmentshader" );
};
但我不确定这是一个好方法。我认为这种方法的优点是每个三角形的内存减少30-50%。但是减去我将需要准备更多碎片器。
VertexColor让我有更多的力量来定义对象,但它消耗更多的内存,我不喜欢在同一个地方设置颜色和顶点的想法。
答案 0 :(得分:1)
如果我理解正确,你想设置每个对象的颜色而不是每个顶点?我会将一个float4值发送给片段着色器,用于常量缓冲区中的每个对象(至少在DirectX中调用它)。这真的很简单也是最基本的东西。
编辑: http://www.opengl.org/wiki/Uniform_Buffer_Object它们在OpenGL中称为统一缓冲区。
基本思想是在着色器中声明一个统一变量,并在c ++代码中获取指向它的指针,并在每次绘制对象时上传4个浮点数(或设置一次,相同的颜色将用于每个对象)。