Skip to content

Commit

Permalink
Merge pull request #62 from papagiannakis/develop
Browse files Browse the repository at this point in the history
Release 1.4.0
  • Loading branch information
kamarianakis authored Jan 30, 2024
2 parents f9c0f93 + e77c612 commit 8e062ac
Show file tree
Hide file tree
Showing 104 changed files with 4,511 additions and 669 deletions.
2 changes: 1 addition & 1 deletion Elements/_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
# 1) we don't load dependencies by storing it in __init__.py
# 2) we can import it in setup.py for the same reason
# 3) we can import it into your module
__version__ = '1.3.0'
__version__ = '1.4.0'
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
Running the basic RenderWindow (SDL2Window) with an ImGUIDecorator on top
"""

from Elements.pyGLV.GUI.Viewer import SDL2Window, ImGUIDecorator
from Elements.pyGLV.GUI.Viewer import SDL2Window
from Elements.pyGLV.GUI.ImguiDecorator import ImGUIecssDecorator

from Elements.utils.Shortcuts import displayGUI_text
example_description = "This is a simple empty scene with ImGUI enabled. Feel free to add your own widgets!"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
from Elements.pyECSS.Component import BasicTransform, Camera, RenderMesh
from Elements.pyECSS.System import TransformSystem, CameraSystem
from Elements.pyGLV.GL.Scene import Scene
from Elements.pyGLV.GUI.Viewer import RenderGLStateSystem, ImGUIecssDecorator

from Elements.pyGLV.GUI.Viewer import RenderGLStateSystem
from Elements.pyGLV.GUI.ImguiDecorator import ImGUIecssDecorator2
from Elements.pyGLV.GL.Shader import InitGLShaderSystem, Shader, ShaderGLDecorator, RenderGLShaderSystem
from Elements.pyGLV.GL.VertexArray import VertexArray

Expand Down Expand Up @@ -170,7 +170,7 @@
# MAIN RENDERING LOOP

running = True
scene.init(imgui=True, windowWidth = winWidth, windowHeight = winHeight, windowTitle = "Elements: A Working Event Manager", customImGUIdecorator = ImGUIecssDecorator, openGLversion = 4)
scene.init(imgui=True, windowWidth = winWidth, windowHeight = winHeight, windowTitle = "Elements: A Working Event Manager", customImGUIdecorator = ImGUIecssDecorator2, openGLversion = 4)

# pre-pass scenegraph to initialise all GL context dependent geometry, shader classes
# needs an active GL context
Expand Down
5 changes: 3 additions & 2 deletions Elements/examples/1.Introductory/example_5_lights_cube.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
from Elements.pyECSS.Component import BasicTransform, Camera, RenderMesh
from Elements.pyECSS.System import TransformSystem, CameraSystem
from Elements.pyGLV.GL.Scene import Scene
from Elements.pyGLV.GUI.Viewer import RenderGLStateSystem, ImGUIecssDecorator
from Elements.pyGLV.GUI.Viewer import RenderGLStateSystem
from Elements.pyGLV.GUI.ImguiDecorator import ImGUIecssDecorator2

from Elements.pyGLV.GL.Shader import InitGLShaderSystem, Shader, ShaderGLDecorator, RenderGLShaderSystem
from Elements.pyGLV.GL.VertexArray import VertexArray
Expand Down Expand Up @@ -190,7 +191,7 @@
# MAIN RENDERING LOOP

running = True
scene.init(imgui=True, windowWidth = winWidth, windowHeight = winHeight, windowTitle = "Elements: Let There Be Light", openGLversion = 4, customImGUIdecorator = ImGUIecssDecorator)
scene.init(imgui=True, windowWidth = winWidth, windowHeight = winHeight, windowTitle = "Elements: Let There Be Light", openGLversion = 4, customImGUIdecorator = ImGUIecssDecorator2)

# pre-pass scenegraph to initialise all GL context dependent geometry, shader classes
# needs an active GL context
Expand Down
5 changes: 3 additions & 2 deletions Elements/examples/1.Introductory/example_6_import_objects.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
from Elements.pyECSS.Component import BasicTransform, Camera, RenderMesh
from Elements.pyECSS.System import TransformSystem, CameraSystem
from Elements.pyGLV.GL.Scene import Scene
from Elements.pyGLV.GUI.Viewer import RenderGLStateSystem, ImGUIecssDecorator
from Elements.pyGLV.GUI.Viewer import RenderGLStateSystem
from Elements.pyGLV.GUI.ImguiDecorator import ImGUIecssDecorator, ImGUIecssDecorator2

from Elements.pyGLV.GL.Shader import InitGLShaderSystem, Shader, ShaderGLDecorator, RenderGLShaderSystem
from Elements.pyGLV.GL.VertexArray import VertexArray
Expand Down Expand Up @@ -163,7 +164,7 @@
# MAIN RENDERING LOOP

running = True
scene.init(imgui=True, windowWidth = winWidth, windowHeight = winHeight, windowTitle = "Elements: Tea anyone?", openGLversion = 4, customImGUIdecorator=ImGUIecssDecorator)
scene.init(imgui=True, windowWidth = winWidth, windowHeight = winHeight, windowTitle = "Elements: Tea anyone?", openGLversion = 4, customImGUIdecorator=ImGUIecssDecorator2)

# pre-pass scenegraph to initialise all GL context dependent geometry, shader classes
# needs an active GL context
Expand Down
5 changes: 3 additions & 2 deletions Elements/examples/2.Intermediate/example_10_cube_mapping.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
from Elements.pyECSS.Component import BasicTransform, Camera, RenderMesh
from Elements.pyECSS.System import TransformSystem, CameraSystem
from Elements.pyGLV.GL.Scene import Scene
from Elements.pyGLV.GUI.Viewer import RenderGLStateSystem, ImGUIecssDecorator
from Elements.pyGLV.GUI.Viewer import RenderGLStateSystem
from Elements.pyGLV.GUI.ImguiDecorator import ImGUIecssDecorator2

from Elements.pyGLV.GL.Shader import InitGLShaderSystem, Shader, ShaderGLDecorator, RenderGLShaderSystem
from Elements.pyGLV.GL.VertexArray import VertexArray
Expand Down Expand Up @@ -114,7 +115,7 @@
# MAIN RENDERING LOOP

running = True
scene.init(imgui=True, windowWidth = winWidth, windowHeight = winHeight, windowTitle = "Elements: Cube Mapping Example", customImGUIdecorator = ImGUIecssDecorator, openGLversion = 4)
scene.init(imgui=True, windowWidth = winWidth, windowHeight = winHeight, windowTitle = "Elements: Cube Mapping Example", customImGUIdecorator = ImGUIecssDecorator2, openGLversion = 4)

# pre-pass scenegraph to initialise all GL context dependent geometry, shader classes
# needs an active GL context
Expand Down
6 changes: 4 additions & 2 deletions Elements/examples/2.Intermediate/example_7_cameraSystem.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@
from Elements.pyECSS.Component import BasicTransform, RenderMesh
from Elements.pyECSS.Event import Event

from Elements.pyGLV.GUI.Viewer import RenderGLStateSystem, ImGUIecssDecorator
from Elements.pyGLV.GUI.Viewer import RenderGLStateSystem
from Elements.pyGLV.GUI.ImguiDecorator import ImGUIecssDecorator2

from Elements.pyGLV.GL.Shader import InitGLShaderSystem, Shader, ShaderGLDecorator, RenderGLShaderSystem
from Elements.pyGLV.GL.VertexArray import VertexArray
from Elements.pyGLV.GL.Scene import Scene
Expand Down Expand Up @@ -196,7 +198,7 @@ def main(imguiFlag = False):

# MAIN RENDERING LOOP
running = True
scene.init(imgui=True, windowWidth = winWidth, windowHeight = winHeight, windowTitle = "Elements: A CameraSystem Example", customImGUIdecorator = ImGUIecssDecorator)
scene.init(imgui=True, windowWidth = winWidth, windowHeight = winHeight, windowTitle = "Elements: A CameraSystem Example", customImGUIdecorator = ImGUIecssDecorator2)

#imGUIecss = scene.gContext

Expand Down
5 changes: 3 additions & 2 deletions Elements/examples/2.Intermediate/example_8_textures.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
from Elements.pyECSS.Component import BasicTransform, Camera, RenderMesh
from Elements.pyECSS.System import TransformSystem, CameraSystem
from Elements.pyGLV.GL.Scene import Scene
from Elements.pyGLV.GUI.Viewer import RenderGLStateSystem, ImGUIecssDecorator
from Elements.pyGLV.GUI.Viewer import RenderGLStateSystem
from Elements.pyGLV.GUI.ImguiDecorator import ImGUIecssDecorator2

from Elements.pyGLV.GL.Shader import InitGLShaderSystem, Shader, ShaderGLDecorator, RenderGLShaderSystem
from Elements.pyGLV.GL.VertexArray import VertexArray
Expand Down Expand Up @@ -149,7 +150,7 @@
# MAIN RENDERING LOOP

running = True
scene.init(imgui=True, windowWidth = winWidth, windowHeight = winHeight, windowTitle = "Elements: Textures example", customImGUIdecorator = ImGUIecssDecorator, openGLversion = 4)
scene.init(imgui=True, windowWidth = winWidth, windowHeight = winHeight, windowTitle = "Elements: Textures example", customImGUIdecorator = ImGUIecssDecorator2, openGLversion = 4)

# pre-pass scenegraph to initialise all GL context dependent geometry, shader classes
# needs an active GL context
Expand Down
204 changes: 204 additions & 0 deletions Elements/examples/2.Intermediate/example_8b_more_textures.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,204 @@
import numpy as np
import os

import Elements.pyECSS.math_utilities as util
from Elements.pyECSS.Entity import Entity
from Elements.pyECSS.Component import BasicTransform, Camera, RenderMesh
from Elements.pyECSS.System import TransformSystem, CameraSystem
from Elements.pyGLV.GL.Scene import Scene
from Elements.pyGLV.GUI.Viewer import RenderGLStateSystem
from Elements.pyGLV.GUI.ImguiDecorator import ImGUIecssDecorator

from Elements.pyGLV.GL.Shader import InitGLShaderSystem, Shader, ShaderGLDecorator, RenderGLShaderSystem
from Elements.pyGLV.GL.VertexArray import VertexArray
import Elements.utils.normals as norm
from Elements.pyGLV.GL.Textures import Texture

from Elements.utils.terrain import generateTerrain
from Elements.definitions import TEXTURE_DIR

from OpenGL.GL import GL_LINES

from Elements.utils.Shortcuts import displayGUI_text

example_description = \
"This example demonstrates the ability to apply image textures to geometry. \n\
You may move the camera using the mouse or the GUI. \n\
You may see the ECS Scenegraph showing Entities & Components of the scene and \n\
various information about them. Hit ESC OR Close the window to quit."


myshader = """
#version 410
layout (location=0) in vec4 vPos;
layout (location=1) in vec2 vTexCoord;
out vec2 fragmentTexCoord;
uniform mat4 model;
uniform mat4 View;
uniform mat4 Proj;
void main()
{
gl_Position = Proj * View * model * vPos;
fragmentTexCoord = vTexCoord;
}
"""


winWidth = 1024
winHeight = 768
scene = Scene()

# Scenegraph with Entities, Components
rootEntity = scene.world.createEntity(Entity(name="RooT"))

node4 = scene.world.createEntity(Entity(name="node4"))
scene.world.addEntityChild(rootEntity, node4)
trans4 = scene.world.addComponent(node4, BasicTransform(name="trans4", trs=util.translate(0,0.5,0)@util.scale(0.7))) #util.identity()
mesh4 = scene.world.addComponent(node4, RenderMesh(name="mesh4"))
vArray4 = scene.world.addComponent(node4, VertexArray())
shaderDec4 = scene.world.addComponent(node4, ShaderGLDecorator(Shader(vertex_source = myshader, fragment_source=Shader.SIMPLE_TEXTURE_FRAG)))

terrain = scene.world.createEntity(Entity(name="terrain"))
scene.world.addEntityChild(rootEntity, terrain)
terrain_trans = scene.world.addComponent(terrain, BasicTransform(name="terrain_trans", trs=util.identity()))
terrain_mesh = scene.world.addComponent(terrain, RenderMesh(name="terrain_mesh"))
terrain_vArray = scene.world.addComponent(terrain, VertexArray(primitive=GL_LINES))
terrain_shader = scene.world.addComponent(terrain, ShaderGLDecorator(Shader(vertex_source = Shader.COLOR_VERT_MVP, fragment_source=Shader.COLOR_FRAG)))

axes = scene.world.createEntity(Entity(name="axes"))
scene.world.addEntityChild(rootEntity, axes)
axes_trans = scene.world.addComponent(axes, BasicTransform(name="axes_trans", trs=util.identity()))
axes_mesh = scene.world.addComponent(axes, RenderMesh(name="axes_mesh"))
axes_vArray = scene.world.addComponent(axes, VertexArray(primitive=GL_LINES)) # note the primitive change
axes_shader = scene.world.addComponent(axes, ShaderGLDecorator(Shader(vertex_source = Shader.COLOR_VERT_MVP, fragment_source=Shader.COLOR_FRAG)))



# Systems
transUpdate = scene.world.createSystem(TransformSystem("transUpdate", "TransformSystem", "001"))
renderUpdate = scene.world.createSystem(RenderGLShaderSystem())
initUpdate = scene.world.createSystem(InitGLShaderSystem())




## ADD AXES: RenderMesh attributes ##
vertexAxes = np.array([
[0.0, 0.0, 0.0, 1.0],
[1.0, 0.0, 0.0, 1.0],
[0.0, 0.0, 0.0, 1.0],
[0.0, 1.0, 0.0, 1.0],
[0.0, 0.0, 0.0, 1.0],
[0.0, 0.0, 1.0, 1.0] ],dtype=np.float32)
colorAxes = np.array([
[1.0, 0.0, 0.0, 1.0],
[1.0, 0.0, 0.0, 1.0],
[0.0, 1.0, 0.0, 1.0],
[0.0, 1.0, 0.0, 1.0],
[0.0, 0.0, 1.0, 1.0],
[0.0, 0.0, 1.0, 1.0] ], dtype=np.float32)
indexAxes = np.array((0,1,2,3,4,5), np.uint32) #3 simple colored Axes as R,G,B lines
axes_mesh.vertex_attributes.append(vertexAxes)
axes_mesh.vertex_attributes.append(colorAxes)
axes_mesh.vertex_index.append(indexAxes)

## ADD SIMPLE CUBE : RenderMesh attributes ##
vertexCube = np.array([
[-1, -1, 1, 1.0],
[-1, 1, 1, 1.0],
[ 1, 1, 1, 1.0],
[ 1, -1, 1, 1.0],
[-1, -1, -1, 1.0],
[-1, 1, -1, 1.0],
[ 1, 1, -1, 1.0],
[ 1, -1, -1, 1.0] ],dtype=np.float32)

indexCube = np.array((1,0,3, 1,3,2,
2,3,7, 2,7,6,
3,0,4, 3,4,7,
6,5,1, 6,1,2,
4,5,6, 4,6,7,
5,4,0, 5,0,1), np.uint32) #rhombus out of two triangles

vertices, indices, _ = norm.generateUniqueVertices(vertexCube,indexCube)

UV_MAP = [
[0.0, 1], [0.0, 0.0], [1, 0.0], [0.0, 1], [1, 0.0], [1, 1],
[0.0, 2], [0.0, 0.0], [2, 0.0], [0.0, 2], [2, 0.0], [2, 2],
[0.0, 2/3], [0.0, 1/3], [1/3, 1/3], [0.0, 2/3], [1/3, 1/3], [1/3, 2/3],
[1/3, 3/3], [1/3, 2/3], [2/3, 2/3], [1/3, 3/3], [2/3, 2/3], [2/3, 3/3],
[2/3, 1/3], [2/3, 0.0], [3/3, 0.0], [2/3, 1/3], [3/3, 0.0], [3/3, 1/3],
[0.0, 3/3], [0.0, 2/3], [1/3, 2/3], [0.0, 3/3], [1/3, 2/3], [1/3, 3/3],
]

mesh4.vertex_attributes.append(vertices)
mesh4.vertex_attributes.append(UV_MAP)
mesh4.vertex_index.append(indices)


## ADD TERRAIN : RenderMesh attributes ##
vertexTerrain, indexTerrain, colorTerrain= generateTerrain(size=4,N=20)
terrain_mesh.vertex_attributes.append(vertexTerrain)
terrain_mesh.vertex_attributes.append(colorTerrain)
terrain_mesh.vertex_index.append(indexTerrain)




# MAIN RENDERING LOOP

running = True
scene.init(imgui=True, windowWidth = winWidth, windowHeight = winHeight,
windowTitle = "Elements: Textures example", customImGUIdecorator = ImGUIecssDecorator,
openGLversion = 4)
scene.world.traverse_visit(initUpdate, scene.world.root)

################### EVENT MANAGER - START ###################

eManager = scene.world.eventManager
gWindow = scene.renderWindow
gGUI = scene.gContext
renderGLEventActuator = RenderGLStateSystem()
eManager._subscribers['OnUpdateWireframe'] = gWindow
eManager._actuators['OnUpdateWireframe'] = renderGLEventActuator
eManager._subscribers['OnUpdateCamera'] = gWindow
eManager._actuators['OnUpdateCamera'] = renderGLEventActuator

################### EVENT MANAGER - END ###################

eye = util.vec(2.5, 2.5, 2.5)
target = util.vec(0.0, 0.0, 0.0)
up = util.vec(0.0, 1.0, 0.0)
view = util.lookat(eye, target, up)

projMat = util.perspective(50.0, 1.0, 0.01, 100.0)

gWindow._myCamera = view # otherwise, an imgui slider must be moved to properly update

texturePath = TEXTURE_DIR / "3x3.jpg"
texture = Texture(texturePath)
shaderDec4.setUniformVariable(key='ImageTexture', value=texture, texture=True)


while running:
running = scene.render()
displayGUI_text(example_description)
scene.world.traverse_visit(transUpdate, scene.world.root)
view = gWindow._myCamera # updates view via the imgui
mvp_terrain_axes = projMat @ view @ terrain.getChild(0).l2world

axes_shader.setUniformVariable(key='modelViewProj', value=mvp_terrain_axes, mat4=True)
terrain_shader.setUniformVariable(key='modelViewProj', value=mvp_terrain_axes, mat4=True)
shaderDec4.setUniformVariable(key='model', value=trans4.l2world, mat4=True)
shaderDec4.setUniformVariable(key='View', value=view, mat4=True)
shaderDec4.setUniformVariable(key='Proj', value=projMat, mat4=True)

scene.world.traverse_visit(renderUpdate, scene.world.root)
scene.render_post()

scene.shutdown()

Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
from Elements.pyECSS.Component import BasicTransform, Camera, RenderMesh
from Elements.pyECSS.System import TransformSystem, CameraSystem
from Elements.pyGLV.GL.Scene import Scene
from Elements.pyGLV.GUI.Viewer import RenderGLStateSystem, ImGUIecssDecorator
from Elements.pyGLV.GUI.Viewer import RenderGLStateSystem
from Elements.pyGLV.GUI.ImguiDecorator import ImGUIecssDecorator2

from Elements.pyGLV.GL.Shader import InitGLShaderSystem, Shader, ShaderGLDecorator, RenderGLShaderSystem
from Elements.pyGLV.GL.VertexArray import VertexArray
Expand Down Expand Up @@ -177,7 +178,7 @@
# MAIN RENDERING LOOP

running = True
scene.init(imgui=True, windowWidth = winWidth, windowHeight = winHeight, windowTitle = "Elements: Let There Be Light", openGLversion = 4, customImGUIdecorator = ImGUIecssDecorator)
scene.init(imgui=True, windowWidth = winWidth, windowHeight = winHeight, windowTitle = "Elements: Let There Be Light", openGLversion = 4, customImGUIdecorator = ImGUIecssDecorator2)

# pre-pass scenegraph to initialise all GL context dependent geometry, shader classes
# needs an active GL context
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@
from Elements.pyECSS.System import TransformSystem, CameraSystem
from Elements.pyGLV.GL.GameObject import GameObject
from Elements.pyGLV.GL.Scene import Scene
from Elements.pyGLV.GUI.Viewer import RenderGLStateSystem, ImGUIecssDecorator
from Elements.pyGLV.GUI.Viewer import RenderGLStateSystem
from Elements.pyGLV.GUI.ImguiDecorator import ImGUIecssDecorator2

from Elements.pyGLV.GL.Shader import InitGLShaderSystem, Shader, ShaderGLDecorator, RenderGLShaderSystem
from Elements.pyGLV.GL.VertexArray import VertexArray
from OpenGL.GL import GL_LINES
Expand Down Expand Up @@ -153,7 +155,7 @@

# MAIN RENDERING LOOP
running = True
scene.init(imgui=True, windowWidth = 1200, windowHeight = 800, windowTitle = "Elements: Import wavefront .obj example", openGLversion = 4, customImGUIdecorator = ImGUIecssDecorator)
scene.init(imgui=True, windowWidth = 1200, windowHeight = 800, windowTitle = "Elements: Import wavefront .obj example", openGLversion = 4, customImGUIdecorator = ImGUIecssDecorator2)

# pre-pass scenegraph to initialise all GL context dependent geometry, shader classes
# needs an active GL context
Expand Down
5 changes: 3 additions & 2 deletions Elements/examples/3.Advanced/example_12_usd_scene.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@
from Elements.pyECSS.System import TransformSystem, CameraSystem
from Elements.pyGLV.GL.Scene import Scene
from Elements.pyGLV.GL.Textures import Texture
from Elements.pyGLV.GUI.Viewer import RenderGLStateSystem, ImGUIecssDecorator
from Elements.pyGLV.GUI.Viewer import RenderGLStateSystem
from Elements.pyGLV.GUI.ImguiDecorator import ImGUIecssDecorator
import imgui
import Elements.features.usd.UsdImporter as SceneLoader
import Elements.extensions.usd.UsdImporter as SceneLoader
from Elements.pyGLV.GL.Shader import InitGLShaderSystem, Shader, ShaderGLDecorator, RenderGLShaderSystem
from Elements.pyGLV.GL.VertexArray import VertexArray
from OpenGL.GL import GL_LINES
Expand Down
Loading

0 comments on commit 8e062ac

Please sign in to comment.