Untitled
unknown
plain_text
a year ago
16 kB
9
Indexable
#include <GL/gl.h>
#include<math.h>
#include <GL/glut.h>
void sun(float rx, float ry, float cx, float cy) {
glBegin(GL_POLYGON);
glVertex2f(cx, cy);
for (int i = 0; i <= 360; i++) {
float angle = i * 3.1416 / 180;
float x = rx * cos(angle);
float y = ry * sin(angle);
glVertex2f((x + cx), (y + cy));
}
glEnd();
}
void init(void) {
glClearColor(0.53, 0.81, 0.92, 1.0); // Sky blue
gluOrtho2D(0, 500, 0, 500);
}
float bx = 0;
void clouds()
{
// 1st cloud
glColor3ub(220, 220, 220); // Light gray
sun(20, 30, 460 + bx, 460);
sun(15, 20, 445 + bx, 460);
sun(15, 20, 475 + bx, 460);
// 2nd cloud
sun(20, 30, 390 + bx, 420);
sun(15, 20, 405 + bx, 420);
sun(15, 20, 375 + bx, 420);
// cng cloud pos for animation
bx += .3;
if (bx > 0) bx = -550;
glutPostRedisplay();
}
void drawH(float x, float y) {
// Head
glColor3ub(0, 0, 0);
sun(5, 5, x, y + 20); // Head pos
// Body
glColor3ub(0, 0, 255); // Blue
glBegin(GL_LINES);
glVertex2f(x, y + 15); // Top of body
glVertex2f(x, y); // Bottom of body
glEnd();
// Arms
glBegin(GL_LINES);
glVertex2f(x, y + 10); // Left arm
glVertex2f(x - 10, y + 5);
glVertex2f(x, y + 10); // Right arm
glVertex2f(x - 5, y + 5);
glEnd();
//stick
glColor3ub(0, 0, 0);
glBegin(GL_LINES);
glVertex2f(x - 3, y + 15);
glVertex2f(x - 10, y - 30);
glEnd();
}
float bxx = 10;
void boat() {
glColor3ub(0, 0, 0);
glBegin(GL_POLYGON);
glVertex2d(325 + bxx, 220);
glVertex2d(400 + bxx, 220);
glVertex2d(425 + bxx, 250);
glVertex2d(300 + bxx, 250);
glEnd();
glColor3ub(205, 133, 63);
glBegin(GL_POLYGON);
glVertex2d(325 + bxx, 250);
glVertex2d(400 + bxx, 250);
glVertex2d(390 + bxx, 280);
glVertex2d(335 + bxx, 280);
glEnd();
drawH(320 + bxx, 250);
bxx += .81;
if (bxx > 0) bxx = -550;
glColor3ub(0, 0, 0);
glBegin(GL_POLYGON);
glVertex2d(325, 200);
glVertex2d(400, 200);
glVertex2d(425, 230);
glVertex2d(300, 230);
glEnd();
glColor3ub(215, 215, 55);
glBegin(GL_POLYGON);
glVertex2d(325, 230);
glVertex2d(400, 230);
glVertex2d(390, 260);
glVertex2d(335, 260);
glEnd();
//khuti
glColor3ub(0.5, 0.5, 0.5);
glBegin(GL_POLYGON);
glVertex2d(300, 200);
glVertex2d(303, 200);
glVertex2d(303, 260);
glVertex2d(300, 260);
glEnd();
glutPostRedisplay();
}
void drawHuman(float x, float y) {
// Head
glColor3ub(0, 0, 0);
sun(10, 10, x, y + 40);
glLineWidth(2);
// Body
glColor3ub(0, 0, 255);
glBegin(GL_LINES);
glVertex2f(x, y + 30); // Top of body
glVertex2f(x, y); // Bottom of body
glEnd();
// Arms
glBegin(GL_LINES);
glVertex2f(x, y + 25); // Left arm
glVertex2f(x - 15, y + 20);
glVertex2f(x, y + 25); // Right arm
glVertex2f(x + 15, y + 20);
glEnd();
// Legs
glBegin(GL_LINES);
glVertex2f(x, y); // Left leg
glVertex2f(x - 10, y - 30);
glVertex2f(x, y); // Right leg
glVertex2f(x + 10, y - 30);
glEnd();
glLineWidth(1);
}
float birdX1 = 100, birdY1 = 400; // First bird pos
float birdX2 = 200, birdY2 = 450; // Second bird pos
void drawBird(float x, float y) {
glColor3ub(0, 0, 0); // Color for birds
glLineWidth(1.2);
glBegin(GL_LINES);
glVertex2f(x, y);
glVertex2f(x - 10, y + 10);
glVertex2f(x, y);
glVertex2f(x + 10, y + 10);
glEnd();
glLineWidth(1);
}
void drawFence(float x, float y) {
glColor3ub(255, 255, 0); // Yellow color for the fence
glLineWidth(5); //line width baraisi
// Draw horizontal fence slats (multiple horizontal lines)
for (int i = 1; i < 3; i++) {
glBegin(GL_LINES);
glVertex2f(x, y + i * 20); // Start point of the horizontal line
glVertex2f(x + 100, y + i * 20); // End point of horizontal line (width of the fence)
glEnd();
}
// Draw vertical fence posts (lines at the start and end of each slat)
glBegin(GL_LINES);
glVertex2f(x, y); // Left post at the starting point
glVertex2f(x, y + 50); // Left post at the end of the fence
glVertex2f(x + 100, y); // Right post at the starting point
glVertex2f(x + 100, y + 50); // Right post at the end of the fence
glEnd();
glLineWidth(1);
}
void flower(float x, float y) {
glColor3ub(0, 128, 0); // Yellow color for the fence
glLineWidth(2);
glBegin(GL_LINES);
glVertex2f(x, y);
glVertex2f(x + 20, y + 20 - 10);
glVertex2f(x, y);
glVertex2f(x + 15, y + 25 - 10);
glVertex2f(x, y);
glVertex2f(x - 20, y + 20 - 10);
glVertex2f(x, y);
glVertex2f(x - 15, y + 25 - 10);
glVertex2f(x, y);
glVertex2f(x + 5, y + 30 - 10);
glVertex2f(x, y);
glVertex2f(x - 5, y + 30 - 10);
glEnd();
glColor3ub(225, 223, 0);
sun(3, 3, x + 15, y + 25 - 10);
glColor3ub(225, 105, 180);
sun(3, 3, x - 5, y + 30 - 10);
glColor3ub(0, 128, 0);
sun(3, 3, x - 20, y + 20 - 10);
glColor3ub(150, 123, 182);
sun(3, 3, x + 20, y + 20 - 10);
glColor3ub(225, 223, 0);
sun(3, 3, x - 15, y + 25 - 10);
glColor3ub(150, 123, 182);
sun(3, 3, x + 5, y + 30 - 10);
glLineWidth(1);
}
float carX = 0.0f, velocity = 0.0f, acceleration = 0.05f, maxSpeed = 5.0f;
void drawCar(float x, float y) {
// Bus body
glColor3ub(255, 165, 0); // Orange color->bus body
glBegin(GL_POLYGON);
glVertex2f(x, y); // Bottom-left corner
glVertex2f(x + 160, y); // Bottom-right corner (increased width for bus)
glVertex2f(x + 160, y + 40); // Top-right corner
glVertex2f(x, y + 40); // Top-left corner
glEnd();
// Windows (more windows for the bus)
glColor3ub(173, 216, 230); // LightBlue color for the windows
// Add windows along the body of the bus
for (int i = 0; i < 6; i++) {
glBegin(GL_POLYGON);
glVertex2f(x + 10 + i * 25, y + 15); // Bottom-left corner of the window
glVertex2f(x + 30 + i * 25, y + 15); // Bottom-right corner of the window
glVertex2f(x + 30 + i * 25, y + 30); // Top-right corner of the window
glVertex2f(x + 10 + i * 25, y + 30); // Top-left corner of the window
glEnd();
}
// Wheels of the bus
glColor3ub(0, 0, 0); // Black color for the wheels
sun(12, 12, x + 30, y - 5); // Left wheel
sun(12, 12, x + 120, y - 5); // Right wheel
}
void display(void) {
glClear(GL_COLOR_BUFFER_BIT);
//Ground Color
glColor3ub(0, 255, 0);
glBegin(GL_POLYGON);
glVertex2d(0, 0);
glVertex2d(500, 0);
glVertex2d(500, 300);
glVertex2d(0, 300);
glEnd();
//road
glColor3ub(110, 110, 110);
glBegin(GL_POLYGON);
glVertex2d(300, 0);
glVertex2d(350, 0);
glVertex2d(400, 300);
glVertex2d(400, 300);
glEnd();
glColor3ub(110, 110, 110);
glBegin(GL_POLYGON);
glVertex2d(0, 0);
glVertex2d(800, 0);
glVertex2d(800, 18);
glVertex2d(0, 10);
glEnd();
glColor3ub(150, 150, 150);
glBegin(GL_POLYGON);
glVertex2d(331, 90);
glVertex2d(75, 140);
glVertex2d(75, 150);
glVertex2d(337, 110);
glEnd();
glColor3ub(10, 149, 237);
glBegin(GL_POLYGON);
glVertex2d(-40, 200);
glVertex2d(0, 300);
glVertex2d(500, 300);
glVertex2d(500, 200);
glEnd();
// Hill 1
glColor3ub(144, 238, 144); // Light green
glBegin(GL_POLYGON);
glVertex2d(-40, 300);
glVertex2d(200, 300);
glVertex2d(100, 450);
glEnd();
// Hill 11
glColor3ub(205, 133, 63);
glBegin(GL_POLYGON);
glVertex2d(-100, 300);
glVertex2d(100, 300);
glVertex2d(0, 400);
glEnd();
// Hill 2
glColor3ub(139, 69, 19); // SaddleBrown
glBegin(GL_POLYGON);
glVertex2d(150, 300);
glVertex2d(350, 300);
glVertex2d(250, 450);
glEnd();
// Hill 22
glColor3ub(184, 134, 11); // Dark Goldenrod (different from Peru)
glBegin(GL_POLYGON);
glVertex2d(250, 300);
glVertex2d(450, 300);
glVertex2d(350, 400);
glEnd();
// Hill 3
glColor3ub(205, 166, 33); // Forest Green
glBegin(GL_POLYGON);
glVertex2d(300, 300);
glVertex2d(520, 300);
glVertex2d(400, 450);
glEnd();
// Hill 33
glColor3ub(0, 100, 0); // Dark Green
glBegin(GL_POLYGON);
glVertex2d(400, 300);
glVertex2d(700, 300);
glVertex2d(550, 420);
glEnd();
// Boat design function call
boat();
// House Tree
glColor3ub(139, 69, 19);
glBegin(GL_POLYGON);
glVertex2d(50, 150);
glVertex2d(70, 150);
glVertex2d(70, 300);
glVertex2d(50, 300);
glEnd();
// Tree leaf
glColor3ub(0, 128, 0);
sun(30, 40, 35, 320);
glColor3ub(0, 128, 0);
sun(30, 40, 85, 320);
glColor3ub(0, 128, 0);
sun(25, 30, 45, 370);
glColor3ub(0, 128, 0);
sun(30, 30, 70, 370);
glColor3ub(0, 128, 0);
sun(25, 30, 55, 400);
///
// House Tree 2
glColor3ub(110, 50, 15);
glBegin(GL_POLYGON);
glVertex2d(100, 150);
glVertex2d(120, 150);
glVertex2d(120, 320);
glVertex2d(100, 320);
glEnd();
// Tree leaves
glColor3ub(0, 100, 0);
sun(30, 40, 85, 335);
glColor3ub(0, 100, 0);
sun(30, 40, 135, 335);
glColor3ub(0, 100, 0);
sun(25, 30, 95, 385);
glColor3ub(0, 100, 0);
sun(30, 30, 120, 385);
glColor3ub(0, 100, 0);
sun(25, 30, 105, 415);
/////////
//House tree 3
glColor3ub(139, 69, 19);
glBegin(GL_POLYGON);
glVertex2d(430, 150);
glVertex2d(450, 150);
glVertex2d(450, 300);
glVertex2d(430, 300);
glEnd();
// Tree leaf
glColor3ub(0, 144, 0);
sun(30, 40, 415, 320);
glColor3ub(0, 144, 0);
sun(30, 40, 465, 320);
glColor3ub(0, 144, 0);
sun(25, 30, 425, 370);
glColor3ub(0, 144, 0);
sun(30, 30, 450, 370);
glColor3ub(0, 144, 0);
sun(25, 30, 435, 400);
// 2nd House
glColor3ub(173, 216, 230); // LightBlue
glBegin(GL_POLYGON);
glVertex2d(100, 220);
glVertex2d(200, 220);
glVertex2d(175, 270);
glVertex2d(130, 270);
glEnd();
glColor3ub(244, 164, 96);
glBegin(GL_POLYGON);
glVertex2d(100, 170);
glVertex2d(185, 170);
glVertex2d(185, 220);
glVertex2d(100, 220);
glEnd();
glColor3ub(160, 82, 45);
glBegin(GL_POLYGON);
glVertex2d(100, 170);
glVertex2d(190, 170);
glVertex2d(190, 160);
glVertex2d(100, 160);
glEnd();
// 2nd house door and window
glColor3ub(160, 82, 45);
glBegin(GL_POLYGON);
glVertex2d(140, 170);
glVertex2d(165, 170);
glVertex2d(165, 200);
glVertex2d(140, 200);
glEnd();
// 1st House
glColor3ub(255, 248, 202); // Bisque
glBegin(GL_POLYGON);
glVertex2d(0, 220);
glVertex2d(135, 220);
glVertex2d(110, 270);
glVertex2d(25, 270);
glEnd();
glColor3ub(255, 222, 173);
glBegin(GL_POLYGON);
glVertex2d(10, 220);
glVertex2d(50, 220);
glVertex2d(25, 255);
glEnd();
glColor3ub(255, 222, 173);
glBegin(GL_POLYGON);
glVertex2d(10, 150);
glVertex2d(50, 150);
glVertex2d(50, 220);
glVertex2d(10, 220);
glEnd();
glColor3ub(222, 184, 135);
glBegin(GL_POLYGON);
glVertex2d(50, 150);
glVertex2d(125, 150);
glVertex2d(125, 220);
glVertex2d(50, 220);
glEnd();
glColor3ub(160, 82, 45);
glBegin(GL_POLYGON);
glVertex2d(10, 150);
glVertex2d(125, 150);
glVertex2d(125, 140);
glVertex2d(10, 140);
glEnd();
// 1st house door and window
glColor3ub(160, 66, 45);
glBegin(GL_POLYGON);
glVertex2d(75, 150);
glVertex2d(95, 150);
glVertex2d(95, 195);
glVertex2d(75, 195);
glEnd();
glColor3ub(160, 66, 45);
glBegin(GL_POLYGON);
glVertex2d(20, 200);
glVertex2d(35, 200);
glVertex2d(35, 175);
glVertex2d(20, 175);
glEnd();
//////////////3rd house
glColor3ub(144, 238, 144); // LightGreen
glBegin(GL_POLYGON);
glVertex2d(373, 220);
glVertex2d(508, 220);
glVertex2d(483, 270);
glVertex2d(398, 270);
glEnd();
glColor3ub(255, 222, 173);
glBegin(GL_POLYGON);
glVertex2d(383, 220);
glVertex2d(423, 220);
glVertex2d(398, 255);
glEnd();
glColor3ub(255, 222, 173);
glBegin(GL_POLYGON);
glVertex2d(383, 150);
glVertex2d(423, 150);
glVertex2d(423, 220);
glVertex2d(383, 220);
glEnd();
glColor3ub(222, 184, 135);
glBegin(GL_POLYGON);
glVertex2d(423, 150);
glVertex2d(498, 150);
glVertex2d(498, 220);
glVertex2d(423, 220);
glEnd();
glColor3ub(160, 82, 45);
glBegin(GL_POLYGON);
glVertex2d(383, 150);
glVertex2d(498, 150);
glVertex2d(498, 140);
glVertex2d(383, 140);
glEnd();
glColor3ub(160, 82, 45);
glBegin(GL_POLYGON);
glVertex2d(448, 150);
glVertex2d(468, 150);
glVertex2d(468, 195);
glVertex2d(448, 195);
glEnd();
glColor3ub(160, 82, 45);
glBegin(GL_POLYGON);
glVertex2d(393, 200);
glVertex2d(408, 200);
glVertex2d(408, 175);
glVertex2d(393, 175);
glEnd();
//sun design
glColor3ub(255, 215, 0);
sun(25, 30, 365, 450);
drawHuman(290, 220);
// counds function
clouds();
// Draw Birds
drawBird(birdX1, birdY1);
drawBird(birdX2, birdY2);
// Update bird positions to create flying effect
birdX1 += 0.25; // Move first bird to right
birdX2 += 0.23; // Move second bird to right
// Reset birds when they move out of view
if (birdX1 > 500) birdX1 = 0;
if (birdX2 > 500) birdX2 = 0;
//flower
flower(20, 70);
flower(40, 70);
flower(70, 70);
flower(90, 70);
flower(100, 70);
flower(130, 70);
flower(150, 70);
flower(180, 70);
flower(210, 65);
flower(240, 65);
flower(100, 50);
flower(20, 50);
flower(50, 55);
flower(80, 50);
flower(100, 30);
flower(20, 25);
flower(50, 35);
flower(80, 30);
flower(110, 35);
flower(130, 30);
flower(150, 30);
flower(170, 30);
flower(190, 30);
flower(210, 30);
flower(230, 30);
flower(250, 30);
flower(270, 30);
flower(285, 30);
flower(130, 55);
flower(150, 55);
flower(170, 55);
flower(190, 55);
flower(210, 55);
flower(230, 55);
flower(250, 55);
flower(270, 55);
flower(285, 55);
flower(450, 70);
flower(450 + 30, 65);
flower(450 - 30, 50);
flower(450, 50);
flower(450 - 50, 50);
flower(450 - 50, 70);
flower(480, 50);
flower(440, 35);
flower(415, 30);
flower(465, 35);
flower(480, 30);
flower(430, 30);flower(400, 30);flower(380, 30);
// Draw face
for (float x = 0; x < 200; x += 5) {
drawFence(x, 20); // Draw fance along the ground
}
for (float x = 370; x < 500; x += 5) {
drawFence(x, 20); // Draw fance along the ground
}
///car
velocity += acceleration; // Increase velocity by the acceleration value
// Limit the velocity to max speed
if (velocity > maxSpeed) {
velocity = 0.1;
}
carX += velocity; // // Update the car's position based on the velocity
drawCar(carX, 0.0f); // Draw the car at the new position
glFlush();
if (carX > 600)carX = -600;
glutSwapBuffers();
}
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitWindowSize(800, 500);
glutInitWindowPosition(100, 100);
glutCreateWindow("Village Scenery");
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
Editor is loading...
Leave a Comment