<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://www.programmingexamples.net/w/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://www.programmingexamples.net/w/index.php?action=history&amp;feed=atom&amp;title=OpenGL%2FColorPick</id>
		<title>OpenGL/ColorPick - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://www.programmingexamples.net/w/index.php?action=history&amp;feed=atom&amp;title=OpenGL%2FColorPick"/>
		<link rel="alternate" type="text/html" href="http://www.programmingexamples.net/w/index.php?title=OpenGL/ColorPick&amp;action=history"/>
		<updated>2026-05-25T13:34:24Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.23.5</generator>

	<entry>
		<id>http://www.programmingexamples.net/w/index.php?title=OpenGL/ColorPick&amp;diff=358&amp;oldid=prev</id>
		<title>Daviddoria: Created page with '==ColorPick.cxx== &lt;source lang=&quot;cpp&quot;&gt; #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;map&gt; #include &lt;cstdio&gt;  #include &lt;glut.h&gt;  void display(); void LookAt(); void DrawCube(cons…'</title>
		<link rel="alternate" type="text/html" href="http://www.programmingexamples.net/w/index.php?title=OpenGL/ColorPick&amp;diff=358&amp;oldid=prev"/>
				<updated>2010-11-24T00:41:50Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;#039;==ColorPick.cxx== &amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt; #include &amp;lt;iostream&amp;gt; #include &amp;lt;vector&amp;gt; #include &amp;lt;map&amp;gt; #include &amp;lt;cstdio&amp;gt;  #include &amp;lt;glut.h&amp;gt;  void display(); void LookAt(); void DrawCube(cons…&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==ColorPick.cxx==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;vector&amp;gt;&lt;br /&gt;
#include &amp;lt;map&amp;gt;&lt;br /&gt;
#include &amp;lt;cstdio&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;glut.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void display();&lt;br /&gt;
void LookAt();&lt;br /&gt;
void DrawCube(const bool PickColors);&lt;br /&gt;
&lt;br /&gt;
#define PICK_BUFFER_SIZE 256&lt;br /&gt;
unsigned int PickBuffer[PICK_BUFFER_SIZE];&lt;br /&gt;
&lt;br /&gt;
void Pick(GLdouble x, GLdouble y);&lt;br /&gt;
&lt;br /&gt;
void MouseButtonsPick(int button, int state, int x, int y);&lt;br /&gt;
void polygon(int a, int b, int c , int d);&lt;br /&gt;
&lt;br /&gt;
void Array2Vec(unsigned char arr[3], std::vector&amp;lt;unsigned char&amp;gt; &amp;amp;out);&lt;br /&gt;
void OutputVector(std::vector&amp;lt;unsigned char&amp;gt; &amp;amp;arr);&lt;br /&gt;
&lt;br /&gt;
int WindowHeight = 1000;&lt;br /&gt;
int WindowWidth = 1000;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//vector&amp;lt;vector&amp;lt;unsigned char&amp;gt; &amp;gt; ColorList(256*256*256);&lt;br /&gt;
std::map&amp;lt;std::vector&amp;lt;unsigned char&amp;gt;, int&amp;gt; ColorMap;&lt;br /&gt;
std::vector&amp;lt;std::vector&amp;lt;unsigned char&amp;gt; &amp;gt; ColorList;&lt;br /&gt;
void GenerateColors(std::map&amp;lt;std::vector&amp;lt;unsigned char&amp;gt;, int&amp;gt; &amp;amp;Map, std::vector&amp;lt;std::vector&amp;lt;unsigned char&amp;gt; &amp;gt; &amp;amp;List, int num);&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[])&lt;br /&gt;
{&lt;br /&gt;
  GenerateColors(ColorMap, ColorList, 10);&lt;br /&gt;
&lt;br /&gt;
  glutInit(&amp;amp;argc, argv);&lt;br /&gt;
  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);&lt;br /&gt;
  glutInitWindowSize(WindowWidth, WindowHeight);&lt;br /&gt;
  glutInitWindowPosition(0, 0);&lt;br /&gt;
