【问题标题】:OpenGL define colors using shadersOpenGL 使用着色器定义颜色
【发布时间】:2013-11-03 02:07:30
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c++ opengl


    【解决方案1】:

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

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

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

    【讨论】:

    • 是的。我正在考虑这个,但我不知道如何在 opengl 中做到这一点
    • 嗯,该链接应该对您有所帮助,如果您还有其他问题,您可能会在 gamedev.stachexchange.com 上获得更多关注。祝你好运! ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 2014-06-27
    相关资源
    最近更新 更多