This is the code of my first OpenGL project. I drew simple a house, a tree, a car, and a animation character "Sponge Bob"


#include <stdlib.h>
#include <gl/glut.h>
#include <math.h>

int Width = 600, Height = 600;

void Render();
void Reshape(int w, int h);
void Draw_Apple(float a, float b, float c);

void SetupViewTransform()
{
 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity();
 glTranslatef(0.0, 0.0, -10.0);
}

void SetupViewVolume()
{
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity();
 glOrtho(-10.0, 10.0, -10.0, 10.0, -100.0, 100.0);
}

int main(int argc, char **argv)
{
 glutInit(&argc, argv);

 glutInitWindowSize(Width, Height);
 glutInitWindowPosition(0, 0);

 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);

 glutCreateWindow("A SimpleGL Program");

 glutDisplayFunc(Render);
 glutReshapeFunc(Reshape);

 glutMainLoop();
 return 0;
}

void Render()
{
 glClearColor(1.0f, 0.81f, 0.42f, 1.0f);
 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

 SetupViewTransform();

 SetupViewVolume();

 //house
 glMatrixMode(GL_MODELVIEW);
 glTranslatef(5.0, 2.0, 0.0);

 glBegin(GL_TRIANGLES);
 glColor3f(1.0, 0.6, 0.6);
 glVertex3f(-2.0, 0.0, 0.0);
 glColor3f(1.0, 0.0, 0.0);
 glVertex3f(2.0, 0.0, 0.0);
 glColor3f(1.0, 0.6, 0.6);
 glVertex3f(0.0, 2.0, 0.0);
 glEnd();

 glTranslatef(0.0, -1.0, 0.0);

 glBegin(GL_QUADS);
 glColor3f(1.0, 1.0, 0.9);
 glVertex3f(-1.8, 1.0, 0.0);
 glColor3f(1.0, 1.0, 0.7);
 glVertex3f(-1.8, -2.0, 0.0);
 glVertex3f(1.8, -2.0, 0.0);
 glVertex3f(1.8, 1.0, 0.0);
 glEnd();

 //house window
 glTranslatef(0.8, 0, 0.0);

 glBegin(GL_QUADS);
 glColor3f(0.7, 1.0, 1.0);
 glVertex3f(-0.8, 0.7, 0.0);
 glColor3f(0.4, 1.0, 1.0);
 glVertex3f(-0.8, -0.7, 0.0);
 glColor3f(0.7, 1.0, 1.0);
 glVertex3f(0.8, -0.7, 0.0);
 glColor3f(0.7, 1.0, 1.0);
 glVertex3f(0.8, 0.7, 0.0);
 glEnd();


 //car
 glTranslatef(-5.8, -6.5, 0);

 glBegin(GL_POLYGON);
 glColor3f(0.3, 0.3, 1);
 glVertex3f(0.5, 0, 0);
 for (int i = 90; i <= 180; i++)
 {
  glVertex3f(1.5 * cos(i * 3.1416 / 180), sin(i * 3.1416 / 180), 0);
 }
 glEnd();

 glColor3f(0.3, 0.3, 1);

 glBegin(GL_QUADS);
 glVertex3f(0, 0, 0);
 glVertex3f(4, 0, 0);
 glVertex3f(4, 2, 0);
 glVertex3f(0, 2, 0);
 glEnd();

 glBegin(GL_POLYGON);
 glVertex3f(4, 0, 0);
 for (int i = 0; i <= 90; i++)
 {
  glVertex3f(4 +  1.5 * cos(i *3.1416 / 180), sin(i*3.1416 / 180), 0);
 }

 glEnd();  
 
 //wheel 1
 glBegin(GL_POLYGON);
 glColor3f(0, 0, 0);
 for (int i = 0; i <= 360; i++)
 {
  glVertex3f(0.6 * cos(i * 3.1416 / 180), 0.6 * sin(i * 3.1416 / 180), 0);
 }
 glEnd();

 //wheel 2
 glBegin(GL_POLYGON);
 glColor3f(0, 0, 0);
 for (int i = 0; i <= 360; i++)
 {
  glVertex3f(4 + 0.6 * cos(i * 3.1416 / 180), 0.6 * sin(i * 3.1416 / 180), 0);
 }
 glEnd();


 //window of the car
 glTranslatef(0.3, 1, 0);
 glBegin(GL_QUADS);
 glColor3f(0.9, 0.9, 1);
 glVertex3f(0, 0, 0);
 glVertex3f(0, 0.8, 0);
 glVertex3f(3.4, 0.8, 0);
 glVertex3f(3.4, 0, 0);
 glEnd();

 //tree

 glTranslatef(-1, 2, 0);
 glBegin(GL_QUADS);
 glColor3f(0.65, 0.3, 0.13);
 glVertex3f(0, 0, 0);
 glVertex3f(2, 0, 0);
 glVertex3f(1.5, 6, 0);
 glVertex3f(0.5, 6, 0);
 glEnd();

 glTranslatef(1, 7, -3);
 glBegin(GL_POLYGON);
 glColor3f(0.2, 0.9, 0.15);
 for (int i = 0; i <= 360; i++)
 {
  glVertex3f(2 * cos(i * 3.1416 / 180), 4 * sin(i * 3.1416 / 180), 0);
 }
 glEnd();

 // apples

 Draw_Apple(-0.5, 3, 0);

 Draw_Apple(-0.5, -2, 0);

 Draw_Apple(2.1, 1, 0);
 
 Draw_Apple(0.2, -1.2, 0);
 
 Draw_Apple(-1, -1.7, 0);

 Draw_Apple(-1, -1, 0);

 //SpongeBob Body
 glTranslatef(-8, -5, 0);
 glBegin(GL_QUADS);
 glColor3f(1, 1, 0);
 glVertex3f(0, 0, 0);
 glVertex3f(4, 0, 0);
 glVertex3f(4, 5, 0);
 glVertex3f(0, 5, 0);
 glEnd();

 //Left Eye
 glColor3f(1, 1, 1);
 glBegin(GL_POLYGON);
 for (int i = 0; i <= 360; i++)
 {
  glVertex3f(1.25 + 0.5 * cos(i * 3.1416 / 180), 3.75 + 0.5 * sin(i * 3.1416 / 180), 0);
 }
 glEnd();
 glColor3f(0.357, 0.345, 0.87);
 glBegin(GL_POLYGON);
 for (int i = 0; i <= 360; i++)
 {
  glVertex3f(1.25 + 0.2 * cos(i * 3.1416 / 180), 3.75 + 0.2 * sin(i * 3.1416 / 180), 0);
 }
 glEnd();
 glColor3f(0, 0, 0);
 glBegin(GL_POLYGON);
 for (int i = 0; i <= 360; i++)
 {
  glVertex3f(1.25 + 0.1 * cos(i * 3.1416 / 180), 3.75 + 0.1 * sin(i * 3.1416 / 180), 0);
 }
 glEnd();

 //Right Eye
 glColor3f(1, 1, 1);
 glBegin(GL_POLYGON);
 for (int i = 0; i <= 360; i++)
 {
  glVertex3f(2.75 + 0.5 * cos(i * 3.1416 / 180), 3.75 + 0.5 * sin(i * 3.1416 / 180), 0);
 }
 glEnd();
 glColor3f(0.357, 0.345, 0.87);
 glBegin(GL_POLYGON);
 for (int i = 0; i <= 360; i++)
 {
  glVertex3f(2.75 + 0.2 * cos(i * 3.1416 / 180), 3.75 + 0.2 * sin(i * 3.1416 / 180), 0);
 }
 glEnd();
 glColor3f(0, 0, 0);
 glBegin(GL_POLYGON);
 for (int i = 0; i <= 360; i++)
 {
  glVertex3f(2.75 + 0.1 * cos(i * 3.1416 / 180), 3.75 + 0.1 * sin(i * 3.1416 / 180), 0);
 }
 glEnd();

 //nose
 glColor3f(0, 0, 0);
 glBegin(GL_LINE_STRIP);
 for (int i = -30; i <= 210; i++)
 {
  glVertex3f(2 + 0.25 * cos(i * 3.1416 / 180), 3 + 0.25 * sin(i * 3.1416 / 180), 0);
 }
 glEnd();

 //mouth
 glBegin(GL_LINE_STRIP);
 for (int i = 180; i <= 360; i++)
 {
  glVertex3f(2 + 0.8 * cos(i * 3.1416 / 180), 2.5 + 0.4 * sin(i * 3.1416 / 180), 0);
 }
 glEnd();

 //Pants
 glColor3f(0.65, 0.3, 0.13);
 glBegin(GL_QUADS);
 glVertex3f(0, 0, 0);
 glVertex3f(4, 0, 0);
 glVertex3f(4, 0.75, 0);
 glVertex3f(0, 0.75, 0);
 glEnd();

 glColor3f(0, 0, 0);
 glBegin(GL_QUADS);
 glVertex3f(0.25, 0.5, 0);
 glVertex3f(1.25, 0.5, 0);
 glVertex3f(1.25, 0.65, 0);
 glVertex3f(0.25, 0.65, 0);

 glVertex3f(1.5, 0.5, 0);
 glVertex3f(2.5, 0.5, 0);
 glVertex3f(2.5, 0.65, 0);
 glVertex3f(1.5, 0.65, 0);

 glVertex3f(2.75, 0.5, 0);
 glVertex3f(3.75, 0.5, 0);
 glVertex3f(3.75, 0.65, 0);
 glVertex3f(2.75, 0.65, 0);
 glEnd();

 //Shirt
 glColor3f(1, 1, 1);
 glBegin(GL_QUADS);
 glVertex3f(0, 0.75, 0);
 glVertex3f(4, 0.75, 0);
 glVertex3f(4, 1.5, 0);
 glVertex3f(0, 1.5, 0);
 glEnd();


 //necktie

 glColor3f(1, 0, 0);
 glBegin(GL_TRIANGLES);
 glVertex3f(1.75, 1.5, 0);
 glVertex3f(2, 1.35, 0);
 glVertex3f(2.15, 1.5, 0);
 glEnd();

 glBegin(GL_QUADS);
 glVertex3f(2, 1.35, 0);
 glVertex3f(1.75, 1, 0);
 glVertex3f(2, 0.75, 0);
 glVertex3f(2.15, 1, 0);
 glEnd();


 glutSwapBuffers();
}

