-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathInitThread.py
141 lines (115 loc) · 4.97 KB
/
InitThread.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
"""
"""
from threading import Thread
from THREE.controls.TrackballControls import *
from THREE.loaders.FileLoader import *
from THREE.loaders.CubeTextureLoader import *
from THREE.renderers.pyOpenGL.UniformValue import *
from Player import *
from Terrain import *
from Player import *
from Config import *
from PlayerCamera import *
from quadtree import *
from Sun import *
class InitThread(Thread):
"""
https://skryabiin.wordpress.com/2015/04/25/hello-world/
SDL 2.0, OpenGL, and Multithreading (Windows)
"""
def __init__(self, p):
Thread.__init__(self)
self.p = p
def run(self):
"""Code à exécuter pendant l'exécution du thread."""
p = self.p
p.controls = TrackballControls(p.camera, p.container)
p.camera.controls = p.controls
p.clock = THREE.Clock()
# initialize the sun
p.sun = Sun()
p.sun.add2scene(p.scene)
# cubemap
if Config["skybox"]:
print("Init Skybox...")
loader = FileLoader()
background = CubeTextureLoader().load(Config['engine']['skycube'])
background.format = THREE.RGBFormat
shader = Config['engine']['shaders']['skybox']
p.renderer.background.boxMesh_vertex = loader.load(shader['vertex'])
p.renderer.background.boxMesh_fragment = loader.load(shader['fragment'])
p.renderer.background.boxMesh_uniforms = {
'tCube': UniformValue(None),
'tFlip': UniformValue(- 1),
'opacity': UniformValue(1.0),
'light': {'type': "v3", 'value': p.sun.light.position},
'sunColor': {'type': "v3", 'value': p.sun.color}
}
p.load_percentage[0] += 5
p.scene.background = background
# sun imposter
"""
g_sun = THREE.SphereBufferGeometry(2, 8, 8)
m_sun = THREE.Mesh(g_sun, _material)
self.sun.add(m_sun)
"""
# init the shadowmap
if Config['shadow']['enabled']:
p.renderer.shadowMaself.enabled = True
p.sun.castShadow = True
p.sun.shadow.mapSize.width = Config['shadow']['size']
p.sun.shadow.mapSize.height = Config['shadow']['size']
p.sun.shadow.camera.top = 32
p.sun.shadow.camera.bottom = -32
p.sun.shadow.camera.right = 32
p.sun.shadow.camera.left = -32
p.sun.shadow.camera.near = 128
p.sun.shadow.camera.far = 256 + 32
pars = {'minFilter': THREE.NearestFilter, 'magFilter': THREE.NearestFilter, 'format': THREE.RGBAFormat}
p.sun.shadow.map = THREE.pyOpenGLRenderTarget(Config['shadow']['size'], Config['shadow']['size'], pars)
p.sun.shadow.map.texture.name = p.sun.name + ".shadowMap"
if Config['shadow']['debug']:
p.helper = THREE.CameraHelper(p.sun.shadow.camera)
p.scene.add(p.helper)
p.debug = THREE.Mesh(THREE.SphereBufferGeometry(2, 8, 8), _material)
p.scene.add(p.debug)
instance_material.uniforms.directionalShadowMaself.value = p.sun.shadow.maself.texture
instance_material.uniforms.directionalShadowMatrix.value = p.sun.shadow.matrix
instance_material.uniforms.directionalShadowSize.value = p.sun.shadow.mapSize
# init the asset instanced models
print("Init Assets...")
for name in Config['engine']['assets']:
models = Config['engine']['assets'][name]
for lod in range(5):
p.assets.load(name, lod+1, models[lod], THREE.Vector2(1, 1))
p.load_percentage[0] += 1
# dynamic assets (sceneries)
for name in Config['engine']['dynamic_asset']:
model = Config['engine']['dynamic_asset'][name]
p.assets.load(name, None, model, THREE.Vector2(1, 1), True)
p.load_percentage[0] += 5
# add them to the scene, as each asset as a instancecount=0, none will be displayed
p.assets.add_2_scene(p.scene)
# init the terrain
print("Init Terrain...")
p.terrain = Terrain(Config["terrain"])
p.terrain.load(p.sun)
p.assets.set_sun(p.sun)
p.terrain.scene = p.scene
p.load_percentage[0] += 5
print("Init meshes...")
# p.terrain.quadtree.loadChildren(p)
p.terrain.build_quadtre_indexes()
p.load_percentage[0] += 5
print("Init Player...")
cwd = Config["folder"]
play = Config['player']
p.player = Player(cwd,
Config['engine']['player'],
THREE.Vector3(play['position'][0], play['position'][1], 0),
THREE.Vector3(play['direction'][0], play['direction'][1], 0),
p.scene, p.terrain)
p.player.add2scene(p.scene)
p.actors.append(p.player)
p.load_percentage[0] += 5
print("End init")