Jump to content
  • Advertisement
Sign in to follow this  
phani433

OpenGL simple cube creation using opengl Qt

This topic is 2461 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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();
}

Share this post


Link to post
Share on other sites
Advertisement
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 ;)

Share this post


Link to post
Share on other sites

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++;

Share this post


Link to post
Share on other sites
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..

Share this post


Link to post
Share on other sites
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);

Share this post


Link to post
Share on other sites
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..

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites
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();
}

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!