Skip to content

Commit

Permalink
push CSE423
Browse files Browse the repository at this point in the history
  • Loading branch information
eniac00 committed Dec 27, 2023
1 parent b7f3939 commit 5409037
Show file tree
Hide file tree
Showing 17 changed files with 974 additions and 15 deletions.
Binary file added CSE423/lab01/Lab01_20101197.docx
Binary file not shown.
53 changes: 53 additions & 0 deletions CSE423/lab01/as-01.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CSE423/as-3</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-iYQeCzEYFbKjA/T2uDLTpkwGzCiq6soy8tYaI1GyVh/UjpbCx/TYkiZhlZB6+fzT" crossorigin="anonymous">
<link rel="stylesheet" href="../../assets/themes/stackoverflow-dark.min.css">
<link rel="stylesheet" href="../../assets/style.css">
</head>
<body>
<div class="title">
<h2>Lab Assignment-03</h2>
</div>

<iframe src="https://docs.google.com/viewer?url=https://eniac00.github.io/bracu/CSE423/lab01/as01_ques.pdf&embedded=true" ></iframe>

<div class="button-container">
<button type="button" class="btn btn-primary" onclick="loadFile('task_1')">task-1</button>
<button type="button" class="btn btn-primary" onclick="loadFile('task_2')">task-2</button>
</div>

<div id="sub-title"></div>


<div id="code-wrapper"></div>

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-u1OknCvxWvY5kfmNBILK2hRnQC3Pr17a+RTT6rIHI7NnikvbZlHgTPOOmMi466C8" crossorigin="anonymous"></script>
<script src="../../assets/highlight.min.js"></script>
<script>
function loadFile(button_name) {

document.getElementById('sub-title').innerHTML = "";
document.getElementById('sub-title').innerHTML = `${button_name}`;

fetch(`./${button_name}.py`)
.then(function(response) {
return response.text();
})
.then(function(data) {
document.getElementById('code-wrapper').innerHTML = "";
document.getElementById('code-wrapper').innerHTML = `<pre><code class='language-python'>${data}</code></pre>`;
hljs.highlightAll();
})
.catch(function(error) {
console.log(error);
});
}

</script>
</body>
</html>
Binary file added CSE423/lab01/as01_ques.pdf
Binary file not shown.
177 changes: 177 additions & 0 deletions CSE423/lab01/task_1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
#!/usr/bin/env python3


#####################################################
######## CSE423_Lab01_Task01 ####################
######## Abir Ahammed Bhuiyan ##################
######## 20101197 ################
######## section: 01 ##############
##########################################


from OpenGL.GL import *
from OpenGL.GLUT import *
from OpenGL.GLU import *

import random



class Rain:
def __init__(self, x1, y1, x2, y2):
self.x1 = x1
self.y1 = y1
self.x2 = x2
self.y2 = y2



class RainScene:
def __init__(self):
self.width = self.height = 500
self.rain_size = 2
self.rain_drop_list = []
self.rain_speed = 0.05
self.rain_density = 0.009
self.rain_angle = 0
self.background = 0


def drawHouse(self):
glBegin(GL_QUADS)
glColor3f(0.44, 0.22, 0.22)
glVertex2f(300, 0)
glVertex2f(150, 0)
glVertex2f(150, 130)
glVertex2f(300, 130)
glEnd()
glBegin(GL_TRIANGLES)
glColor3f(0.47, 0.75, 0.46)
glVertex2f(330, 130)
glVertex2f(120, 130)
glVertex2f(225, 250)
glEnd()
glBegin(GL_QUADS)
glColor3f(0.48, 0.13, 0.6)
glVertex2f(250, 35)
glVertex2f(200, 35)
glVertex2f(200, 84)
glVertex2f(250, 84)
glEnd()


def rainMaker(self):
delay = random.random()
if delay < self.rain_density:
x1 = random.randint(-800, self.width+800)
y1 = self.height
x2 = x1
y2 = self.height+random.randint(20, 70)
self.rain_drop_list.append(Rain(x1, y1, x2, y2))


def drawRain(self):
for rain in self.rain_drop_list:
glPushMatrix()
glTranslatef((rain.x1 + rain.x2)/2, (rain.y1 + rain.y2)/2, 0)
glRotatef(self.rain_angle, 0, 0, 1)
glTranslatef(-(rain.x1 + rain.x2)/2, -(rain.y1 + rain.y2)/2, 0)
glLineWidth(self.rain_size)
glBegin(GL_LINES)
glColor3f(0.39, 0.4, 1)
glVertex2f(rain.x1, rain.y1)
glVertex2f(rain.x2, rain.y2)
glEnd()
glPopMatrix()


def iterate(self):
glViewport(0, 0, self.width, self.height)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho(0.0, self.width, 0.0, self.height, 0.0, 1.0)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()


def showScreen(self):
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glLoadIdentity()
self.iterate()
glClearColor(self.background, self.background, self.background, 1.0)
self.rainMaker()
self.drawRain()
self.drawHouse()
glutSwapBuffers()


