从多边形生成纹理(openGL)

时间:2010-05-02 00:09:35

标签: c++ opengl graphics

我有一个四边形,我想使用它产生的渐变作为另一个多边形的纹理。

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 个答案:

答案 0 :(得分: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将为您创建一个从一色到二色的甜美渐变(请记住:这是具有硬件加速多边形绘制的基本优势之一,您不必进行插值工作在软件中。)

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

答案 1 :(得分:1)

要做到这一点,你必须做一个渲染到纹理。虽然这是常见的并且几乎每个板都支持,但它通常用于非常精细的效果(例如镜子)。

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

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