2016-08-25 2 views
1

Я нарисовал куб в OpenGL, но я хотел бы, чтобы каждая грань куба была заполнена цветом.рисование куба с шестью разными цветными гранями в opengl

Это то, что я сделал, я не знаю, почему только 2 лица заполнены цветом.

void DrawCube(GLfloat centerPosX, GLfloat centerPosY, GLfloat centerPosZ, GLfloat edgeLength) 
{ 
    GLfloat halfSideLength = edgeLength * 0.5f; 

    GLfloat vertices[] = 
    { 
     // front face 
     centerPosX - halfSideLength, centerPosY + halfSideLength, centerPosZ + halfSideLength, // top left 
     centerPosX + halfSideLength, centerPosY + halfSideLength, centerPosZ + halfSideLength, // top right 
     centerPosX + halfSideLength, centerPosY - halfSideLength, centerPosZ + halfSideLength, // bottom right 
     centerPosX - halfSideLength, centerPosY - halfSideLength, centerPosZ + halfSideLength, // bottom left 

     // back face 
     centerPosX - halfSideLength, centerPosY + halfSideLength, centerPosZ - halfSideLength, // top left 
     centerPosX + halfSideLength, centerPosY + halfSideLength, centerPosZ - halfSideLength, // top right 
     centerPosX + halfSideLength, centerPosY - halfSideLength, centerPosZ - halfSideLength, // bottom right 
     centerPosX - halfSideLength, centerPosY - halfSideLength, centerPosZ - halfSideLength, // bottom left 

     // left face 
     centerPosX - halfSideLength, centerPosY + halfSideLength, centerPosZ + halfSideLength, // top left 
     centerPosX - halfSideLength, centerPosY + halfSideLength, centerPosZ - halfSideLength, // top right 
     centerPosX - halfSideLength, centerPosY - halfSideLength, centerPosZ - halfSideLength, // bottom right 
     centerPosX - halfSideLength, centerPosY - halfSideLength, centerPosZ + halfSideLength, // bottom left 

     // right face 
     centerPosX - halfSideLength, centerPosY + halfSideLength, centerPosZ + halfSideLength, // top left 
     centerPosX - halfSideLength, centerPosY + halfSideLength, centerPosZ - halfSideLength, // top right 
     centerPosX - halfSideLength, centerPosY - halfSideLength, centerPosZ - halfSideLength, // bottom right 
     centerPosX - halfSideLength, centerPosY - halfSideLength, centerPosZ + halfSideLength, // bottom left 

     // top face 
     centerPosX - halfSideLength, centerPosY + halfSideLength, centerPosZ + halfSideLength, // top left 
     centerPosX - halfSideLength, centerPosY + halfSideLength, centerPosZ - halfSideLength, // top right 
     centerPosX + halfSideLength, centerPosY + halfSideLength, centerPosZ - halfSideLength, // bottom right 
     centerPosX + halfSideLength, centerPosY + halfSideLength, centerPosZ + halfSideLength, // bottom left 

     // bottom face                                           // right face 
     centerPosX - halfSideLength, centerPosY - halfSideLength, centerPosZ + halfSideLength, // top left 
     centerPosX - halfSideLength, centerPosY - halfSideLength, centerPosZ - halfSideLength, // top right 
     centerPosX + halfSideLength, centerPosY - halfSideLength, centerPosZ - halfSideLength, // bottom right 
     centerPosX + halfSideLength, centerPosY - halfSideLength, centerPosZ + halfSideLength, // bottom left                                                                                                             centerPosX + halfSideLength, centerPosY - halfSideLength, centerPosZ - halfSideLength, // bottom right                                                                                                             centerPosX + halfSideLength, centerPosY - halfSideLength, centerPosZ + halfSideLength // bottom left 
    }; 

    GLfloat colour[] = { 
     255, 0, 0, 
     255, 0, 0, 
     255, 0, 0, 
     255, 0, 0, 
     0, 255, 0, 
     0, 255, 0, 
     0, 255, 0, 
     0, 255, 0, 
     0, 0, 255, 
     0, 0, 255, 
     0, 0, 255, 
     0, 0, 255, 
     100,100,100, 
     100,100,100, 
     100,100,100, 
     100,100,100, 
     200,200,200, 
     200,200,200, 
     200,200,200, 
     200,200,200, 
     40,220,75, 
     40,220,75, 
     40,220,75, 
     40,220,75, 
    }; 

    glEnableClientState(GL_VERTEX_ARRAY); 
    glEnableClientState(GL_COLOR_ARRAY); 
    glVertexPointer(3, GL_FLOAT, 0, vertices); 
    glColorPointer(3, GL_FLOAT, 0, colour); 
    glDrawArrays(GL_QUADS, 0, 24); 
    glDisableClientState(GL_VERTEX_ARRAY); 
    glDisableClientState(GL_COLOR_ARRAY); 
} 

Выход моей программы заключается в следующем: enter image description here

Как вы можете видеть, у меня есть 1 красное лицо, 1 зеленое лицо и 4 не цветные лица

+1

Цвета должны быть в диапазоне [0, 1] при использовании цветов GL_FLOAT. – BDL

+0

Спасибо, что, если я хочу использовать цвета диапазона [0,255]? Что следует использовать вместо GL_FLOAT? – splunk

+0

@splunk Затем используйте один из интегральных типов. – Angew

ответ

0

Вы либо использовать GLfloat (GL_FLOAT), но тогда вы должны использовать диапазон [0.0, 1.0].

Или вы используете GLubyte (GL_UNSIGNED_BYTE), тогда вам нужно будет использовать диапазон [0, 255].

Это полезно для вас: https://www.opengl.org/wiki/OpenGL_Type

1

Хотя Армен правильно, есть что-то еще до сих пор не так.

Вы забыли включить глубинные испытания. Вот почему вы можете видеть красную сторону, хотя с вашей точки зрения вы не сможете этого сделать. Вот почему вы можете видеть заднюю зеленую стенку «через» переднюю стену.

+0

И не забывайте на самом деле запрашивать некоторые бит глубины из ОС при создании контекста OpenGL. Вы не можете получить их, если не попросите их. – genpfault

Смежные вопросы