def animate(self):
for idx, rain in enumerate(self.rain_drop_list):
if rain.y1 >= 0 and rain.y1 <= self.height:
if self.rain_angle < -5 and self.rain_angle >= -45:
rain.x1 -= self.rain_speed
rain.x2 -= self.rain_speed
rain.y1 -= self.rain_speed
rain.y2 -= self.rain_speed
if self.rain_angle > 5 and self.rain_angle <= 45:
rain.x1 += self.rain_speed
rain.x2 += self.rain_speed
rain.y1 -= self.rain_speed
rain.y2 -= self.rain_speed
if self.rain_angle > -5 and self.rain_angle < 5:
rain.y1 -= self.rain_speed
rain.y2 -= self.rain_speed
else:
self.rain_drop_list.pop(idx)
glutPostRedisplay()


def keyboardListener(self, key, x, y):
if key == b"=": # + key
self.rain_density += 0.001
if key == b"-":
self.rain_density -= 0.001
if key == b"f":
self.rain_speed += 0.01
if key == b"s":
self.rain_speed -= 0.01
glutPostRedisplay()


def mouseListener(self, button, state, x, y):
pass


def specialKeyListener(self, key, x, y):
if key == GLUT_KEY_RIGHT:
if not self.rain_angle >= 45:
self.rain_angle += 1
if key == GLUT_KEY_LEFT:
if not self.rain_angle <= -45:
self.rain_angle -= 1
if key == GLUT_KEY_UP:
if not self.background > 1:
self.background += 0.05
if key == GLUT_KEY_DOWN:
if not self.background < 0:
self.background -= 0.05
glutPostRedisplay()


def run(self):
glutInit()
glutInitDisplayMode(GLUT_RGBA)
glutInitWindowSize(self.width, self.height)
glutInitWindowPosition(0, 0)
glutCreateWindow("OpenGL Rain Drop")
glutDisplayFunc(self.showScreen)
glutIdleFunc(self.animate)
glutKeyboardFunc(self.keyboardListener)
glutMouseFunc(self.mouseListener)
glutSpecialFunc(self.specialKeyListener)
glutMainLoop()


if __name__ == "__main__":
RainScene().run()

133 changes: 133 additions & 0 deletions CSE423/lab01/task_2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
#!/usr/bin/env python3


#####################################################
######## CSE423_Lab01_Task02 ####################
######## Abir Ahammed Bhuiyan ##################
######## 20101197 ################
######## section: 01 ##############
##########################################


from OpenGL.GL import *
from OpenGL.GLUT import *
from OpenGL.GLU import *

import random



class Point:
def __init__(self, x, y):
self.size = 10
self.r = random.random()
self.g = random.random()
self.b = random.random()
self.x = x
self.y = y
self.direction_x = int(random.sample([1, -1], 1)[0])
self.direction_y = int(random.sample([1, -1], 1)[0])

def __str__(self):
return f"RGB -> ({self.r}, {self.g}, {self.b})"



class PointScene:
def __init__(self):
self.width = self.height = 500
self.background = 0
self.speed = 0.001
self.point_number = 5
self.point_list = []
self.blink = False
self.freeze = False


def makePoints(self, x, y):
for _ in range(self.point_number):
self.point_list.append(Point(x, self.height-y))


def drawPoints(self):
for point in self.point_list:
glPointSize(point.size)
glBegin(GL_POINTS)
if self.blink and not self.freeze:
if not random.randint(0, 50)%2:
glColor3f(point.r, point.g, point.b)
else:
glColor3f(self.background, self.background, self.background)
else:
glColor3f(point.r, point.g, point.b)
glVertex2f(point.x, point.y)
glEnd()


def iterate(self):
glViewport(0, 0, self.width, self.height)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
glOrtho(0.0, self.width, 0.0, self.height, 0.0, 1.0)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()


def showScreen(self):
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glLoadIdentity()
self.iterate()
glClearColor(self.background, self.background, self.background, 1.0)
self.drawPoints()
glutSwapBuffers()


def animate(self):
if not self.freeze:
for point in self.point_list:
point.x += point.direction_x * self.speed
point.y += point.direction_y * self.speed
glutPostRedisplay()


def keyboardListener(self, key, x, y):
if key == b' ':
self.freeze = False if self.freeze else True
glutPostRedisplay()


def mouseListener(self, button, state, x, y):
if not self.freeze:
if button == GLUT_RIGHT_BUTTON and state == GLUT_DOWN:
self.makePoints(x, y)
if button == GLUT_LEFT_BUTTON and state == GLUT_DOWN:
self.blink = False if self.blink else True
glutPostRedisplay()


def specialKeyListener(self, key, x, y):
if not self.freeze:
if key == GLUT_KEY_UP:
self.speed += 0.001
if key == GLUT_KEY_DOWN:
self.speed -= 0.001
glutPostRedisplay()


def run(self):
glutInit()
glutInitDisplayMode(GLUT_RGBA)
glutInitWindowSize(self.width, self.height)
glutInitWindowPosition(0, 0)
glutCreateWindow("OpenGL Point Spawn")
glutDisplayFunc(self.showScreen)
glutIdleFunc(self.animate)
glutKeyboardFunc(self.keyboardListener)
glutMouseFunc(self.mouseListener)
glutSpecialFunc(self.specialKeyListener)
glutMainLoop()


if __name__ == "__main__":
PointScene().run()

Loading

0 comments on commit 5409037

Please sign in to comment.