Skip to main content
GameDev.net gamedev.net
🔒 Locked

simple cube creation using opengl Qt

Started by phani433 Mar 15, 2012 at 9:58 AM 10 replies 9.8k views
Original Post
phani433
phani433
hi, i am new to opengl ..i just started one simple program of creating a cube with different colors in different sides.. i tried with the following code but it showing yellow color square..some one please tell how to make it 3D..



GLWidget::GLWidget(QWidget *parent) :
QGLWidget(parent)
{
rtri = rquad = 0.0f;
}
void GLWidget::initializeGL()
{
glClearColor(1,1,1,1);
}
void GLWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(1.5f,0.0f,-7.0f);
glRotatef(rtri,0.0f,1.0f,0.0f);
glBegin(GL_QUADS);

glColor3f(0.0f,1.0f,0.0f); // Set The Color To Green
glVertex3f( 1.0f, 1.0f,-1.0f); // Top Right Of The Quad (Top)
glVertex3f(-1.0f, 1.0f,-1.0f); // Top Left Of The Quad (Top)
glVertex3f(-1.0f, 1.0f, 1.0f); // Bottom Left Of The Quad (Top)
glVertex3f( 1.0f, 1.0f, 1.0f); // Bottom Right Of The Quad (Top)

glColor3f(1.0f,0.5f,0.0f); // Set The Color To Orange
glVertex3f( 1.0f,-1.0f, 1.0f); // Top Right Of The Quad (Bottom)
glVertex3f(-1.0f,-1.0f, 1.0f); // Top Left Of The Quad (Bottom)
glVertex3f(-1.0f,-1.0f,-1.0f); // Bottom Left Of The Quad (Bottom)
glVertex3f( 1.0f,-1.0f,-1.0f); // Bottom Right Of The Quad (Bottom)
glColor3f(1.0f,0.0f,0.0f); // Set The Color To Red
glVertex3f( 1.0f, 1.0f, 1.0f); // Top Right Of The Quad (Front)
glVertex3f(-1.0f, 1.0f, 1.0f); // Top Left Of The Quad (Front)
glVertex3f(-1.0f,-1.0f, 1.0f); // Bottom Left Of The Quad (Front)
glVertex3f( 1.0f,-1.0f, 1.0f); // Bottom Right Of The Quad (Front)
glColor3f (1.0f,1.0f,0.0f); // Set The Color To Yellow
glVertex3f( 1.0f,-1.0f,-1.0f); // Bottom Left Of The Quad (Back)
glVertex3f(-1.0f,-1.0f,-1.0f); // Bottom Right Of The Quad (Back)
glVertex3f(-1.0f, 1.0f,-1.0f); // Top Right Of The Quad (Back)
glVertex3f( 1.0f, 1.0f,-1.0f); // Top Left Of The Quad (Back)
glColor3f(0.0f,0.0f,1.0f); // Set The Color To Blue
glVertex3f(-1.0f, 1.0f, 1.0f); // Top Right Of The Quad (Left)
glVertex3f(-1.0f, 1.0f,-1.0f); // Top Left Of The Quad (Left)
glVertex3f(-1.0f,-1.0f,-1.0f); // Bottom Left Of The Quad (Left)
glVertex3f(-1.0f,-1.0f, 1.0f); // Bottom Right Of The Quad (Left)
glColor3f(1.0f,0.0f,1.0f); // Set The Color To Violet
glVertex3f( 1.0f, 1.0f,-1.0f); // Top Right Of The Quad (Right)
glVertex3f( 1.0f, 1.0f, 1.0f); // Top Left Of The Quad (Right)
glVertex3f( 1.0f,-1.0f, 1.0f); // Bottom Left Of The Quad (Right)
glVertex3f( 1.0f,-1.0f,-1.0f); // Bottom Right Of The Quad (Right)

glEnd();
rquad-=0.15f; // Decrease The Rotation Variable For The Quad
}
void GLWidget::resizeGL(int w, int h)
{
double Aspect;
// Prevent a divide by zero, when window is too short
// (you cant make a window of zero width)
if(h == 0)//altura
h = 1;
// Set the viewport to be the entire window
glViewport(0, 0, w, h);

Aspect=(double)w/(double)h;
//Reset projection matrix stack
glMatrixMode(GL_PROJECTION);
// Reset the coordinate system before modifying
glLoadIdentity();

// gluPerspective(45.0f,Aspect, 1.0, 425.0);
double Range = 10;
if (w <= h)
glOrtho(-(Range),Range,-Range/Aspect,Range/Aspect,-(Range*2),Range*2);
else
glOrtho(-(Range*Aspect),Range*Aspect,-Range,Range,-(Range*2),Range*2);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
Justindano
Justindano
What you see in the computer is Only 2D so, if you have placen the cube straight ahead you will only see a Square, To see the 3D shape probably try using

glRotatef( 45, 0, 1, 0 );


That will bring a 3D looking model ;)
phani433
phani433
Thanks for your valuble reply now i am seeing my cube in 3d manner..how to create rotating cube with time
Justindano
Justindano

Thanks for your valuble reply now i am seeing my cube in 3d manner..how to create rotating cube with time

That'd be simple, just create a variable and update it, pass it to the Rotate function.