&lt;br /&gt;
  glutCreateWindow(&amp;quot;Picking Example&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  glutDisplayFunc(display);&lt;br /&gt;
  glutMouseFunc(MouseButtonsPick);&lt;br /&gt;
&lt;br /&gt;
  glEnable(GL_DEPTH_TEST);&lt;br /&gt;
&lt;br /&gt;
  LookAt();&lt;br /&gt;
  glutMainLoop();&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void GenerateColors(std::map&amp;lt;std::vector&amp;lt;unsigned char&amp;gt;, int&amp;gt; &amp;amp;Map, std::vector&amp;lt;std::vector&amp;lt;unsigned char&amp;gt; &amp;gt; &amp;amp;List, int num)&lt;br /&gt;
{&lt;br /&gt;
  std::vector&amp;lt;unsigned char&amp;gt; junk(3,-1);&lt;br /&gt;
  List = std::vector&amp;lt;std::vector&amp;lt;unsigned char&amp;gt; &amp;gt; (num + 1, junk);&lt;br /&gt;
  int ColorIndex = 1;&lt;br /&gt;
&lt;br /&gt;
  for(unsigned char r = 1; r &amp;lt;= 255 &amp;amp;&amp;amp; r &amp;gt; 0; r++) // or (int)r &amp;lt;= 255&lt;br /&gt;
  {&lt;br /&gt;
    //printf(&amp;quot;r: %u\n&amp;quot;, r);&lt;br /&gt;
    for(unsigned char g = 1; g &amp;lt;= 255 &amp;amp;&amp;amp; g &amp;gt; 0; g++)&lt;br /&gt;
    {&lt;br /&gt;
      //printf(&amp;quot;g: %u\n&amp;quot;, g);&lt;br /&gt;
      for(unsigned char b = 1; b &amp;lt;= 255 &amp;amp;&amp;amp; b&amp;gt;0; b++)&lt;br /&gt;
      {&lt;br /&gt;
	//printf(&amp;quot;b: %u\n&amp;quot;, b);&lt;br /&gt;
	std::vector&amp;lt;unsigned char&amp;gt; color(3,0);&lt;br /&gt;
	color[0] = r;&lt;br /&gt;
	color[1] = g;&lt;br /&gt;
	color[2] = b;&lt;br /&gt;
&lt;br /&gt;
	Map[color] = ColorIndex;&lt;br /&gt;
	List[ColorIndex] = color;&lt;br /&gt;
	//ColorList.push_back(color);&lt;br /&gt;
&lt;br /&gt;
	ColorIndex++;&lt;br /&gt;
	if(ColorIndex &amp;gt; num)&lt;br /&gt;
	{&lt;br /&gt;
	  return;&lt;br /&gt;
	}&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void LookAt()&lt;br /&gt;
{&lt;br /&gt;
  glMatrixMode(GL_PROJECTION);&lt;br /&gt;
  glLoadIdentity();&lt;br /&gt;
  gluPerspective(70, 1, 1, 100);&lt;br /&gt;
&lt;br /&gt;
  glMatrixMode(GL_MODELVIEW);&lt;br /&gt;
  glLoadIdentity();&lt;br /&gt;
&lt;br /&gt;
  gluLookAt(2, 2, 10, 2, 0, 0, 0, 1, 0);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void display()&lt;br /&gt;
{&lt;br /&gt;
  DrawCube(false);&lt;br /&gt;
&lt;br /&gt;
  glutSwapBuffers();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GLfloat vertices[][3] = {{-1.0,-1.0,-1.0},{1.0,-1.0,-1.0},&lt;br /&gt;
		{1.0,1.0,-1.0}, {-1.0,1.0,-1.0}, {-1.0,-1.0,1.0},&lt;br /&gt;
  		{1.0,-1.0,1.0}, {1.0,1.0,1.0}, {-1.0,1.0,1.0}};&lt;br /&gt;
&lt;br /&gt;
void DrawCube(const bool PickColors)&lt;br /&gt;
{&lt;br /&gt;
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);&lt;br /&gt;
&lt;br /&gt;
  if(PickColors)&lt;br /&gt;
  {&lt;br /&gt;
    glDisable(GL_DITHER);&lt;br /&gt;
    glDisable(GL_LIGHTING);&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    glEnable(GL_DITHER);&lt;br /&gt;
    //glEnable(GL_LIGHTING);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if(!PickColors)&lt;br /&gt;
  {&lt;br /&gt;
    glColor3ub(255, 0, 0);	// Color Red&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    glColor3ub(1, 1, 1);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  polygon(0,3,2,1);&lt;br /&gt;
&lt;br /&gt;
  if(!PickColors)&lt;br /&gt;
  {&lt;br /&gt;
    glColor3ub(0,255,0);	// Color Green&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    glColor3ub(1, 1, 2);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  polygon(2,3,7,6);&lt;br /&gt;
&lt;br /&gt;
  if(!PickColors)&lt;br /&gt;
  {&lt;br /&gt;
    glColor3ub(0, 0, 255);	// Color Blue&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    glColor3ub(1, 1, 3);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  polygon(0,4,7,3);&lt;br /&gt;
&lt;br /&gt;
  if(!PickColors)&lt;br /&gt;
  {&lt;br /&gt;
    glColor3ub(255,255,0);	// Color Yellow&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    glColor3ub(1, 1, 4);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  polygon(1,2,6,5);&lt;br /&gt;
&lt;br /&gt;
  if(!PickColors)&lt;br /&gt;
  {&lt;br /&gt;
    glColor3ub(0,255,255);	// Color Cyan&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    glColor3ub(1, 1, 5);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  polygon(4,5,6,7);&lt;br /&gt;
&lt;br /&gt;
  if(!PickColors)&lt;br /&gt;
  {&lt;br /&gt;
    glColor3ub(255,0,255);	// Color Magenta&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    glColor3ub(1, 1, 6);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  polygon(0,1,5,4);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void polygon(int a, int b, int c , int d)&lt;br /&gt;
{&lt;br /&gt;
  glBegin(GL_QUADS);&lt;br /&gt;
    glVertex3fv(vertices[a]);&lt;br /&gt;
    glVertex3fv(vertices[b]);&lt;br /&gt;
    glVertex3fv(vertices[c]);&lt;br /&gt;
    glVertex3fv(vertices[d]);&lt;br /&gt;
  glEnd();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void MouseButtonsPick(int button, int state, int x, int y)&lt;br /&gt;
{&lt;br /&gt;
  if( (state == GLUT_DOWN) &amp;amp;&amp;amp; (button == GLUT_LEFT_BUTTON) )&lt;br /&gt;
  {&lt;br /&gt;
    double newy = glutGet(GLUT_WINDOW_HEIGHT) - 1 - y;&lt;br /&gt;
    Pick(x, newy);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void Pick(GLdouble x, GLdouble y)&lt;br /&gt;
{&lt;br /&gt;
  DrawCube(true);&lt;br /&gt;
  //glutSwapBuffers();&lt;br /&gt;
&lt;br /&gt;
  unsigned char pixelub[3];&lt;br /&gt;
  glReadPixels(x, y, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, pixelub);&lt;br /&gt;
&lt;br /&gt;
  printf(&amp;quot;r: %u g: %u b: %u\n&amp;quot;, pixelub[0], pixelub[1], pixelub[2]);&lt;br /&gt;
&lt;br /&gt;
  std::vector&amp;lt;unsigned char&amp;gt; v(3,0);&lt;br /&gt;
  Array2Vec(pixelub, v);&lt;br /&gt;
&lt;br /&gt;
  printf(&amp;quot;r: %u g: %u b: %u\n&amp;quot;, v[0], v[1], v[2]);&lt;br /&gt;
&lt;br /&gt;
  int c = ColorMap[v];&lt;br /&gt;
  std::cout &amp;lt;&amp;lt; &amp;quot;Color Index: &amp;quot; &amp;lt;&amp;lt; c &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
  std::cout &amp;lt;&amp;lt; &amp;quot;Corresponding Color: &amp;quot;;&lt;br /&gt;
  OutputVector(ColorList[c]);&lt;br /&gt;
  std::cout &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Array2Vec(unsigned char arr[3], std::vector&amp;lt;unsigned char&amp;gt; &amp;amp;out)&lt;br /&gt;
{&lt;br /&gt;
  for(int i = 0; i &amp;lt;= 2; i++)&lt;br /&gt;
  {&lt;br /&gt;
    out[i] = arr[i];&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void OutputVector(std::vector&amp;lt;unsigned char&amp;gt; &amp;amp;arr)&lt;br /&gt;
{&lt;br /&gt;
  for(int i = 0; i &amp;lt;= 2; i++)&lt;br /&gt;
  {&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; (int)arr[i] &amp;lt;&amp;lt; &amp;quot; &amp;quot; ;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  std::cout &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==CMakeLists.txt==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cmake&amp;quot;&amp;gt;&lt;br /&gt;
cmake_minimum_required(VERSION 2.6)&lt;br /&gt;
&lt;br /&gt;
PROJECT(OpenGLTest)&lt;br /&gt;
&lt;br /&gt;
set(CMAKE_CXX_FLAGS &amp;quot;${CMAKE_CXX_FLAGS} -fopenmp&amp;quot;) #g++&lt;br /&gt;
&lt;br /&gt;
INCLUDE_DIRECTORIES(/usr/include/GL/)&lt;br /&gt;
&lt;br /&gt;
LINK_DIRECTORIES(/usr/lib)&lt;br /&gt;
&lt;br /&gt;
ADD_EXECUTABLE(ColorPick ColorPick.cpp&lt;br /&gt;
MouseClass.h )&lt;br /&gt;
&lt;br /&gt;
TARGET_LINK_LIBRARIES(ColorPick glut GLU GL Xmu X11)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daviddoria</name></author>	</entry>

	</feed>