openGL projek C++ Membuat Pensil 3D
projek membuat pensil dengan openGL dalam bentuk 3D. full sourcode bisa langsung terapkan dan lihat hasilnya. dalam projek ini kita akan membuat pensil berwarna biru dengan layar berwarna hijau, adapun hasil dari sourcode ini adalah sebagai berikut :
langkah-langkagh untuk membuatnya adalah sebagai berikut.
#include <gl/glut.h>
#include <math.h>
void cylinder(float rbase,float rtop,float height);
void pipe(float rbase,float rtop,float height,int resolusi);
void blok(float tebal,int ratiol,int ratiop);
double rotation_y=0,rotation_y_plus=-15,direction;
double Move=30,Moveplus=0;
double rotate_All=0;
GLfloat ambient_light[]={0.0,0.0,0.0,0.0};
GLfloat source_light[]={1.0,0.0,1.0,1.0};
GLfloat light_pos[]={100,100.0,0.0,4.0};
void draw3D(void)
{
glClearColor(0.0,1.0,0.0,0.1); //putih
glShadeModel(GL_SMOOTH);
glViewport(10,100,480,480);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(58.0,(GLfloat)640/(GLfloat)480,1.0,200.0);
glEnable (GL_DEPTH_TEST);
glPolygonMode (GL_FRONT_AND_BACK,GL_FILL);
glEnable (GL_LIGHTING);
glLightModelfv (GL_LIGHT_MODEL_AMBIENT,ambient_light);
glLightfv (GL_LIGHT0,GL_DIFFUSE,source_light);
glLightfv (GL_LIGHT0,GL_POSITION,light_pos);
glEnable (GL_LIGHT0);
glEnable (GL_COLOR_MATERIAL);
glColorMaterial (GL_FRONT,GL_AMBIENT_AND_DIFFUSE);
}
GLUquadricObj* quadObj;
void display(void)
{
quadObj = gluNewQuadric();
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0,0.,-90);
glPushMatrix();
glRotatef(1.0,1.0,1.0,1.0);
glRotatef(rotate_All,1.0,1.0,1.0);
Move++;//arah putaran
Move=Move-Moveplus;
glRotatef(Move,0.0,1.0,0.1);
Moveplus=10;//kecepatan
glTranslatef(1.0,0.0,0.);
//mata pensil
glColor3f(0,0,0);
glTranslatef(0.0,0,0);
//glRotatef(180,1,0,0);
pipe(1.1,0,2.1,10);
//ujung pensil
glColor3f(10,3,0);
glTranslatef(0.0,0,-4.6);
//glRotatef(180,1,0,0);
pipe(2.7,0,6.10,10);
//badan pensil
glColor3f(0,0,1);
glTranslatef(0,0,-42);
//glRotatef(-39,1,0,0);
cylinder(1,0.6,40.10);
//penhapus
glColor3f(1,5,0);
glTranslatef(0,0,-7);
//glRotatef(-39,1,0,0);
cylinder(1,0.0,20.90);
/*glColor3f(1,0,0);
glTranslatef(0,0,28);
gluCylinder(quadObj, 5.412, 4.25, 8, 50, 50);
glColor3f(0,1,0);
glTranslatef(0,0,-17.5);
gluCylinder(quadObj, 1.9, 8, 8, 50, 50);*/
glPopMatrix();
glFlush();
glutSwapBuffers();
}
void pipe(float rbase,float rtop,float height, int resolusi)
{
float i;
glPushMatrix();
glTranslatef(0.0,0.0,-rbase/4);
for(i=0;i<=height;i+=rbase/8)
{
glTranslatef(0.0,0.0,rbase/8);
glutSolidTorus(rbase/4,rbase-((i*(rbase-rtop))/height),4,resolusi);
}
glTranslatef(0.0,0.0,rbase/4);
glPopMatrix();
}
void cylinder(float rbase,float rtop,float height)
{
float i;
glPushMatrix();
glTranslatef(0,0.0,-rbase/4);
for(i=0;i<=height;i+=rbase/8)
{
glTranslatef(0,0.0,rbase/8);
glutSolidTorus(3,rbase-((i*(rbase-rtop))/height),20,16);
}
glTranslatef(0,0.0,rbase/4);
glPopMatrix();
}
int main(int argc,char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
glutInitWindowSize(400,400);
glutInitWindowPosition(0,0);
glutCreateWindow("Pensil");
glutDisplayFunc(display);
glutIdleFunc(display);
draw3D();
glutMainLoop();
return(0);
}
apabila di run hasilnya akan seperti ini:
semoga bermanfaat dan membantu teman-teman untuk menyelesaikan tugasnya.
langkah-langkagh untuk membuatnya adalah sebagai berikut.
- download terlebih dahulu openGL disini : view
- setting codeblock dengan openGL caranya dapat dilihat disini: view
- buka codeblock dan buat projek baru caranya dapat dilihat disini : view
- copy semua sourcode yang tersedia di blog ini.
adapun sourcode yang tersedia adalah sebagai berikut ini :
#include <math.h>
void cylinder(float rbase,float rtop,float height);
void pipe(float rbase,float rtop,float height,int resolusi);
void blok(float tebal,int ratiol,int ratiop);
double rotation_y=0,rotation_y_plus=-15,direction;
double Move=30,Moveplus=0;
double rotate_All=0;
GLfloat ambient_light[]={0.0,0.0,0.0,0.0};
GLfloat source_light[]={1.0,0.0,1.0,1.0};
GLfloat light_pos[]={100,100.0,0.0,4.0};
void draw3D(void)
{
glClearColor(0.0,1.0,0.0,0.1); //putih
glShadeModel(GL_SMOOTH);
glViewport(10,100,480,480);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(58.0,(GLfloat)640/(GLfloat)480,1.0,200.0);
glEnable (GL_DEPTH_TEST);
glPolygonMode (GL_FRONT_AND_BACK,GL_FILL);
glEnable (GL_LIGHTING);
glLightModelfv (GL_LIGHT_MODEL_AMBIENT,ambient_light);
glLightfv (GL_LIGHT0,GL_DIFFUSE,source_light);
glLightfv (GL_LIGHT0,GL_POSITION,light_pos);
glEnable (GL_LIGHT0);
glEnable (GL_COLOR_MATERIAL);
glColorMaterial (GL_FRONT,GL_AMBIENT_AND_DIFFUSE);
}
GLUquadricObj* quadObj;
void display(void)
{
quadObj = gluNewQuadric();
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0,0.,-90);
glPushMatrix();
glRotatef(1.0,1.0,1.0,1.0);
glRotatef(rotate_All,1.0,1.0,1.0);
Move++;//arah putaran
Move=Move-Moveplus;
glRotatef(Move,0.0,1.0,0.1);
Moveplus=10;//kecepatan
glTranslatef(1.0,0.0,0.);
//mata pensil
glColor3f(0,0,0);
glTranslatef(0.0,0,0);
//glRotatef(180,1,0,0);
pipe(1.1,0,2.1,10);
//ujung pensil
glColor3f(10,3,0);
glTranslatef(0.0,0,-4.6);
//glRotatef(180,1,0,0);
pipe(2.7,0,6.10,10);
//badan pensil
glColor3f(0,0,1);
glTranslatef(0,0,-42);
//glRotatef(-39,1,0,0);
cylinder(1,0.6,40.10);
//penhapus
glColor3f(1,5,0);
glTranslatef(0,0,-7);
//glRotatef(-39,1,0,0);
cylinder(1,0.0,20.90);
/*glColor3f(1,0,0);
glTranslatef(0,0,28);
gluCylinder(quadObj, 5.412, 4.25, 8, 50, 50);
glColor3f(0,1,0);
glTranslatef(0,0,-17.5);
gluCylinder(quadObj, 1.9, 8, 8, 50, 50);*/
glPopMatrix();
glFlush();
glutSwapBuffers();
}
void pipe(float rbase,float rtop,float height, int resolusi)
{
float i;
glPushMatrix();
glTranslatef(0.0,0.0,-rbase/4);
for(i=0;i<=height;i+=rbase/8)
{
glTranslatef(0.0,0.0,rbase/8);
glutSolidTorus(rbase/4,rbase-((i*(rbase-rtop))/height),4,resolusi);
}
glTranslatef(0.0,0.0,rbase/4);
glPopMatrix();
}
void cylinder(float rbase,float rtop,float height)
{
float i;
glPushMatrix();
glTranslatef(0,0.0,-rbase/4);
for(i=0;i<=height;i+=rbase/8)
{
glTranslatef(0,0.0,rbase/8);
glutSolidTorus(3,rbase-((i*(rbase-rtop))/height),20,16);
}
glTranslatef(0,0.0,rbase/4);
glPopMatrix();
}
int main(int argc,char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
glutInitWindowSize(400,400);
glutInitWindowPosition(0,0);
glutCreateWindow("Pensil");
glutDisplayFunc(display);
glutIdleFunc(display);
draw3D();
glutMainLoop();
return(0);
}
apabila di run hasilnya akan seperti ini:
semoga bermanfaat dan membantu teman-teman untuk menyelesaikan tugasnya.
0 Response to "openGL projek C++ Membuat Pensil 3D"
Post a Comment