Advertisement
Guest User

Untitled

a guest
Jan 27th, 2020
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.77 KB | None | 0 0
  1. # lista 8.1
  2.  
  3. from OpenGL.GL import *
  4. from OpenGL.GLU import *
  5. from OpenGL.GLUT import *
  6.  
  7. from math import *
  8. import time
  9. import numpy as np
  10.  
  11. # licznik czasu - częstotliwość odświeżania
  12. tick = 0
  13. windowWidth = 800
  14. windowHeight = 600
  15. mousex = windowWidth / 2
  16. mousey = windowHeight / 2
  17.  
  18.  
  19. # klasa pomocnicza, pozwalająca na odwoływanie się do słowników przez notację kropkową
  20. class dd(dict):
  21.     __getattr__ = dict.get
  22.     __setattr__ = dict.__setitem__
  23.     __delattr__ = dict.__delitem__
  24.  
  25.  
  26. quadratic = gluNewQuadric()
  27.  
  28.  
  29. def mouseMotion(x, y):
  30.     global mousex, mousey
  31.     mousex = 0 if x < 0 else windowWidth if x > windowWidth else x
  32.     mousey = 0 if y < 0 else windowHeight if y > windowHeight else y
  33.     pass
  34.  
  35.  
  36. def mouseMouse(btn, stt, x, y):
  37.     pass
  38.  
  39.  
  40. # rysowanie sfery
  41. def drawSphere(part):
  42.     glLoadIdentity()
  43.     glPolygonMode(GL_FRONT, GL_FILL)
  44.  
  45.     glTranslatef(part.p[0], part.p[1], part.p[2])
  46.     glColor3fv(part.col)
  47.     gluSphere(part.quad, part.r, 16, 16)
  48.  
  49.  
  50. def mTetra(a, b, c, d, col1, col2, col3, col4):
  51.     tetra = [];
  52.     face = [a, b, c, col1];
  53.     tetra.append(face);
  54.     face = [a, b, d, col2];
  55.     tetra.append(face);
  56.     face = [b, c, d, col3];
  57.     tetra.append(face);
  58.     face = [c, a, d, col4];
  59.     tetra.append(face);
  60.     return tetra;
  61.  
  62.  
  63. # deklaracje czworościanów (wierzchołki i kolory ścian)
  64. tetra1 = [mTetra([1, 5, 1], [3, 5, 1], [1, 8, 1], [2, 7, 3],
  65.                 [1, 0, 0], [0, 1, 0], [1, 1, 0], [0, 1, 1]),{"masa":15}];
  66.  
  67. # rysowanie listy trójkątów
  68. def dFacelist(flist):
  69.     for face in flist:
  70.         glColor3fv(face[3]);
  71.         glBegin(GL_POLYGON)
  72.         glVertex3fv(face[0]);
  73.         glVertex3fv(face[1]);
  74.         glVertex3fv(face[2]);
  75.         glEnd();
  76.  
  77.  
  78. # rysowanie podłogi
  79. def drawFloor():
  80.     glLoadIdentity()
  81.     glColor3fv([0.0, 0.0, 0.0])
  82.     glPolygonMode(GL_FRONT, GL_FILL)
  83.     glBegin(GL_POLYGON)
  84.     glVertex3fv([-10, 0, -14])
  85.     glVertex3fv([-10, 0, 14])
  86.     glVertex3fv([10, 0, 14])
  87.     glVertex3fv([10, 0, -14])
  88.     glEnd()
  89.  
  90.  
  91. def drawScianki():
  92.     glLoadIdentity()  # jedno sciano
  93.     glColor3fv([0.3, 0.3, 0.3])
  94.     glPolygonMode(GL_FRONT, GL_LINE)
  95.     glBegin(GL_POLYGON)
  96.     glVertex3fv([-10, 0, -14])
  97.     glVertex3fv([-10, 2, -14])
  98.     glVertex3fv([-10, 2, 14])
  99.     glVertex3fv([-10, 0, 14])
  100.     glEnd()
  101.  
  102.     glLoadIdentity()  # drugo sciano
  103.     glColor3fv([0.3, 0.3, 0.3])
  104.     glPolygonMode(GL_FRONT, GL_LINE)
  105.     glBegin(GL_POLYGON)
  106.     glVertex3fv([-10, 0, 14])
  107.     glVertex3fv([-10, 2, 14])
  108.     glVertex3fv([10, 2, 14])
  109.     glVertex3fv([10, 0, 14])
  110.     glEnd()
  111.  
  112.     glLoadIdentity()  # trzecio sciano
  113.     glColor3fv([0.3, 0.3, 0.3])
  114.     glPolygonMode(GL_FRONT, GL_LINE)
  115.     glBegin(GL_POLYGON)
  116.     glVertex3fv([10, 0, 14])
  117.     glVertex3fv([10, 2, 14])
  118.     glVertex3fv([10, 2, -14])
  119.     glVertex3fv([10, 0, -14])
  120.     glEnd()
  121.  
  122.     glLoadIdentity()  # czwarto sciano
  123.     glColor3fv([0.3, 0.3, 0.3])
  124.     glPolygonMode(GL_FRONT, GL_LINE)
  125.     glBegin(GL_POLYGON)
  126.     glVertex3fv([10, 0, -14])
  127.     glVertex3fv([10, 2, -14])
  128.     glVertex3fv([-10, 2, -14])
  129.     glVertex3fv([-10, 0, -14])
  130.     glEnd()
  131.  
  132.  
  133. # wymuszenie częstotliwości odświeżania
  134. def cupdate():
  135.     global tick
  136.     ltime = time.clock()
  137.     if ltime < tick + 0.1:  # max 10 ramek / s
  138.         return False
  139.     tick = ltime
  140.     return True
  141.  
  142.  
  143. rot_cam=0
  144. cam_r=20
  145.  
  146.  
  147. def keyboard(bkey, x, y):
  148.     key = bkey.decode("utf-8")
  149.     global k, rot_cam, cam_r, part1, c, g,metin2,mousex,mousey,moc
  150.     if key == "e":
  151.         cam_r -= 1
  152.     if key == "q":
  153.         cam_r += 1
  154.     if key == 'd':
  155.         rot_cam += 5
  156.     if key == 'a':
  157.         rot_cam -= 5
  158.  
  159.  
  160. # pętla wyświetlająca
  161. def display():
  162.     if not cupdate():
  163.         return
  164.     global part1,rot_cam,cam_r
  165.  
  166.     glMatrixMode(GL_PROJECTION)
  167.     glLoadIdentity()
  168.     glFrustum(-1, 1, -1, 1, 1, 100)
  169.     camx=sin(np.radians(rot_cam))*cam_r
  170.     camz=cos(np.radians(rot_cam))*cam_r
  171.     gluLookAt(camx,12,camz,0,0,0,0,1,0)
  172.     glMatrixMode(GL_MODELVIEW)
  173.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
  174.     glLoadIdentity()
  175.     drawScianki()
  176.     drawFloor()
  177.     dFacelist(tetra1[0])
  178.  
  179.     glutKeyboardFunc(keyboard)
  180.     glFlush()
  181.  
  182.  
  183. glutInit()
  184. glutInitWindowSize(800, 600)
  185. glutInitWindowPosition(0, 0)
  186. glutCreateWindow(b"Kolizje 05")
  187. glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH)
  188. glutDisplayFunc(display)
  189. glutMouseFunc(mouseMouse)
  190. glutMotionFunc(mouseMotion)
  191. glutIdleFunc(display)
  192. glClearColor(1.0, 1.0, 1.0, 1.0)
  193. glClearDepth(1.0)
  194.  
  195. # glPolygonMode(x,x)
  196.  
  197. glDepthFunc(GL_LESS)
  198. glEnable(GL_DEPTH_TEST)
  199. # przygotowanie oświetlenia
  200. glEnable(GL_LIGHT0)
  201. glLight(GL_LIGHT0, GL_POSITION, [0., 5., 5., 0.])
  202. glEnable(GL_LIGHTING)
  203. glEnable(GL_COLOR_MATERIAL)
  204. # przygotowanie sfery
  205.  
  206. glutMainLoop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement