0

我正在学习 OpenGL。目前我知道如何使用 VBO 定义原语。我实现了简单的网格类,并从这个类中实现了一些像 Square 这样的原语。现在我想学习定义颜色的好方法。我正在考虑使用着色器。我的想法是得到这样的东西。

class ColorShader{
public:
    static GLuint red =  LoadShaders( "SimpleVertexShader.vertexshader", "red.fragmentshader" );    
};

但我不确定这是否是个好方法。我认为这种方法的优点是我将为每个三角形减少 30-50% 的内存。但减号是我需要准备更多的碎片着色器。

VertexColor 给了我更多的权力来定义对象,但它消耗更多的内存,我不喜欢在同一个地方设置颜色和顶点的想法。

4

1 回答 1

1

如果我理解正确,您想设置每个对象而不是每个顶点的颜色?我会为常量缓冲区中的每个对象发送一个 float4 值到片段着色器(至少在 DirectX 中是这样调用的)。这真的很简单,也是最基本的东西,真的。

编辑: http ://www.opengl.org/wiki/Uniform_Buffer_Object它们在 OpenGL 中被称为统一缓冲区。

基本思想是您在着色器中声明一个统一变量,并在您的 c++ 代码中获取指向它的指针,并在每次绘制对象时上传 4 个浮点数(或设置一次,每个对象将使用相同的颜色) .

于 2013-11-02T18:07:30.400 回答