我想在openGL中绘制彩虹色的图例。以下是我到目前为止有:如何在Freeglut中绘制彩虹?
glBegin(GL_QUADS);
for (int i = 0; i != legendElements; ++i)
{
GLfloat const cellColorIntensity = (GLfloat) i/(GLfloat) legendElements;
OpenGL::pSetHSV(cellColorIntensity*360.0f, 1.0f, 1.0f);
// draw the ith legend element
GLdouble const xLeft = xBeginRight - legendWidth;
GLdouble const xRight = xBeginRight;
GLdouble const yBottom = (GLdouble)i * legendHeight/
(GLdouble)legendElements + legendHeight;
GLdouble const yTop = yBottom + legendHeight;
glVertex2d(xLeft, yTop); // top-left
glVertex2d(xRight, yTop); // top-right
glVertex2d(xRight, yBottom); // bottom-right
glVertex2d(xLeft, yBottom); // bottom-left
}
glEnd();
legendElements
是离散的方格组成的“彩虹”的数量。 xLeft
,xRight
,yBottom
和yTop
是组成每个平方的顶点。
在功能OpenGL::pSetHSV
看起来是这样的:
void pSetHSV(float h, float s, float v)
{
// H [0, 360] S and V [0.0, 1.0].
int i = (int)floor(h/60.0f) % 6;
float f = h/60.0f - floor(h/60.0f);
float p = v * (float)(1 - s);
float q = v * (float)(1 - s * f);
float t = v * (float)(1 - (1 - f) * s);
switch (i)
{
case 0: glColor3f(v, t, p);
break;
case 1: glColor3f(q, v, p);
break;
case 2: glColor3f(p, v, t);
break;
case 3: glColor3f(p, q, v);
break;
case 4: glColor3f(t, p, v);
break;
case 5: glColor3f(v, p, q);
}
}
我从http://forum.openframeworks.cc/t/hsv-color-setting/770
但是,该功能时,我得出这样它看起来像这样:
什么我想要的是红色,绿色,蓝色,靛蓝,紫罗兰色谱(所以我想直线迭代thr尽管色相。然而,这似乎并不是真正发生的事情。
我真的不明白是怎么RGB/HSV转换在pSetHSV()
作品所以这是我很难找出问题..
编辑:这是固定的版本,由Jongware作为灵感(矩形正在不正确地绘制):
// draw legend elements
glBegin(GL_QUADS);
for (int i = 0; i != legendElements; ++i)
{
GLfloat const cellColorIntensity = (GLfloat) i/(GLfloat) legendElements;
OpenGL::pSetHSV(cellColorIntensity * 360.0f, 1.0f, 1.0f);
// draw the ith legend element
GLdouble const xLeft = xBeginRight - legendWidth;
GLdouble const xRight = xBeginRight;
GLdouble const yBottom = (GLdouble)i * legendHeight/
(GLdouble)legendElements + legendHeight + yBeginBottom;
GLdouble const yTop = yBottom + legendHeight/legendElements;
glVertex2d(xLeft, yTop); // top-left
glVertex2d(xRight, yTop); // top-right
glVertex2d(xRight, yBottom); // bottom-right
glVertex2d(xLeft, yBottom); // bottom-left
}
glEnd();
什么''legendElements''用于图片?并在一个随机的旁注:'GLdouble const yBottom =(1.0f + cellColorIntensity)* legendHeight;'' – cfrick
@cfrick'legendElements'是组成“彩虹”的离散正方形的数量。 'xLeft','xRight','yBottom'和'yTop'是组成每个平方的顶点。 (将此添加到OP中)。 – arman
你可以尝试每个x坐标偏移一点吗?你的颜色计算看起来很好,所以我想知道你的矩形可能是错误的尺寸,最后一个是顶部的巨大红色。 – usr2564301