double angle = 0.0;
glRotatef(angle, 0, 1, 0);
//Init...
angle++;
phani433
phani433
Thanks rotation is also working ..i had one doubt with out rotation ,transalation we can see only one side ..which side we can see with out ratation? and also i given green color to the top face but it is not showing green color..but remaining faces it showing different colors which are all i given in the program..some one please tell me why green is not showing..
Justindano
Justindano
That is because you are rotating only in the Y- direction, Try changing to Z or X direction or both.

glRotatef(angle, 1, 0, 0);
// or
glRotatef(angle. 0, 0, 1);
phani433
phani433
i tried it but i am unable to see the green color..tell me one thing with out rotation and tanslate(static cube)..which face is visible..
Justindano
Justindano

i tried it but i am unable to see the green color..tell me one thing with out rotation and tanslate(static cube)..which face is visible..

If the cubes not rotating , then its obvious that the front face will only be visible.
phani433
phani433
in the program i given red for front face but with out rotation it showing yellow(which is back face).sorry for irritating you.

#include "glwidget.h"
GLWidget::GLWidget(QWidget *parent) :
QGLWidget(parent)
{
rtri = rquad = 0.0f;
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(advancecube()));
timer->start(20);

}
void GLWidget::initializeGL()
{
glClearColor(1,1,1,1);
}
void GLWidget::paintGL()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(1.5f,0.0f,-7.0f);
glRotatef( rquad, 0, 0, 1 );

glBegin(GL_QUADS);
glColor3f (0.0f,1.0f,0.0f); // Set The Color To Green
glVertex3f( 1.0f, 1.0f,-1.0f); // Top Right Of The Quad (Top)
glVertex3f(-1.0f, 1.0f,-1.0f); // Top Left Of The Quad (Top)
glVertex3f(-1.0f, 1.0f, 1.0f); // Bottom Left Of The Quad (Top)
glVertex3f( 1.0f, 1.0f, 1.0f); // Bottom Right Of The Quad (Top)

glColor3f(1.0f,0.5f,0.0f); // Set The Color To Orange
glVertex3f( 1.0f,-1.0f, 1.0f); // Top Right Of The Quad (Bottom)
glVertex3f(-1.0f,-1.0f, 1.0f); // Top Left Of The Quad (Bottom)
glVertex3f(-1.0f,-1.0f,-1.0f); // Bottom Left Of The Quad (Bottom)
glVertex3f( 1.0f,-1.0f,-1.0f); // Bottom Right Of The Quad (Bottom)
glColor3f(1.0f,0.0f,0.0f); // Set The Color To Red
glVertex3f( 1.0f, 1.0f, 1.0f); // Top Right Of The Quad (Front)
glVertex3f(-1.0f, 1.0f, 1.0f); // Top Left Of The Quad (Front)
glVertex3f(-1.0f,-1.0f, 1.0f); // Bottom Left Of The Quad (Front)
glVertex3f( 1.0f,-1.0f, 1.0f); // Bottom Right Of The Quad (Front)
glColor3f (1.0f,1.0f,0.0f); // Set The Color To Yellow
glVertex3f( 1.0f,-1.0f,-1.0f); // Bottom Left Of The Quad (Back)
glVertex3f(-1.0f,-1.0f,-1.0f); // Bottom Right Of The Quad (Back)
glVertex3f(-1.0f, 1.0f,-1.0f); // Top Right Of The Quad (Back)
glVertex3f( 1.0f, 1.0f,-1.0f); // Top Left Of The Quad (Back)
glColor3f(0.0f,0.0f,1.0f); // Set The Color To Blue
glVertex3f(-1.0f, 1.0f, 1.0f); // Top Right Of The Quad (Left)
glVertex3f(-1.0f, 1.0f,-1.0f); // Top Left Of The Quad (Left)
glVertex3f(-1.0f,-1.0f,-1.0f); // Bottom Left Of The Quad (Left)
glVertex3f(-1.0f,-1.0f, 1.0f); // Bottom Right Of The Quad (Left)
glColor3f(1.0f,0.0f,1.0f); // Set The Color To Violet
glVertex3f( 1.0f, 1.0f,-1.0f); // Top Right Of The Quad (Right)
glVertex3f( 1.0f, 1.0f, 1.0f); // Top Left Of The Quad (Right)
glVertex3f( 1.0f,-1.0f, 1.0f); // Bottom Left Of The Quad (Right)
glVertex3f( 1.0f,-1.0f,-1.0f); // Bottom Right Of The Quad (Right)

glEnd();
}
void GLWidget::resizeGL(int w, int h)
{
double Aspect;
// Prevent a divide by zero, when window is too short
// (you cant make a window of zero width)
if(h == 0)//altura
h = 1;
// Set the viewport to be the entire window
glViewport(0, 0, w, h);

Aspect=(double)w/(double)h;
//Reset projection matrix stack
glMatrixMode(GL_PROJECTION);
// Reset the coordinate system before modifying
glLoadIdentity();

// gluPerspective(45.0f,Aspect, 1.0, 425.0);
double Range = 10;
if (w <= h)
glOrtho(-(Range),Range,-Range/Aspect,Range/Aspect,-(Range*2),Range*2);
else
glOrtho(-(Range*Aspect),Range*Aspect,-Range,Range,-(Range*2),Range*2);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void GLWidget::advancecube()
{
rquad++;
updateGL();
}
Justindano
Justindano
Really? It works for me, I tried the code and the front face is red, See if you have projected the matrix properly.
phani433
phani433
could you please send me the code what ever you are trid

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.