diff --git a/game/game.py b/game/game.py
index 3eae4e6..c99477b 100644
--- a/game/game.py
+++ b/game/game.py
@@ -31,7 +31,6 @@ from game.environment import Environment
from game.inputs import InputFloat
from game.batch import Batch
from game.scene import SceneNode, TextureNode, ShaderNode, InputNode, DrawNode, FuncNode
-from game.triangles import SkyTriangles
from game import sea
proj_hfov = pi * 0.25
@@ -71,12 +70,12 @@ def main():
tiles_shader = Shader('tiles', 'common')
tests_shader = Shader('tests', 'common')
- sky_shader = Shader('sky')
+ sea_shader = Shader('sea')
camera = Camera()
camera.set_projection(proj_hfov, proj_ratio, proj_near_z, proj_far_z)
environment = Environment()
- sea_phase = InputFloat(sky_shader.u_sea_phase, 0.0)
+ sea_phase = InputFloat(sea_shader.u_sea_phase, 0.0)
print("Generating terrain...")
generated = Generator(256)
@@ -158,7 +157,7 @@ def main():
sea_polar_textures = sea.load_polar_textures(('data/sea_bump1.png', 'data/sea_bump2.png'))
sea_detail_texture = sea.load_detail_texture('data/sea_bump.png')
- sky_triangles = SkyTriangles(64, proj_far_z - 0.1, proj_ratio)
+ sea_triangles = sea.SeaTriangles(64, proj_far_z - 0.1, proj_ratio)
scene = SceneNode(
FuncNode(update_camera, (mouse, camera, environment)),
@@ -179,11 +178,11 @@ def main():
),
FuncNode(update_sea, (camera, sea_phase)),
TextureNode((sea_polar_textures, sea_detail_texture),
- ShaderNode(sky_shader,
- InputNode(sky_shader, camera),
- InputNode(sky_shader, environment),
- InputNode(sky_shader, sea_phase),
- DrawNode(sky_triangles)
+ ShaderNode(sea_shader,
+ InputNode(sea_shader, camera),
+ InputNode(sea_shader, environment),
+ InputNode(sea_shader, sea_phase),
+ DrawNode(sea_triangles)
)
)
)
@@ -204,7 +203,7 @@ def main():
print("Quitting...")
del tests_batch
del tiles_batch
- del sky_triangles
+ del sea_triangles
del sea_polar_textures
del sea_detail_texture
del heightmap
@@ -212,7 +211,7 @@ def main():
archive.destroy()
del tiles_shader
del tests_shader
- del sky_shader
+ del sea_shader
render_terminate()
del events
destroy_display(display)
diff --git a/game/sea.py b/game/sea.py
index bfed466..f6eed95 100644
--- a/game/sea.py
+++ b/game/sea.py
@@ -13,7 +13,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see .
-from itertools import product
+from itertools import chain, product
from math import tau, cos, sin, copysign
from array import array
@@ -21,6 +21,7 @@ from engine import TEXTURE_FORMAT_RGB10_A2, TEXTURE_FORMAT_TYPECODE, TEXTURE_FLA
from game.math import vec3_scale, vec3_direction, vec3_cross, vec3_normal_rgb10a2
from game.texture import Texture
+from game.triangles import Triangles
from game.resources import load_png
_format = TEXTURE_FORMAT_RGB10_A2
@@ -69,3 +70,36 @@ def load_detail_texture(path, scale = 0.5, waves_height = 0.002):
normals = list(map(normal, product(range(height), range(width)), data))
data = array(_typecode, list(map(_conv, normals)))
return Texture(_format, width, height, 0, _flags, data)
+
+class SeaTriangles(Triangles):
+ # TODO: with FOV
+ def __init__(self, vsubdivs, distance, projection_ratio):
+ assert vsubdivs > 0
+ vertices = []
+ hsubdivs = round(vsubdivs * projection_ratio)
+ z = -distance
+ width = distance * projection_ratio
+ height = distance
+ startx = width * -0.5
+ starty = height * -0.5
+ stepx = width / hsubdivs
+ stepy = height / vsubdivs
+ y1 = starty
+ y2 = y1 + stepy
+ for sy in range(vsubdivs):
+ x1 = startx
+ x2 = x1 + stepx
+ for sx in range(hsubdivs):
+ a = (x1, y2, z)
+ b = (x2, y1, z)
+ vertices.append((x1, y1, z))
+ vertices.append(b)
+ vertices.append(a)
+ vertices.append((x2, y2, z))
+ vertices.append(a)
+ vertices.append(b)
+ x1 = x2
+ x2 += stepx
+ y1 = y2
+ y2 += stepy
+ super().__init__(array('f', chain.from_iterable(vertices)))
diff --git a/game/shaders/sky_opengles.frag b/game/shaders/sea_opengles.frag
similarity index 100%
rename from game/shaders/sky_opengles.frag
rename to game/shaders/sea_opengles.frag
diff --git a/game/shaders/sky_opengles.vert b/game/shaders/sea_opengles.vert
similarity index 100%
rename from game/shaders/sky_opengles.vert
rename to game/shaders/sea_opengles.vert
diff --git a/game/triangles.py b/game/triangles.py
index a5838db..2954202 100644
--- a/game/triangles.py
+++ b/game/triangles.py
@@ -13,9 +13,6 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see .
-from itertools import chain
-from array import array
-from math import cos, sin
from engine import create_triangles, draw_triangles, destroy_triangles
class Triangles:
@@ -29,36 +26,3 @@ class Triangles:
def draw(self):
draw_triangles(self._triangles)
-
-class SkyTriangles(Triangles):
- # TODO: with FOV
- def __init__(self, vsubdivs, distance, projection_ratio):
- assert vsubdivs > 0
- vertices = []
- hsubdivs = round(vsubdivs * projection_ratio)
- z = -distance
- width = distance * projection_ratio
- height = distance
- startx = width * -0.5
- starty = height * -0.5
- stepx = width / hsubdivs
- stepy = height / vsubdivs
- y1 = starty
- y2 = y1 + stepy
- for sy in range(vsubdivs):
- x1 = startx
- x2 = x1 + stepx
- for sx in range(hsubdivs):
- a = (x1, y2, z)
- b = (x2, y1, z)
- vertices.append((x1, y1, z))
- vertices.append(b)
- vertices.append(a)
- vertices.append((x2, y2, z))
- vertices.append(a)
- vertices.append(b)
- x1 = x2
- x2 += stepx
- y1 = y2
- y2 += stepy
- super().__init__(array('f', chain.from_iterable(vertices)))