Esempio n. 1
0
def projection_vectorielle(pt):
    vector = v.diference3D(pt, position)
    if PROJECTIONSHERIQUE:
        vector.normalize()
        vector.dot(FOV)
        z = v.scalar(vector, direction)

    else:
        #        z = abs(v.scalar(vector, direction))
        z = v.scalar(vector, direction)

        vector.dot(FOV / z)
    x = v.scalar(vector, Dx)
    y = v.scalar(vector, Dz)
    #    x = x*(screen/2) + screenX/2
    #    y = y*(screen/2) + screenY/2
    x = x * (screen / 2) + screenX / 2
    y = y * (screen / 2) + screenY / 2
    #    if x<0 or y<0 or x>screen or y>screen:
    #        print(x, y)
    if z < 0:
        x -= screenX / 2
        y -= screenY / 2
        return x * screenX, y * screenY
    return x, y
Esempio n. 2
0
def generate_faces_colored(mesh, material):
    dots, faces = mesh
    faces_ = []
    for face in faces:
        vect1 = v.diference3D(dots[face[0]], dots[face[1]])
        vect2 = v.diference3D(dots[face[0]], dots[face[2]])
        vect = v.cross3D(vect1, vect2)
        vect.normalize()
        c = apply_light(material.get_color(), (1 + v.scalar(vect, light)) / 2,
                        material.get_light_power())
        faces_.append(bs.Face(*get_vectors_face(face, dots), c, material))
    return faces_
Esempio n. 3
0
def update_mesh_3D(mesh):
    cinetique, mesh_ = mesh
    dots, faces = mesh_
    r=resoluion+1
    newDots = []
    n = len(dots)
    for i in range(n):
        vz, az = cinetique[i]
        vector = dots[i]
        d = 0
        xi, yi, zi = vector.get_coord()
        if i%r != r - 1: d+= dots[i+1].getZ() - zi
        elif solidWall: d+= dots[i-1].getZ() - zi
        if i%r != 0: d+= dots[i-1].getZ() - zi
        elif solidWall: d+= dots[i+1].getZ() - zi
        if i//r != r - 1: d+= dots[i+r].getZ() - zi
        elif solidWall: d+= dots[i-r].getZ() - zi
        if i//r != 0: d+= dots[i-r].getZ() - zi
        elif solidWall: d+= dots[i+r].getZ() - zi
        az=d/8
        az/=2
        vz+=az*dt
        zi+=vz*dt
        cinetique[i] = (vz, az)
        newDots.append( v.Vector3D(xi, yi, zi, False))
    return cinetique, (newDots, faces)
Esempio n. 4
0
def get_virtual_screen(direction, screenX, screenY):
    if direction.getX() == 0:
        Dx = v.Vector3D(1, 0, 0)
    else:
        x = direction.getX()
        y = direction.getY()
        rap = (y / x)**2 + 1
        yi = 1 / ((rap)**0.5)
        if x < 0: yi *= -1
        xi = (1 - (1 / rap))**0.5

        Dx = v.Vector3D(xi, yi, 0)
    Dx.normalize()
    Dz = v.cross3D(direction, Dx)
    Dz.normalize()
    #    rapport = screenX/screenX
    #    Dz.dot(rapport)
    return Dx, Dz
Esempio n. 5
0
 def __init__(self, pt1, pt2, pt3, color, material=None):
     self.p1 = pt1
     self.p2 = pt2
     self.p3 = pt3
     self.color = color
     self.material = material
     x = pt1.getX() + pt2.getX() + pt3.getX()
     y = pt1.getY() + pt2.getY() + pt3.getY()
     z = pt1.getZ() + pt2.getZ() + pt3.getZ()
     self.middle = v.Vector3D(x / 3, y / 3, z / 3)
     self.preRender = False
     self.pixelInner = []
     self.pixelBorder = []
Esempio n. 6
0
def get_vector(passage, vector):
    x, y, z = vector.get_coord()
    return v.Vector3D(*dot(passage, [[x], [y], [z]]))
Esempio n. 7
0
def get_point(passage, point, position):
    x, y, z = point.get_coord()
    xp, yp, zp = position.get_coord()
    vecteur = [[x - xp], [y - yp], [z - zp]]
    return v.Vector3D(*dot(passage, vecteur))
Esempio n. 8
0
dt = 1
time = 0
RECORDED = False
bs.visualiseImage = True
bs.animatedImage = True
fileName ="test"
resoluion = 10
itemResolution = 2
bs.FILL = True
bs.LINE = True
nbImages = 10
MOVEMOUSE = False
p.PROJECTIONSHERIQUE = True
p.FOV = 2

light = v.Vector3D(10,-5,-3)
light.normalize()
lightColor = ims.Color(200, 200, 200, 0.8)

waterColorMin = ims.Color(0, 0, 50)
waterColorMax = ims.Color(0, 0, 50)
wallColorMin = ims.Color(96, 80, 80)
wallColorMax = ims.Color(96, 80, 80)
itemColorMin = ims.Color(107, 103, 0)
itemColorMax = ims.Color(110, 110, 10)

waterMaterial = ims.Material(waterColorMin, waterColorMax, 1)
wallMaterial = ims.Material(wallColorMin, wallColorMax, 1)
itemMaterial = ims.Material(itemColorMin, itemColorMax, 1)

Esempio n. 9
0
def sorted_face(face):
    return -v.distance(face.middle, position)
Esempio n. 10
0
# -*- coding: utf-8 -*-
"""
Created on Sat Mar 23 10:15:26 2019

@author: pierrehb
"""

import MyLibrairy.Vectors as v
import MyLibrairy.imagesSavor as ims
import MyLibrairy.basicScreen as bs

light = v.Vector3D(0, 0, 0)
position = v.Vector3D(0, 0, 0)
direction = v.Vector3D(0, 0, 0)
Dx = v.Vector3D(0, 0, 0)
Dz = v.Vector3D(0, 0, 0)
lightColor = ims.Color(0, 0, 0)
screenX = 0
screenY = 0
screen = 0
PROJECTIONSHERIQUE = False
FOV = 3


def get_virtual_screen(direction, screenX, screenY):
    if direction.getX() == 0:
        Dx = v.Vector3D(1, 0, 0)
    else:
        x = direction.getX()
        y = direction.getY()
        rap = (y / x)**2 + 1