我想在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