C++ 从多边形生成纹理(openGL)

C++ 从多边形生成纹理(openGL),c++,opengl,graphics,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

我有一个四边形,我想用它产生的梯度作为另一个多边形的纹理

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顶点多边形具有四边形的渐变(可能纹理不是最佳选择)
谢谢

要做到这一点,您必须对纹理进行渲染。虽然这是很常见的,而且几乎每个板都支持它,但它通常用于相当复杂的效果(例如镜子)

如果它真的只是一个渐变,我会尝试在am应用程序中创建渐变,比如Paint.Net。如果确实需要在运行时创建它们,请使用像素着色器实现“渲染到纹理”。然而,我担心用几句话来解释像素着色器有点困难——然而,网上有很多关于这个的教程


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

要做到这一点,您必须执行“渲染到纹理”。虽然这是很常见的,而且几乎每个板都支持它,但它通常用于相当复杂的效果(例如镜子)

如果它真的只是一个渐变,我会尝试在am应用程序中创建渐变,比如Paint.Net。如果确实需要在运行时创建它们,请使用像素着色器实现“渲染到纹理”。然而,我担心用几句话来解释像素着色器有点困难——然而,网上有很多关于这个的教程

使用像素着色器,您可以对图形卡进行大量控制。这使您可以将场景渲染到一个临时缓冲区,然后将该缓冲区作为纹理轻松应用,并提供更多功能。

保持简单

在代码中创建渐变纹理非常简单,例如:

// 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顶点多边形上使用哪些纹理坐标。但那不是你的问题…;-)

保持简单

在代码中创建渐变纹理非常简单,例如:

// 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顶点多边形上使用哪些纹理坐标。但那不是你的问题…;-)

除此之外,没有其他方法可以在多边形上获得线性渐变?“线性插值”(你的渐变)是硬件加速渲染最基本的基础之一,但请检查我的答案……)另一个提示:对于您的应用程序来说,任何“渲染到纹理”方法都是完全多余的。有点遗憾的是,实用的纹理渲染方法出现得太晚了。如果你想支持很多(消费者和专业人士)gfx卡,你仍然需要做大量的底层工作才能让它正常工作。相信我们,不要在这个任务中使用渲染到纹理的方法(不用rtt就可以轻松解决)。除此之外,没有其他方法可以在多边形上获得线性渐变?“线性插值”(你的渐变)是硬件加速渲染的最基本的基础之一,但请检查我的答案……)另一个提示:对于您的应用程序来说,任何“渲染到纹理”方法都是完全多余的。有点遗憾的是,实用的纹理渲染方法出现得太晚了。如果你想支持很多(消费者和专业人士)gfx卡,你仍然需要做大量的底层工作才能让它正常工作。相信我们,不要在这个任务中使用渲染到纹理的方法(不用rtt就可以轻松解决)。我同意这是一个更简单的解决方案,但从技术上讲不是OP要求的:“…它(poloygon)产生的梯度”。通常,多边形不会产生线性渐变,因为它通常会在两个轴上变化。此外,二维梯度纹理不会出现纹理映射问题。更精确地说:对于您提供的简单解决方案,您可以通过向每个顶点提供
glColor3f
来实现更简单的解决方案,这首先用于生成渐变。但第一次渲染过程的结果通常要复杂得多。我同意这是一个更简单的解决方案,但技术上并不是OP所要求的:“……它(poloygon)产生的梯度”。通常,多边形不会产生线性渐变,因为它通常会在两个轴上变化。此外,二维梯度纹理不会出现纹理映射问题。更精确地说:对于您提供的简单解决方案,您可以通过向每个顶点提供
glColor3f
来实现更简单的解决方案,这首先用于生成渐变。但是第一次渲染过程的结果通常要复杂得多。