2010-05-02 132 views
0

我有一个四边形,我想使用它生成的渐变作为另一个多边形的纹理。从多边形生成纹理(openGL)

glPushMatrix(); 
glTranslatef(250,250,0); 
    glBegin(GL_POLYGON); 


    glColor3f(255,0,0); 
glVertex2f(10,0); 
glVertex2f(100,0); 
glVertex2f(100,100); 
glVertex2f(50,50); 
glVertex2f(0,100); 

    glEnd(); //End quadrilateral coordinates 

    glPopMatrix(); 
    glBegin(GL_QUADS); //Begin quadrilateral coordinates 

    glVertex2f(0,0); 
glColor3f(0,255,0); 
    glVertex2f(150,0); 
    glVertex2f(150,150); 
    glColor3f(255,0,0); 
    glVertex2f(0,150); 


    glEnd(); //End quadrilateral coordinates 

我的目标是让5个顶点多边形具有四边形的梯度(也许纹理是不是最好的选择) 感谢

回答

2

保持简单!

这是非常简单的代码创建一个渐变的纹理,如:

// gradient white -> black 
GLubyte gradient[2*3] = { 255,255,255, 0,0,0 }; 

// WARNING: check documentation, I am not quite sure about syntax and order: 
glTexture1D(GL_TEXTURE_1D, 0,3, 2, 0, GL_RGB, GL_UNSIGNED_BYTE, gradient); 

// setup texture parameters, draw your polygon etc. 

图形硬件和/或GL将从颜色一个打造甜美的寻找梯度颜色的两种你(记住:这是硬件加速多边形绘制的基本优势之一,您不必在软件中进行插值工作)。

您的real问题是:您在5个顶点多边形上使用哪种纹理坐标。但那不是你的问题...... ;-)

+0

我同意这是一个更简单的解决方案,但在技术上不是OP所要求的:“...它[坡道]产生的坡度”。一般来说,多边形不会产生线性渐变,因为它通常会在两个轴上变化。此外,纹理映射问题不会出现在二维渐变纹理中。更确切地说:对于您提供的简单解决方案,您可以通过为每个顶点提供'glColor3f'来实现更简单的解决方案,该解决方案首先用于生成渐变。但是第一次渲染通道的结果通常会更加复杂。 – mnemosyn 2010-05-03 21:56:40

1

要做到这一点,你必须做一个渲染-to-质感。虽然这几乎是每个电路板的常见和支持,但它通常用于非常复杂的效果(例如镜子)。

如果它真的只是一个渐变,我会尝试在像Paint.Net应用程序中创建渐变。如果您确实需要在运行时创建它们,请使用像素着色器来实现渲染到纹理。但是,我恐怕用几句话来解释像素着色器有点困难 - 但是,网络上有很多关于这方面的教程。

使用像素着色器,您可以获得对图形卡的很多控制权。这允许您将场景渲染到临时缓冲区,然后将该缓冲区作为纹理很容易地应用,并且还有更多的功能。

+0

除了那个theres没有其他方式获得多边形线性渐变? – jmasterx 2010-05-02 00:41:03

+0

“线性插值”(你的渐变)是硬件加速渲染的最基本的基础知识之一,但请检查我的答案..;) – Frunsi 2010-05-02 00:52:09

+0

另一个提示:任何渲染到纹理的方法对于你的应用程序来说是完全矫枉过正的。它有点难过,实际的渲染到纹理的方法是如此晚。如果你想支持许多(消费者和专业)gfx卡,你仍然需要做很多低级工作才能使它工作并正确地完成工作。相信我们,不要对这个任务使用渲染到纹理的方法(它可以很容易地解决,而不需要rtt)。 – Frunsi 2010-05-02 01:02:37