void Reshape(int w, int h)
{
 glViewport(0, 0, w, h);
 Width = w;
 Height = h;
}

void Draw_Apple(float a, float b, float c)
{
 glTranslatef(a, b, c);
 glBegin(GL_POLYGON);
 glColor3f(1, 0, 0);
 for (int i = 0; i <= 360; i++)
 {
  glVertex3f(0.5 * cos(i * 3.1416 / 180), 0.5 * sin(i * 3.1416 / 180), 0);
 }
 glEnd();

 glBegin(GL_TRIANGLES);
 glColor3f(1, 1, 1);
 glVertex3f(0.25, 0.20, 1);
 glVertex3f(0.25, 0.35, 1);
 glVertex3f(-0.05, 0.32, 1);
 glEnd();
}





The first assignment in Computer Graphics course was making program that draws line of simple equation that includes two points that user write x and y coordinates of them.




So, when user write (0, 0) and (49, 29) the program should draw simple equation y = 29 / 49 x


All points on the equation would be rounded off


First, this is my function that round off the parameter.



When user enter 4 numbers, there is a slope of simple equation


Then by the case if 'm' is bigger than 1 or not, print red dot on every 'y's which are on the equation.



And this is the result.


Red dots are simple equation which contains two points (41, 2) and (1, 25)


