我有一个四边形,我想使用它产生的渐变作为另一个多边形的纹理。
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个顶点多边形具有四边形的渐变(也许纹理不是最好的选择) 感谢
答案 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这样的应用程序中创建渐变。如果您确实需要在运行时创建它们,请使用像素着色器来实现渲染到纹理。但是,我害怕用几句话来解释像素着色器有点难度 - 但是网上有很多关于这个的教程。
使用像素着色器,您可以获得对图形卡的大量控制。这允许您将场景渲染到临时缓冲区,然后很容易地将该缓冲区作为纹理应用,还有更多功能。