This algorithm is used on rasterization a line on pixel coordinate of monitor.

'작업물(Works) > ComputerGraphics' 카테고리의 다른 글

빛 정리(Ambient, Diffuse, Specular, Emissive)  (0) 2022.04.19
[OpenGL]Paint Program  (0) 2016.07.11
[OpenGL]Mouse Callback Function  (0) 2016.07.08
[OpenGL]First OpenGL Project  (0) 2016.07.08


I had Mid Term project for 3d modeling course in the University. And I chose this building. Because I thought making stairs and waterwheel would be exciting and colors in the buildings were beautiful.



First, I made objects which I thought is easy to make. And I asked advices for stairs to my professor. And he made basic structure of stair part, and I added several, small, long cubes to the part.


So I made this stair structure.

My first building modeling. Every objects are made from simple cube. I used connect, inset, extrude, chamfer function.




Top of the window on the roof is used chamfer function to be curved. And bars in the window are made of long cubes rotated.



This window is also made from a cube. I used tesselate function to make small windows on top half on big cube.



I made this part with big cube. Actually I don't remember exactly how I made this, but maybe I deleted two faces of it and extrude top part


I made big house on the left first, and duplicated it then rotated it. And edited front face, and made other objects like windows, pillars, and etc

Collapse funcion makes 2 or more vertices as one. And attach function makes 2 or more objects as one. So I made 2 hand modelings and attached them with Human body modeling which is posted before, then I collapsed couple of vertices. Faces that will be attached should have same number of vertices.



BTW, there was a problem that some veritces are not collapsed. I don't know why..

This was my second assignment of 3d Modeling course in Univ. Sample professor showed us was more simple but I just wanted do more in detail.


It was made 1 cube and I used connect, inset, extrude, and mirror functions in 3ds Max.


I wanted to express muscles, but it was not easy. Just tried to make curved surfaces as many as possible.


It was first assignment of my 3D Modeling course in University. It's a character in movie "Big Hero" series.


These are images that I saw when I made the 3d model.



My work consists of few basic spheres.





For eyes, I made like these pictures below. 2 very low cylinders and 1 torus.



+ Recent posts