beta release: textures, 3D models, Cameras
This commit is contained in:
		
						commit
						53c8740e13
					
				
							
								
								
									
										3
									
								
								.idea/Helium-Engine.iml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										3
									
								
								.idea/Helium-Engine.iml
									
									
									
										generated
									
									
									
								
							| @ -4,10 +4,11 @@ | |||||||
|     <exclude-output /> |     <exclude-output /> | ||||||
|     <content url="file://$MODULE_DIR$"> |     <content url="file://$MODULE_DIR$"> | ||||||
|       <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> |       <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> | ||||||
|  |       <sourceFolder url="file://$MODULE_DIR$/resources" isTestSource="false" /> | ||||||
|     </content> |     </content> | ||||||
|     <orderEntry type="inheritedJdk" /> |     <orderEntry type="inheritedJdk" /> | ||||||
|     <orderEntry type="sourceFolder" forTests="false" /> |     <orderEntry type="sourceFolder" forTests="false" /> | ||||||
|     <orderEntry type="library" name="lwjgl-release-3.2" level="project" /> |     <orderEntry type="library" name="lwjgl-release-3.2" level="project" /> | ||||||
|     <orderEntry type="library" name="joml-1.9.24" level="project" /> |     <orderEntry type="library" name="snakeyaml-1.9" level="project" /> | ||||||
|   </component> |   </component> | ||||||
| </module> | </module> | ||||||
							
								
								
									
										152
									
								
								.idea/artifacts/Helium_Engine_jar.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										152
									
								
								.idea/artifacts/Helium_Engine_jar.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,152 @@ | |||||||
|  | <component name="ArtifactManager"> | ||||||
|  |   <artifact type="jar" name="Helium-Engine:jar"> | ||||||
|  |     <output-path>$PROJECT_DIR$/out/artifacts/Helium_Engine_jar</output-path> | ||||||
|  |     <root id="archive" name="Helium-Engine.jar"> | ||||||
|  |       <element id="module-output" name="Helium-Engine" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/joml-1.9.24.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-egl.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-lz4.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-nfd.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-par.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-sse.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-stb.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-vma.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-bgfx.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-cuda.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-glfw.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-jawt.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-llvm.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-lmdb.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-meow.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-odbc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-opus.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-yoga.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-zstd.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-assimp.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-nanovg.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-openal.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-opencl.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-opengl.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-openvr.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-tinyfd.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-tootle.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-vulkan.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-xxhash.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-nuklear.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-shaderc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-tinyexr.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-jemalloc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-opengles.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-remotery.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-rpmalloc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-libdivide.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-egl-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-egl-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-lz4-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-lz4-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-nfd-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-nfd-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-par-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-par-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-sse-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-sse-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-stb-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-stb-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-vma-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-vma-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-bgfx-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-bgfx-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-cuda-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-cuda-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-glfw-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-glfw-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-jawt-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-jawt-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-llvm-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-llvm-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-lmdb-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-lmdb-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-meow-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-meow-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-odbc-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-odbc-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-opus-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-opus-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-yoga-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-yoga-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-zstd-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-zstd-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-assimp-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-assimp-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-nanovg-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-nanovg-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-openal-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-openal-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-opencl-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-opencl-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-opengl-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-opengl-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-openvr-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-openvr-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-tinyfd-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-tinyfd-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-tootle-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-tootle-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-vulkan-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-vulkan-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-xxhash-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-xxhash-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-nuklear-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-nuklear-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-shaderc-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-shaderc-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-tinyexr-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-tinyexr-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-jemalloc-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-jemalloc-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-opengles-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-opengles-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-remotery-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-remotery-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-rpmalloc-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-rpmalloc-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-libdivide-javadoc.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-libdivide-sources.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-lz4-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-nfd-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-par-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-sse-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-stb-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-vma-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-bgfx-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-glfw-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-llvm-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-lmdb-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-meow-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-opus-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-yoga-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-zstd-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-assimp-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-nanovg-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-openal-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-opengl-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-openvr-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-tinyfd-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-tootle-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-vulkan-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-xxhash-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-nuklear-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-shaderc-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-tinyexr-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-jemalloc-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-opengles-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-remotery-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-rpmalloc-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |       <element id="extracted-dir" path="$USER_HOME$/Downloads/lwjgl-release-3.2.3-custom/lwjgl-libdivide-natives-macos.jar" path-in-jar="/" /> | ||||||
|  |     </root> | ||||||
|  |   </artifact> | ||||||
|  | </component> | ||||||
							
								
								
									
										9
									
								
								.idea/libraries/snakeyaml_1_9.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								.idea/libraries/snakeyaml_1_9.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | |||||||
|  | <component name="libraryTable"> | ||||||
|  |   <library name="snakeyaml-1.9"> | ||||||
|  |     <CLASSES> | ||||||
|  |       <root url="jar://$USER_HOME$/Downloads/snakeyaml-1.9.jar!/" /> | ||||||
|  |     </CLASSES> | ||||||
|  |     <JAVADOC /> | ||||||
|  |     <SOURCES /> | ||||||
|  |   </library> | ||||||
|  | </component> | ||||||
							
								
								
									
										
											BIN
										
									
								
								resources/models/bunny.stl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								resources/models/bunny.stl
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										200007
									
								
								resources/models/dragon.obj
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										200007
									
								
								resources/models/dragon.obj
									
									
									
									
									
										Executable file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										59
									
								
								resources/objects/plane.mesh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								resources/objects/plane.mesh
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,59 @@ | |||||||
|  | 
 | ||||||
|  | type: color | ||||||
|  | vertices: | ||||||
|  |   - | ||||||
|  |     vertex: | ||||||
|  |       - -20 | ||||||
|  |       - -0.5000001 | ||||||
|  |       - 20 | ||||||
|  |     texture: | ||||||
|  |       - 0 | ||||||
|  |       - 0 | ||||||
|  |     color: | ||||||
|  |       - 0 | ||||||
|  |       - 0 | ||||||
|  |       - 1 | ||||||
|  |   - | ||||||
|  |     vertex: | ||||||
|  |       - -20 | ||||||
|  |       - -0.5000001 | ||||||
|  |       - -20 | ||||||
|  |     texture: | ||||||
|  |       - 0 | ||||||
|  |       - 1 | ||||||
|  |     color: | ||||||
|  |       - 0 | ||||||
|  |       - 0 | ||||||
|  |       - 1 | ||||||
|  |   - | ||||||
|  |     vertex: | ||||||
|  |       - 20 | ||||||
|  |       - -0.5000001 | ||||||
|  |       - -20 | ||||||
|  |     texture: | ||||||
|  |       - 1 | ||||||
|  |       - 1 | ||||||
|  |     color: | ||||||
|  |       - 1 | ||||||
|  |       - 0 | ||||||
|  |       - 1 | ||||||
|  |   - | ||||||
|  |     vertex: | ||||||
|  |       - 20 | ||||||
|  |       - -0.5000001 | ||||||
|  |       - 20 | ||||||
|  |     texture: | ||||||
|  |       - 1 | ||||||
|  |       - 0 | ||||||
|  |     color: | ||||||
|  |       - 1 | ||||||
|  |       - 0 | ||||||
|  |       - 1 | ||||||
|  | cull: | ||||||
|  |   - 0 | ||||||
|  |   - 1 | ||||||
|  |   - 3 | ||||||
|  |   - 3 | ||||||
|  |   - 1 | ||||||
|  |   - 2 | ||||||
|  | texture: "resources/textures/thonk.png" | ||||||
							
								
								
									
										7
									
								
								src/Game.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								src/Game.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | |||||||
|  | public interface Game { | ||||||
|  | 	void setup() throws Exception; | ||||||
|  | 	void loop() throws Exception; | ||||||
|  | 	void close() throws Exception; | ||||||
|  | 	void run() throws Exception; | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										193
									
								
								src/Test.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										193
									
								
								src/Test.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,193 @@ | |||||||
|  | import org.hl.engine.graphics.*; | ||||||
|  | import org.hl.engine.io.Display; | ||||||
|  | import org.hl.engine.io.Input; | ||||||
|  | import org.hl.engine.math.lalg.Vector3f; | ||||||
|  | import org.hl.engine.math.lalg.Vector2f; | ||||||
|  | import org.hl.engine.objects.FirstPersonCamera; | ||||||
|  | import org.hl.engine.objects.GameObject; | ||||||
|  | import org.hl.engine.objects.ThirdPersonCamera; | ||||||
|  | import org.hl.engine.utils.FileUtils; | ||||||
|  | import org.lwjgl.glfw.GLFW; | ||||||
|  | 
 | ||||||
|  | import java.io.IOException; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | public class Test implements Game { | ||||||
|  | 	// Defining original parts of the game | ||||||
|  | 	public final static int WIDTH = 1280, HEIGHT = 760; | ||||||
|  | 	public final String windowName = "Game!"; | ||||||
|  | 	public Display display; | ||||||
|  | 	public Input i; | ||||||
|  | 	public Renderer renderer; | ||||||
|  | 	public Shader shader; | ||||||
|  | 
 | ||||||
|  | 	public boolean lockToggle = false; | ||||||
|  | 
 | ||||||
|  | 	public GameObject cubeObject = new GameObject(new Mesh(new Vertex[] { | ||||||
|  | 			//Back face | ||||||
|  | 			new Vertex(new Vector3f(-0.5f,  0.5f, -0.5f), new Vector2f(0.0f, 0.0f)), | ||||||
|  | 			new Vertex(new Vector3f(-0.5f, -0.5f, -0.5f), new Vector2f(0.0f, 1.0f)), | ||||||
|  | 			new Vertex(new Vector3f( 0.5f, -0.5f, -0.5f), new Vector2f(1.0f, 1.0f)), | ||||||
|  | 			new Vertex(new Vector3f( 0.5f,  0.5f, -0.5f), new Vector2f(1.0f, 0.0f)), | ||||||
|  | 
 | ||||||
|  | 			//Front face | ||||||
|  | 			new Vertex(new Vector3f(-0.5f,  0.5f,  0.5f), new Vector2f(0.0f, 0.0f)), | ||||||
|  | 			new Vertex(new Vector3f(-0.5f, -0.5f,  0.5f), new Vector2f(0.0f, 1.0f)), | ||||||
|  | 			new Vertex(new Vector3f( 0.5f, -0.5f,  0.5f), new Vector2f(1.0f, 1.0f)), | ||||||
|  | 			new Vertex(new Vector3f( 0.5f,  0.5f,  0.5f), new Vector2f(1.0f, 0.0f)), | ||||||
|  | 
 | ||||||
|  | 			//Right face | ||||||
|  | 			new Vertex(new Vector3f( 0.5f,  0.5f, -0.5f), new Vector2f(0.0f, 0.0f)), | ||||||
|  | 			new Vertex(new Vector3f( 0.5f, -0.5f, -0.5f), new Vector2f(0.0f, 1.0f)), | ||||||
|  | 			new Vertex(new Vector3f( 0.5f, -0.5f,  0.5f), new Vector2f(1.0f, 1.0f)), | ||||||
|  | 			new Vertex(new Vector3f( 0.5f,  0.5f,  0.5f), new Vector2f(1.0f, 0.0f)), | ||||||
|  | 
 | ||||||
|  | 			//Left face | ||||||
|  | 			new Vertex(new Vector3f(-0.5f,  0.5f, -0.5f), new Vector2f(0.0f, 0.0f)), | ||||||
|  | 			new Vertex(new Vector3f(-0.5f, -0.5f, -0.5f), new Vector2f(0.0f, 1.0f)), | ||||||
|  | 			new Vertex(new Vector3f(-0.5f, -0.5f,  0.5f), new Vector2f(1.0f, 1.0f)), | ||||||
|  | 			new Vertex(new Vector3f(-0.5f,  0.5f,  0.5f), new Vector2f(1.0f, 0.0f)), | ||||||
|  | 
 | ||||||
|  | 			//Top face | ||||||
|  | 			new Vertex(new Vector3f(-0.5f,  0.5f,  0.5f), new Vector2f(0.0f, 0.0f)), | ||||||
|  | 			new Vertex(new Vector3f(-0.5f,  0.5f, -0.5f), new Vector2f(0.0f, 1.0f)), | ||||||
|  | 			new Vertex(new Vector3f( 0.5f,  0.5f, -0.5f), new Vector2f(1.0f, 1.0f)), | ||||||
|  | 			new Vertex(new Vector3f( 0.5f,  0.5f,  0.5f), new Vector2f(1.0f, 0.0f)), | ||||||
|  | 
 | ||||||
|  | 			//Bottom face | ||||||
|  | 			new Vertex(new Vector3f(-0.5f, -0.5f,  0.5f), new Vector2f(0.0f, 0.0f)), | ||||||
|  | 			new Vertex(new Vector3f(-0.5f, -0.5f, -0.5f), new Vector2f(0.0f, 1.0f)), | ||||||
|  | 			new Vertex(new Vector3f( 0.5f, -0.5f, -0.5f), new Vector2f(1.0f, 1.0f)), | ||||||
|  | 			new Vertex(new Vector3f( 0.5f, -0.5f,  0.5f), new Vector2f(1.0f, 0.0f)), | ||||||
|  | 	}, new int[] { | ||||||
|  | 			//Back face | ||||||
|  | 			0, 1, 3, | ||||||
|  | 			3, 1, 2, | ||||||
|  | 
 | ||||||
|  | 			//Front face | ||||||
|  | 			4, 5, 7, | ||||||
|  | 			7, 5, 6, | ||||||
|  | 
 | ||||||
|  | 			//Right face | ||||||
|  | 			8, 9, 11, | ||||||
|  | 			11, 9, 10, | ||||||
|  | 
 | ||||||
|  | 			//Left face | ||||||
|  | 			12, 13, 15, | ||||||
|  | 			15, 13, 14, | ||||||
|  | 
 | ||||||
|  | 			//Top face | ||||||
|  | 			16, 17, 19, | ||||||
|  | 			19, 17, 18, | ||||||
|  | 
 | ||||||
|  | 			//Bottom face | ||||||
|  | 			20, 21, 23, | ||||||
|  | 			23, 21, 22 | ||||||
|  | 	}, new Material(new Texture("resources/textures/b.png")), "texture"), new Vector3f(0, 0, 0 ), new Vector3f(0, 0, 0), new Vector3f(1, 1, 1)); | ||||||
|  | 
 | ||||||
|  | 	public GameObject planeObject = new GameObject("resources/objects/plane.mesh", new Vector3f(0, 0, 0 ), new Vector3f(0, 0, 0), new Vector3f(1, 1, 1)); | ||||||
|  | 
 | ||||||
|  | 	public GameObject dragonObject = new GameObject("resources/models/dragon.obj", "resources/textures/b.png", new Vector3f(0, 0, 0), new Vector3f(0, 0, 0), new Vector3f(1, 1, 1)); | ||||||
|  | 
 | ||||||
|  | 	public ThirdPersonCamera camera = new ThirdPersonCamera(new Vector3f(0, 0, 5), new Vector3f(0, 0, 0), cubeObject, 0.5f, 5, 0.1f, 12f, true, true, true); | ||||||
|  | 
 | ||||||
|  | 	// public FirstPersonCamera camera = new FirstPersonCamera(new Vector3f(0, 0, 5), new Vector3f(0, 0, 0), 0.1f, 0.15f); | ||||||
|  | 
 | ||||||
|  | 	public Test() throws Exception { | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	public void run() throws Exception { | ||||||
|  | 		setup(); | ||||||
|  | 		while (!(display.shouldClose())) { | ||||||
|  | 			loop(); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		close(); | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void loop() throws Exception { | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 		//First updating | ||||||
|  | 		int frames = display.update(); | ||||||
|  | 		display.setWindowName(display.getWindowName().substring(0, 4) + " (Frames : " + frames + ")"); | ||||||
|  | 		if (display.isLocked()) { | ||||||
|  | 			camera.standardKeybindUpdate(); | ||||||
|  | 		} | ||||||
|  | 		if (i.buttonPress(GLFW.GLFW_MOUSE_BUTTON_LEFT)) { | ||||||
|  | 			if (!lockToggle) { | ||||||
|  | 				lockToggle = true; | ||||||
|  | 				display.mouseState(true); | ||||||
|  | 			} | ||||||
|  | 		} else if (i.isKeyDown(GLFW.GLFW_KEY_ESCAPE)) { | ||||||
|  | 			lockToggle = false; | ||||||
|  | 			display.mouseState(lockToggle); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 		i.reset(); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 		// Now Render! | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 		// rendering the cube and plane | ||||||
|  | 		renderer.renderMesh(cubeObject, camera); | ||||||
|  | 		renderer.renderMesh(planeObject, camera); | ||||||
|  | 		renderer.renderMesh(dragonObject, camera); | ||||||
|  | 		//swap buffers so the new one will appear | ||||||
|  | 
 | ||||||
|  | 		display.reset(); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	public void setup() throws Exception { | ||||||
|  | 
 | ||||||
|  | 		//First, set up the display | ||||||
|  | 		display = new Display(WIDTH, HEIGHT, windowName, 70, 0.1f, 1000f); | ||||||
|  | 		display.create(); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 		// Open the shaders | ||||||
|  | 		shader = new Shader(Shader.VERTEXSHADER, Shader.FRAGSHADER); | ||||||
|  | 
 | ||||||
|  | 		// Set up the renderer | ||||||
|  | 		renderer = new Renderer(display, shader); | ||||||
|  | 
 | ||||||
|  | 		// Changing the background color | ||||||
|  | 		display.setBackgroundColor(0.53f, .81f, 0.92f); | ||||||
|  | 
 | ||||||
|  | 		// Creating / displaying the cube and plane | ||||||
|  | 		planeObject.create(); | ||||||
|  | 		cubeObject.create(); | ||||||
|  | 		dragonObject.create(); | ||||||
|  | 
 | ||||||
|  | 		// Creating the shader | ||||||
|  | 		shader.create(); | ||||||
|  | 
 | ||||||
|  | 		// Creating the input | ||||||
|  | 
 | ||||||
|  | 		i = new Input(display); | ||||||
|  | 
 | ||||||
|  | 		// Creating the camera | ||||||
|  | 		camera.create(i); | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void close() { | ||||||
|  | 		// Removing everything | ||||||
|  | 		display.destroy(); | ||||||
|  | 		shader.destroy(); | ||||||
|  | 		cubeObject.destroy(); | ||||||
|  | 		planeObject.destroy(); | ||||||
|  | 		dragonObject.destroy(); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static void main(String[] args) throws Exception { | ||||||
|  | 		//Running | ||||||
|  | 		new Test().run(); | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @ -12,12 +12,21 @@ import java.nio.IntBuffer; | |||||||
| public class Mesh { | public class Mesh { | ||||||
| 	private Vertex[] vertices; | 	private Vertex[] vertices; | ||||||
| 	private int[] indices; | 	private int[] indices; | ||||||
| 	private int vertexArrayObject, positionBufferObject, indicesBufferObject, colorBufferObject; | 	private int vertexArrayObject, positionBufferObject, indicesBufferObject, colorBufferObject, textureBufferObject; | ||||||
|  | 	private Material material; | ||||||
|  | 	private boolean type; | ||||||
| 
 | 
 | ||||||
| 	// A group of vertices combined based on the indexes | 	// A group of vertices combined based on the indexes | ||||||
| 	public Mesh(Vertex[] vertices, int[] indices) { | 	public Mesh(Vertex[] vertices, int[] indices, Material material, String type) throws Exception { | ||||||
| 		this.vertices = vertices; | 		this.vertices = vertices; | ||||||
| 		this.indices = indices; | 		this.indices = indices; | ||||||
|  | 		this.material = material; | ||||||
|  | 		if (!type.equals("texture") && !type.equals("color")) { | ||||||
|  | 			throw new Exception("Type must be either texture or color. "); | ||||||
|  | 		} | ||||||
|  | 		this.type = type.equals("texture"); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	// Destroy the mesh | 	// Destroy the mesh | ||||||
| @ -108,4 +117,12 @@ public class Mesh { | |||||||
| 
 | 
 | ||||||
| 		return bufferID; | 		return bufferID; | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
|  | 	public boolean isType() { | ||||||
|  | 		return type; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void setMaterial(Material material) { | ||||||
|  | 		this.material = material; | ||||||
|  | 	} | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										61
									
								
								src/org/hl/engine/graphics/ModelLoader.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								src/org/hl/engine/graphics/ModelLoader.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,61 @@ | |||||||
|  | package org.hl.engine.graphics; | ||||||
|  | 
 | ||||||
|  | import org.hl.engine.math.lalg.Vector2f; | ||||||
|  | import org.hl.engine.math.lalg.Vector3f; | ||||||
|  | import org.lwjgl.assimp.*; | ||||||
|  | 
 | ||||||
|  | public class ModelLoader { | ||||||
|  | 	public static Mesh loadModel(String path, String texture) throws Exception { | ||||||
|  | 		AIScene scene = Assimp.aiImportFile(path, Assimp.aiProcess_JoinIdenticalVertices | Assimp.aiProcess_Triangulate); | ||||||
|  | 
 | ||||||
|  | 		if (scene == null) { | ||||||
|  | 			throw new Exception("Couldn't load model at " + path); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		AIMesh mesh = AIMesh.create(scene.mMeshes().get(0)); | ||||||
|  | 		int vertexCount = mesh.mNumVertices(); | ||||||
|  | 
 | ||||||
|  | 		AIVector3D.Buffer vertices = mesh.mVertices(); | ||||||
|  | 		AIVector3D.Buffer normals = mesh.mNormals(); | ||||||
|  | 
 | ||||||
|  | 		Vertex[] vertexList = new Vertex[vertexCount]; | ||||||
|  | 
 | ||||||
|  | 		for (int i = 0; i < vertexCount; i ++) { | ||||||
|  | 			AIVector3D vertex = vertices.get(i); | ||||||
|  | 			Vector3f engineVertex = new Vector3f(vertex.x(), vertex.y(), vertex.z()); | ||||||
|  | 
 | ||||||
|  | 			AIVector3D normal = normals.get(i); | ||||||
|  | 			Vector3f engineNormal = new Vector3f(normal.x(), normal.y(), normal.z()); | ||||||
|  | 
 | ||||||
|  | 			Vector2f meshTextureCoord = new Vector2f(0, 0); | ||||||
|  | 
 | ||||||
|  | 			if (mesh.mNumUVComponents().get(0) != 0) { | ||||||
|  | 				AIVector3D tex = mesh.mTextureCoords(0).get(i); | ||||||
|  | 				meshTextureCoord.setX(tex.x()); | ||||||
|  | 				meshTextureCoord.setY(tex.y()); | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			vertexList[i] = new Vertex(engineVertex, meshTextureCoord, engineNormal); | ||||||
|  | 
 | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		int faceCount = mesh.mNumFaces(); | ||||||
|  | 		AIFace.Buffer indices = mesh.mFaces(); | ||||||
|  | 		int[] indicesList = new int[faceCount*3]; | ||||||
|  | 
 | ||||||
|  | 		for (int i = 0; i < faceCount; i ++) { | ||||||
|  | 			AIFace face = indices.get(i); | ||||||
|  | 			indicesList[i * 3 + 0] = face.mIndices().get(0); | ||||||
|  | 			indicesList[i * 3 + 1] = face.mIndices().get(1); | ||||||
|  | 			indicesList[i * 3 + 2] = face.mIndices().get(2); | ||||||
|  | 
 | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		return new Mesh(vertexList, indicesList, new Material(new Texture(texture)), "texture"); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| @ -1,5 +1,9 @@ | |||||||
| package org.hl.engine.graphics; | package org.hl.engine.graphics; | ||||||
| 
 | 
 | ||||||
|  | import org.hl.engine.io.Display; | ||||||
|  | import org.hl.engine.math.lalg.Matrix4f; | ||||||
|  | import org.hl.engine.objects.Camera; | ||||||
|  | import org.hl.engine.objects.GameObject; | ||||||
| import org.lwjgl.opengl.GL11; | import org.lwjgl.opengl.GL11; | ||||||
| import org.lwjgl.opengl.GL15; | import org.lwjgl.opengl.GL15; | ||||||
| import org.lwjgl.opengl.GL30; | import org.lwjgl.opengl.GL30; | ||||||
| @ -12,8 +16,7 @@ public class Renderer { | |||||||
| 		this.shader = shader; | 		this.shader = shader; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 
 | 	public void renderMesh(GameObject object, Camera camera) { | ||||||
| 	public void renderMesh(Mesh mesh) { |  | ||||||
| 
 | 
 | ||||||
| 		// Renders the mesh by drawing it using triangles (least complicated) | 		// Renders the mesh by drawing it using triangles (least complicated) | ||||||
| 		GL30.glBindVertexArray(mesh.getVertexArrayObject()); | 		GL30.glBindVertexArray(mesh.getVertexArrayObject()); | ||||||
| @ -23,7 +26,12 @@ public class Renderer { | |||||||
| 
 | 
 | ||||||
| 		shader.bind(); | 		shader.bind(); | ||||||
| 
 | 
 | ||||||
| 		GL11.glDrawElements(GL11.GL_TRIANGLES, mesh.getIndices().length, GL11.GL_UNSIGNED_INT, 0); | 		shader.setUniform("type", object.getMesh().isType()); | ||||||
|  | 		shader.setUniform("projection", display.getProjectionMatrix()); | ||||||
|  | 		shader.setUniform("view", Matrix4f.view(camera.getPosition(), camera.getRotation())); | ||||||
|  | 		shader.setUniform("model", Matrix4f.transform(object.getPosition(), object.getRotation(), object.getScale())); | ||||||
|  | 
 | ||||||
|  | 		GL11.glDrawElements(GL11.GL_TRIANGLES, object.getMesh().getIndices().length, GL11.GL_UNSIGNED_INT, 0); | ||||||
| 
 | 
 | ||||||
| 		shader.unbind(); | 		shader.unbind(); | ||||||
| 		GL30.glDisableVertexAttribArray(0); | 		GL30.glDisableVertexAttribArray(0); | ||||||
|  | |||||||
| @ -6,10 +6,31 @@ public class Vertex { | |||||||
| 
 | 
 | ||||||
| 	// Just a vertex | 	// Just a vertex | ||||||
| 
 | 
 | ||||||
| 	private Vector3f position; | 	private Vector3f position, normal; | ||||||
| 	private Vector3f color; | 	private Vector3f color; | ||||||
|  | 	private Vector2f textureCoords; | ||||||
|  | 	private boolean type; | ||||||
| 
 | 
 | ||||||
| 	public Vertex (Vector3f position, Vector3f color) { | 	public Vertex(Vector3f position, Vector2f textureCoords) { | ||||||
|  | 		this.position = position; | ||||||
|  | 		this.textureCoords = textureCoords; | ||||||
|  | 		this.color = new Vector3f(1, 1, 1); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public Vertex(Vector3f position, Vector2f textureCoords, Vector3f normal) { | ||||||
|  | 		this.position = position; | ||||||
|  | 		this.textureCoords = textureCoords; | ||||||
|  | 		this.normal = normal; | ||||||
|  | 		this.color = new Vector3f(1, 1, 1); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public Vertex(Vector3f position, Vector3f color) { | ||||||
|  | 		this.position = position; | ||||||
|  | 		this.color = color; | ||||||
|  | 		this.textureCoords = new Vector2f(0, 0); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public Vertex(Vector3f position, Vector3f color, Vector2f textureCoords) { | ||||||
| 		this.position = position; | 		this.position = position; | ||||||
| 		this.color = color; | 		this.color = color; | ||||||
| 	} | 	} | ||||||
| @ -21,4 +42,16 @@ public class Vertex { | |||||||
| 	public Vector3f getColor() { | 	public Vector3f getColor() { | ||||||
| 		return color; | 		return color; | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
|  | 	public Vector2f getTextureCoords() { | ||||||
|  | 		return textureCoords; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public boolean isType() { | ||||||
|  | 		return type; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public Vector3f getNormal() { | ||||||
|  | 		return normal; | ||||||
|  | 	} | ||||||
| } | } | ||||||
|  | |||||||
| @ -26,7 +26,12 @@ public class Display { | |||||||
| 	private int savedPosY; | 	private int savedPosY; | ||||||
| 	private int savedWidth; | 	private int savedWidth; | ||||||
| 	private int savedHeight; | 	private int savedHeight; | ||||||
| 
 | 	private Matrix4f projection; | ||||||
|  | 	private boolean isLocked; | ||||||
|  | 	private double[] cursorX = new double[1]; | ||||||
|  | 	private double[] cursorY = new double[1]; | ||||||
|  | 	private double[] enabledCursorX = new double[1]; | ||||||
|  | 	private double[] enabledCursorY = new double[1]; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -86,6 +91,26 @@ public class Display { | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	public void mouseState(boolean lock) { | ||||||
|  | 		if (lock != isLocked) { | ||||||
|  | 			if (lock) { | ||||||
|  | 				glfwGetCursorPos(window, enabledCursorX, enabledCursorY); | ||||||
|  | 				glfwSetCursorPos(window, cursorX[0], cursorY[0]); | ||||||
|  | 				isLocked = lock; | ||||||
|  | 				glfwSetInputMode(window, GLFW_CURSOR, lock ? GLFW_CURSOR_DISABLED : GLFW_CURSOR_NORMAL); | ||||||
|  | 			} else { | ||||||
|  | 				glfwGetCursorPos(window, cursorX, cursorY); | ||||||
|  | 				isLocked = lock; | ||||||
|  | 				glfwSetInputMode(window, GLFW_CURSOR, lock ? GLFW_CURSOR_DISABLED : GLFW_CURSOR_NORMAL); | ||||||
|  | 				glfwSetCursorPos(window, enabledCursorX[0], enabledCursorY[0]); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public boolean isLocked() { | ||||||
|  | 		return isLocked; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	// resized getter | 	// resized getter | ||||||
| 
 | 
 | ||||||
| 	public boolean isResized() { | 	public boolean isResized() { | ||||||
| @ -101,9 +126,13 @@ public class Display { | |||||||
| 			System.err.println("Failed to initialize GLFW! "); | 			System.err.println("Failed to initialize GLFW! "); | ||||||
| 			System.exit(1); | 			System.exit(1); | ||||||
| 		} | 		} | ||||||
| 
 | 		if(System.getProperty("os.name").contains("Mac")) { | ||||||
| 			glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); | 			glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); | ||||||
| 		glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); | 			glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2); | ||||||
|  | 		} else { | ||||||
|  | 			glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4); | ||||||
|  | 			glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1); | ||||||
|  | 		} | ||||||
| 		glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL11.GL_TRUE); | 		glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL11.GL_TRUE); | ||||||
| 		glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); | 		glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); | ||||||
| 
 | 
 | ||||||
| @ -122,6 +151,8 @@ public class Display { | |||||||
| 		windowYPos[0] = (videoMode.height() - this.height ) / 2; | 		windowYPos[0] = (videoMode.height() - this.height ) / 2; | ||||||
| 		glfwSetWindowPos(window, windowXPos[0], windowYPos[0]); | 		glfwSetWindowPos(window, windowXPos[0], windowYPos[0]); | ||||||
| 
 | 
 | ||||||
|  | 		glfwSetCursorPos(window, 0, 0); | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| 		// Graphics | 		// Graphics | ||||||
| 		glfwMakeContextCurrent(window); | 		glfwMakeContextCurrent(window); | ||||||
| @ -209,4 +240,8 @@ public class Display { | |||||||
| 	public void setBackgroundColor(float r, float g, float b) { | 	public void setBackgroundColor(float r, float g, float b) { | ||||||
| 		background.setVector(r, g, b); | 		background.setVector(r, g, b); | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
|  | 	public void reset() { | ||||||
|  | 		swapBuffers(); | ||||||
|  | 	} | ||||||
| } | } | ||||||
| @ -1,44 +0,0 @@ | |||||||
| package org.hl.engine.math; |  | ||||||
| 
 |  | ||||||
| public class Vector3f { |  | ||||||
| 	private float x; |  | ||||||
| 	private float y; |  | ||||||
| 	private float z; |  | ||||||
| 
 |  | ||||||
| 	// Just a vector if you know what I mean |  | ||||||
| 	public Vector3f (float x, float y, float z) { |  | ||||||
| 		this.x = x; |  | ||||||
| 		this.y = y; |  | ||||||
| 		this.z = z; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	public void setVector(float x, float y, float z) { |  | ||||||
| 		this.x = x; |  | ||||||
| 		this.y = y; |  | ||||||
| 		this.z = z; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	public float getX() { |  | ||||||
| 		return x; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	public void setX(float x) { |  | ||||||
| 		this.x = x; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	public float getY() { |  | ||||||
| 		return y; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	public void setY(float y) { |  | ||||||
| 		this.y = y; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	public float getZ() { |  | ||||||
| 		return z; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	public void setZ(float z) { |  | ||||||
| 		this.z = z; |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
							
								
								
									
										196
									
								
								src/org/hl/engine/math/lalg/Matrix4f.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										196
									
								
								src/org/hl/engine/math/lalg/Matrix4f.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,196 @@ | |||||||
|  | package org.hl.engine.math.lalg; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | public class Matrix4f { | ||||||
|  | 	public static final int SIZE = 4; | ||||||
|  | 	private float[][] elements = new float[SIZE][SIZE]; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	public Matrix4f() { | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public Matrix4f(float[][] values) { | ||||||
|  | 		this.elements = values; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	public static Matrix4f identity() { | ||||||
|  | 		float[][] identityArray = { | ||||||
|  | 				{1 , 0 , 0 , 0}, | ||||||
|  | 				{0 , 1 , 0 , 0}, | ||||||
|  | 				{0 , 0 , 1 , 0}, | ||||||
|  | 				{0 , 0 , 0 , 1} | ||||||
|  | 		}; | ||||||
|  | 		return new Matrix4f(identityArray); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static Matrix4f zeroes() { | ||||||
|  | 		float[][] zeroMatrix = { | ||||||
|  | 				{0 , 0 , 0 , 0}, | ||||||
|  | 				{0 , 0 , 0 , 0}, | ||||||
|  | 				{0 , 0 , 0 , 0}, | ||||||
|  | 				{0 , 0 , 0 , 0} | ||||||
|  | 		}; | ||||||
|  | 		return new Matrix4f(zeroMatrix); | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static Matrix4f translate(Vector3f translate) { | ||||||
|  | 		Matrix4f result = Matrix4f.identity(); | ||||||
|  | 
 | ||||||
|  | 		result.set(3, 0, translate.getX()); | ||||||
|  | 		result.set(3, 1, translate.getY()); | ||||||
|  | 		result.set(3, 2, translate.getZ()); | ||||||
|  | 
 | ||||||
|  | 		return result; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	public static Matrix4f flip(Matrix4f matrix) { | ||||||
|  | 		Matrix4f flippedMatrix = matrix; | ||||||
|  | 		for (int i = 0; i < SIZE; i ++) { | ||||||
|  | 			for (int j = 0; j < SIZE; j ++ ) { | ||||||
|  | 				flippedMatrix.set(i, j, matrix.get(j, i)); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		return flippedMatrix; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	// This one doesn't work | ||||||
|  | 
 | ||||||
|  | 	/* public static Matrix4f rotate(float angle, Vector3f axis) { | ||||||
|  | 
 | ||||||
|  | 		float cos = (float)Math.cos(Math.toDegrees(angle)); | ||||||
|  | 		float sin = (float)Math.sin(Math.toDegrees(angle)); | ||||||
|  | 		float C = 1 - cos; | ||||||
|  | 		float x = axis.getX(); | ||||||
|  | 		float y = axis.getY(); | ||||||
|  | 		float z = axis.getZ(); | ||||||
|  | 		float[][] rotArray = { | ||||||
|  | 				{cos + x*x*C , x*y*C - z*sin , x*z*C + y*sin , 0}, | ||||||
|  | 				{y*z*C + z*sin , cos + y*y*C , y*z*C - x*sin , 0}, | ||||||
|  | 				{z*x*C-y*sin , z*y*C + x*sin  ,  cos + z*z*C , 0}, | ||||||
|  | 				{0 , 0 , 0 , 1} | ||||||
|  | 		}; | ||||||
|  | 
 | ||||||
|  | 		return new Matrix4f(rotArray); | ||||||
|  | 	} */ | ||||||
|  | 	public static Matrix4f rotate(float angle, Vector3f axis) { | ||||||
|  | 		Matrix4f result = Matrix4f.identity(); | ||||||
|  | 
 | ||||||
|  | 		float cos = (float) Math.cos(Math.toRadians(angle)); | ||||||
|  | 		float sin = (float) Math.sin(Math.toRadians(angle)); | ||||||
|  | 		float C = 1 - cos; | ||||||
|  | 
 | ||||||
|  | 		result.set(0, 0, cos + axis.getX() * axis.getX() * C); | ||||||
|  | 		result.set(0, 1, axis.getX() * axis.getY() * C - axis.getZ() * sin); | ||||||
|  | 		result.set(0, 2, axis.getX() * axis.getZ() * C + axis.getY() * sin); | ||||||
|  | 		result.set(1, 0, axis.getY() * axis.getX() * C + axis.getZ() * sin); | ||||||
|  | 		result.set(1, 1, cos + axis.getY() * axis.getY() * C); | ||||||
|  | 		result.set(1, 2, axis.getY() * axis.getZ() * C - axis.getX() * sin); | ||||||
|  | 		result.set(2, 0, axis.getZ() * axis.getX() * C - axis.getY() * sin); | ||||||
|  | 		result.set(2, 1, axis.getZ() * axis.getY() * C + axis.getX() * sin); | ||||||
|  | 		result.set(2, 2, cos + axis.getZ() * axis.getZ() * C); | ||||||
|  | 
 | ||||||
|  | 		return result; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static Matrix4f scale(Vector3f scaleVec) { | ||||||
|  | 
 | ||||||
|  | 		Matrix4f result = Matrix4f.identity(); | ||||||
|  | 
 | ||||||
|  | 		result.set(0, 0, scaleVec.getX()); | ||||||
|  | 		result.set(1, 1, scaleVec.getY()); | ||||||
|  | 		result.set(2, 2, scaleVec.getZ()); | ||||||
|  | 
 | ||||||
|  | 		return result; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static Matrix4f projection( float fov, float aspectRatio, float near, float far) { | ||||||
|  | 		Matrix4f result = Matrix4f.identity(); | ||||||
|  | 
 | ||||||
|  | 		float tan = (float)Math.tan(Math.toRadians(fov / 2)); | ||||||
|  | 		float range = far - near; | ||||||
|  | 
 | ||||||
|  | 		result.set(0, 0, 1.0f / (aspectRatio * tan)); | ||||||
|  | 		result.set(1, 1, 1.0f / tan); | ||||||
|  | 		result.set(2, 2, -((far + near) / range)); | ||||||
|  | 		result.set(3, 2, -1.0f); | ||||||
|  | 		result.set(2, 3, -(2.0f*far*near/range)); | ||||||
|  | 		result.set(3, 3, 0f); | ||||||
|  | 
 | ||||||
|  | 		return result; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static Matrix4f view(Vector3f position, Vector3f rotation) { | ||||||
|  | 
 | ||||||
|  | 		Vector3f negative = new Vector3f(-position.getX(), -position.getY(), -position.getZ()); | ||||||
|  | 		Matrix4f translationMatrix = Matrix4f.translate(negative); | ||||||
|  | 		Matrix4f rotationXMatrix = Matrix4f.rotate(-rotation.getX(), new Vector3f(1, 0, 0)); | ||||||
|  | 		Matrix4f rotationYMatrix = Matrix4f.rotate(-rotation.getY(), new Vector3f(0, 1, 0)); | ||||||
|  | 		Matrix4f rotationZMatrix = Matrix4f.rotate(-rotation.getZ(), new Vector3f(0, 0, 1)); | ||||||
|  | 
 | ||||||
|  | 		Matrix4f rotMat = Matrix4f.multiply(rotationZMatrix, Matrix4f.multiply(rotationXMatrix, rotationYMatrix)); | ||||||
|  | 
 | ||||||
|  | 		return Matrix4f.multiply(rotMat, translationMatrix); | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static Matrix4f multiply(Matrix4f first, Matrix4f second) { | ||||||
|  | 
 | ||||||
|  | 		Matrix4f result = Matrix4f.zeroes(); | ||||||
|  | 
 | ||||||
|  | 		for (int i = 0; i < SIZE; i ++ ) { | ||||||
|  | 			for (int j = 0; j < SIZE; j ++) { | ||||||
|  | 				result.set(i, j, | ||||||
|  | 									first.get(0, i) * second.get(j, 0) + | ||||||
|  | 										first.get(1, i) * second.get(j, 1) + | ||||||
|  | 										first.get(2, i) * second.get(j, 2) + | ||||||
|  | 										first.get(3, i) * second.get(j, 3) | ||||||
|  | 				); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		return result; | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public float get(int x, int y) { | ||||||
|  | 		return elements[x][y]; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void set(int x, int y, float value) { | ||||||
|  | 		elements[x][y] = value; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public float[][] getAll() { | ||||||
|  | 		return elements; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static Matrix4f transform(Vector3f position, Vector3f rotation, Vector3f scale) { | ||||||
|  | 		Matrix4f translationMatrix = Matrix4f.translate(position); | ||||||
|  | 		Matrix4f rotationXMatrix = Matrix4f.rotate(rotation.getX(), new Vector3f(1, 0, 0)); | ||||||
|  | 		Matrix4f rotationYMatrix = Matrix4f.rotate(rotation.getY(), new Vector3f(0, 1, 0)); | ||||||
|  | 		Matrix4f rotationZMatrix = Matrix4f.rotate(rotation.getZ(), new Vector3f(0, 0, 1)); | ||||||
|  | 		Matrix4f scaleMatrix = Matrix4f.scale(scale); | ||||||
|  | 
 | ||||||
|  | 		Matrix4f rotMat = Matrix4f.multiply(rotationXMatrix, Matrix4f.multiply(rotationYMatrix, rotationZMatrix)); | ||||||
|  | 
 | ||||||
|  | 		return Matrix4f.multiply(translationMatrix, Matrix4f.multiply(rotMat, scaleMatrix)); | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	public float[] convertTo1D() { | ||||||
|  | 		float[] returnedArray = new float[SIZE*SIZE]; | ||||||
|  | 		int sizeOfRow = elements[0].length; | ||||||
|  | 		for (int i = 0; i < elements.length; i ++) { | ||||||
|  | 			for (int j = 0; j < sizeOfRow; j ++) { | ||||||
|  | 				returnedArray[i*SIZE + j] = elements[i][j]; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		return returnedArray; | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										95
									
								
								src/org/hl/engine/math/lalg/Vector2f.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								src/org/hl/engine/math/lalg/Vector2f.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,95 @@ | |||||||
|  | package org.hl.engine.math.lalg; | ||||||
|  | 
 | ||||||
|  | import java.util.Objects; | ||||||
|  | 
 | ||||||
|  | public class Vector2f { | ||||||
|  | 	private float x; | ||||||
|  | 	private float y; | ||||||
|  | 
 | ||||||
|  | 	// Just a vector if you know what I mean | ||||||
|  | 	public Vector2f (float x, float y) { | ||||||
|  | 		this.x = x; | ||||||
|  | 		this.y = y; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void setVector(float x, float y) { | ||||||
|  | 		this.x = x; | ||||||
|  | 		this.y = y; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	public static Vector2f add(Vector2f first, Vector2f second) { | ||||||
|  | 		return new Vector2f(first.getX() + second.getX(), first.getY() + second.getY()); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static Vector2f sub(Vector2f first, Vector2f second) { | ||||||
|  | 		return new Vector2f(first.getX() - second.getX(), first.getY() - second.getY()); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static Vector2f mul(Vector2f first, Vector2f second) { | ||||||
|  | 		return new Vector2f(first.getX() * second.getX(), first.getY() * second.getY()); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static Vector2f div(Vector2f first, Vector2f second) { | ||||||
|  | 		return new Vector2f(first.getX() / second.getX(), first.getY() / second.getY()); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static float dot(Vector2f first, Vector2f second) { | ||||||
|  | 		return first.getX()*second.getX() + first.getY()*second.getY(); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static float magnitude(Vector2f vector) { | ||||||
|  | 		return (float)Math.sqrt(vector.getX()*vector.getX() + vector.getY()*vector.getY()); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static Vector2f normalize(Vector2f vector) { | ||||||
|  | 		float len = Vector2f.magnitude(vector); | ||||||
|  | 		return Vector2f.div(vector, new Vector2f(len, len)); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static Vector2f scale(Vector2f vector, float scalar) { | ||||||
|  | 		return new Vector2f(vector.getX()*scalar, vector.getY()*scalar); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static Vector2f projection(Vector2f projecting, Vector2f projectedOnto) { | ||||||
|  | 		return Vector2f.scale(projectedOnto, ( Vector2f.dot(projecting, projectedOnto) / Vector2f.dot(projectedOnto, projectedOnto) )); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	@Override | ||||||
|  | 	public boolean equals(Object o) { | ||||||
|  | 		if (this == o) return true; | ||||||
|  | 		if (o == null || getClass() != o.getClass()) return false; | ||||||
|  | 		Vector2f vector2f = (Vector2f) o; | ||||||
|  | 		return Float.compare(vector2f.getX(), getX()) == 0 && | ||||||
|  | 				Float.compare(vector2f.getY(), getY()) == 0; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	@Override | ||||||
|  | 	public int hashCode() { | ||||||
|  | 		return Objects.hash(getX(), getY()); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	@Override | ||||||
|  | 	public String toString() { | ||||||
|  | 		return "Vector2f{" + | ||||||
|  | 				"x=" + x + | ||||||
|  | 				", y=" + y + | ||||||
|  | 				'}'; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public float getX() { | ||||||
|  | 		return x; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void setX(float x) { | ||||||
|  | 		this.x = x; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public float getY() { | ||||||
|  | 		return y; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void setY(float y) { | ||||||
|  | 		this.y = y; | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										107
									
								
								src/org/hl/engine/math/lalg/Vector3f.java
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										107
									
								
								src/org/hl/engine/math/lalg/Vector3f.java
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,107 @@ | |||||||
|  | package org.hl.engine.math; | ||||||
|  | 
 | ||||||
|  | import java.util.Objects; | ||||||
|  | 
 | ||||||
|  | public class Vector3f { | ||||||
|  | 	private float x; | ||||||
|  | 	private float y; | ||||||
|  | 	private float z; | ||||||
|  | 
 | ||||||
|  | 	// Just a vector if you know what I mean | ||||||
|  | 	public Vector3f (float x, float y, float z) { | ||||||
|  | 		this.x = x; | ||||||
|  | 		this.y = y; | ||||||
|  | 		this.z = z; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void setVector(float x, float y, float z) { | ||||||
|  | 		this.x = x; | ||||||
|  | 		this.y = y; | ||||||
|  | 		this.z = z; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static Vector3f add(Vector3f first, Vector3f second) { | ||||||
|  | 		return new Vector3f(first.getX() + second.getX(), first.getY() + second.getY(), first.getZ() + second.getZ()); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static Vector3f sub(Vector3f first, Vector3f second) { | ||||||
|  | 		return new Vector3f(first.getX() - second.getX(), first.getY() - second.getY(), first.getZ() - second.getZ()); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static Vector3f mul(Vector3f first, Vector3f second) { | ||||||
|  | 		return new Vector3f(first.getX() * second.getX(), first.getY() * second.getY(), first.getZ() * second.getZ()); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static Vector3f div(Vector3f first, Vector3f second) { | ||||||
|  | 		return new Vector3f(first.getX() / second.getX(), first.getY() / second.getY(), first.getZ() / second.getZ()); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static float dot(Vector3f first, Vector3f second) { | ||||||
|  | 		return first.getX()*second.getX() + first.getY()*second.getY() + first.getZ()*second.getZ(); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static float magnitude(Vector3f vector) { | ||||||
|  | 		return (float)Math.sqrt(vector.getX()*vector.getX() + vector.getY()*vector.getY() + vector.getZ()*vector.getZ()); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static Vector3f normalize(Vector3f vector) { | ||||||
|  | 		float len = Vector3f.magnitude(vector); | ||||||
|  | 		return Vector3f.div(vector, new Vector3f(len, len, len)); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static Vector3f scale(Vector3f vector, float scalar) { | ||||||
|  | 		return new Vector3f(vector.getX()*scalar, vector.getY()*scalar, vector.getZ()*scalar); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static Vector3f projection(Vector3f projecting, Vector3f projectedOnto) { | ||||||
|  | 		return Vector3f.scale(projectedOnto, ( Vector3f.dot(projecting, projectedOnto) / Vector3f.dot(projectedOnto, projectedOnto) )); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	@Override | ||||||
|  | 	public boolean equals(Object o) { | ||||||
|  | 		if (this == o) return true; | ||||||
|  | 		if (o == null || getClass() != o.getClass()) return false; | ||||||
|  | 		Vector3f vector3f = (Vector3f) o; | ||||||
|  | 		return Float.compare(vector3f.getX(), getX()) == 0 && | ||||||
|  | 				Float.compare(vector3f.getY(), getY()) == 0 && | ||||||
|  | 				Float.compare(vector3f.getZ(), getZ()) == 0; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	@Override | ||||||
|  | 	public int hashCode() { | ||||||
|  | 		return Objects.hash(getX(), getY(), getZ()); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	@Override | ||||||
|  | 	public String toString() { | ||||||
|  | 		return "Vector3f{" + | ||||||
|  | 				"x=" + x + | ||||||
|  | 				", y=" + y + | ||||||
|  | 				", z=" + z + | ||||||
|  | 				'}'; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public float getX() { | ||||||
|  | 		return x; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void setX(float x) { | ||||||
|  | 		this.x = x; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public float getY() { | ||||||
|  | 		return y; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void setY(float y) { | ||||||
|  | 		this.y = y; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public float getZ() { | ||||||
|  | 		return z; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void setZ(float z) { | ||||||
|  | 		this.z = z; | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										126
									
								
								src/org/hl/engine/math/lalg/Vector4f.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										126
									
								
								src/org/hl/engine/math/lalg/Vector4f.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,126 @@ | |||||||
|  | package org.hl.engine.math.lalg; | ||||||
|  | 
 | ||||||
|  | import java.util.Objects; | ||||||
|  | 
 | ||||||
|  | public class Vector4f { | ||||||
|  | 	private float x; | ||||||
|  | 	private float y; | ||||||
|  | 	private float z; | ||||||
|  | 	private float a; | ||||||
|  | 
 | ||||||
|  | 	// Just a vector if you know what I mean | ||||||
|  | 	public Vector4f (float x, float y, float z, float a) { | ||||||
|  | 		this.x = x; | ||||||
|  | 		this.y = y; | ||||||
|  | 		this.z = z; | ||||||
|  | 		this.a = a; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void setVector(float x, float y, float z, float a) { | ||||||
|  | 		this.x = x; | ||||||
|  | 		this.y = y; | ||||||
|  | 		this.z = z; | ||||||
|  | 		this.a = a; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void add(float x, float y, float z, float a) { | ||||||
|  | 		this.x += x; | ||||||
|  | 		this.y += y; | ||||||
|  | 		this.z += z; | ||||||
|  | 		this.a += a; | ||||||
|  | 	} | ||||||
|  | 	public static Vector4f add(Vector4f first, Vector4f second) { | ||||||
|  | 		return new Vector4f(first.getX() + second.getX(), first.getY() + second.getY(), first.getZ() + second.getZ(), first.getA() + second.getA()); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static Vector4f sub(Vector4f first, Vector4f second) { | ||||||
|  | 		return new Vector4f(first.getX() - second.getX(), first.getY() - second.getY(), first.getZ() - second.getZ(), first.getA() - second.getA()); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static Vector4f mul(Vector4f first, Vector4f second) { | ||||||
|  | 		return new Vector4f(first.getX() * second.getX(), first.getY() * second.getY(), first.getZ() * second.getZ(), first.getA() * second.getA()); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static Vector4f div(Vector4f first, Vector4f second) { | ||||||
|  | 		return new Vector4f(first.getX() / second.getX(), first.getY() / second.getY(), first.getZ() / second.getZ(), first.getA() / second.getA()); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static float dot(Vector4f first, Vector4f second) { | ||||||
|  | 		return first.getX()*second.getX() + first.getY()*second.getY() + first.getZ()*second.getZ() + first.getA()*second.getA(); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static float magnitude(Vector4f vector) { | ||||||
|  | 		return (float)Math.sqrt(vector.getX()*vector.getX() + vector.getY()*vector.getY() + vector.getZ()*vector.getZ() + vector.getA()*vector.getA()); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static Vector4f normalize(Vector4f vector) { | ||||||
|  | 		float len = Vector4f.magnitude(vector); | ||||||
|  | 		return Vector4f.div(vector, new Vector4f(len, len, len, len)); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static Vector4f scale(Vector4f vector, float scalar) { | ||||||
|  | 		return new Vector4f(vector.getX()*scalar, vector.getY()*scalar, vector.getZ()*scalar, vector.getA()*scalar); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public static Vector4f projection(Vector4f projecting, Vector4f projectedOnto) { | ||||||
|  | 		return Vector4f.scale(projectedOnto, ( Vector4f.dot(projecting, projectedOnto) / Vector4f.dot(projectedOnto, projectedOnto) )); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	@Override | ||||||
|  | 	public boolean equals(Object o) { | ||||||
|  | 		if (this == o) return true; | ||||||
|  | 		if (o == null || getClass() != o.getClass()) return false; | ||||||
|  | 		Vector4f vector4f = (Vector4f) o; | ||||||
|  | 		return Float.compare(vector4f.getX(), getX()) == 0 && | ||||||
|  | 				Float.compare(vector4f.getY(), getY()) == 0 && | ||||||
|  | 				Float.compare(vector4f.getZ(), getZ()) == 0 && | ||||||
|  | 				Float.compare(vector4f.getA(), getA()) == 0; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	@Override | ||||||
|  | 	public int hashCode() { | ||||||
|  | 		return Objects.hash(getX(), getY(), getZ(), getA()); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	@Override | ||||||
|  | 	public String toString() { | ||||||
|  | 		return "Vector4f{" + | ||||||
|  | 				"x=" + x + | ||||||
|  | 				", y=" + y + | ||||||
|  | 				", z=" + z + | ||||||
|  | 				", a=" + a + | ||||||
|  | 				'}'; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public float getX() { | ||||||
|  | 		return x; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void setX(float x) { | ||||||
|  | 		this.x = x; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public float getY() { | ||||||
|  | 		return y; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void setY(float y) { | ||||||
|  | 		this.y = y; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public float getZ() { | ||||||
|  | 		return z; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void setZ(float z) { | ||||||
|  | 		this.z = z; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public float getA() { | ||||||
|  | 		return a; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void setA(float a) { | ||||||
|  | 		this.a = a; | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										43
									
								
								src/org/hl/engine/objects/Camera.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								src/org/hl/engine/objects/Camera.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,43 @@ | |||||||
|  | package org.hl.engine.objects; | ||||||
|  | import org.hl.engine.math.lalg.Vector3f; | ||||||
|  | 
 | ||||||
|  | public class Camera { | ||||||
|  | 	private Vector3f position; | ||||||
|  | 	private Vector3f rotation; | ||||||
|  | 
 | ||||||
|  | 	public Camera(Vector3f position, Vector3f rotation) { | ||||||
|  | 		this.position = position; | ||||||
|  | 		this.rotation = rotation; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	public Vector3f getPosition() { | ||||||
|  | 		return position; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void setPosition(Vector3f position) throws Exception { | ||||||
|  | 		this.position = position; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public Vector3f getRotation() { | ||||||
|  | 		return rotation; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void setRotation(Vector3f rotation) throws Exception { | ||||||
|  | 		this.rotation = rotation; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void movePosition(float offsetX, float offsetY, float offsetZ) { | ||||||
|  | 		if(offsetZ != 0) { | ||||||
|  | 			position.setZ(position.getZ() + (float) Math.cos(Math.toRadians(rotation.getY())) * offsetZ); | ||||||
|  | 			position.setX(position.getX() + (float) Math.sin(Math.toRadians(rotation.getY())) * -offsetZ); | ||||||
|  | 		} | ||||||
|  | 		if(offsetX != 0) { | ||||||
|  | 			position.setX(position.getX() + (float) Math.cos(Math.toRadians(rotation.getY())) * offsetX) ; | ||||||
|  | 			position.setZ(position.getZ() + (float) Math.sin(Math.toRadians(rotation.getY())) * offsetX); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		position.setY(position.getY() + offsetY); | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										96
									
								
								src/org/hl/engine/objects/FirstPersonCamera.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								src/org/hl/engine/objects/FirstPersonCamera.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,96 @@ | |||||||
|  | package org.hl.engine.objects; | ||||||
|  | 
 | ||||||
|  | import org.hl.engine.io.Display; | ||||||
|  | import org.hl.engine.io.Input; | ||||||
|  | import org.hl.engine.math.lalg.Vector3f; | ||||||
|  | import org.lwjgl.glfw.GLFW; | ||||||
|  | 
 | ||||||
|  | import java.util.Vector; | ||||||
|  | 
 | ||||||
|  | public class FirstPersonCamera extends Camera { | ||||||
|  | 	private Input i; | ||||||
|  | 	private float moveSpeed; | ||||||
|  | 	private float sensitivity; | ||||||
|  | 
 | ||||||
|  | 	private double oldMouseX, oldMouseY = 0; | ||||||
|  | 	private double newMouseX, newMouseY; | ||||||
|  | 
 | ||||||
|  | 	public FirstPersonCamera(Vector3f position, Vector3f rotation, float moveSpeed, float sensitivity) { | ||||||
|  | 		super(position, rotation); | ||||||
|  | 		this.moveSpeed = moveSpeed; | ||||||
|  | 		this.sensitivity = sensitivity; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void create(Input i) { | ||||||
|  | 		this.i = i; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void standardKeybindUpdate () throws Exception { | ||||||
|  | 
 | ||||||
|  | 		newMouseX = i.getMouseX(); | ||||||
|  | 		newMouseY = i.getMouseY(); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 		Vector3f cameraPos = getPosition(); | ||||||
|  | 		Vector3f cameraRot = getRotation(); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 		float dx = (float) ((float)newMouseX - oldMouseX); | ||||||
|  | 		float dy = (float) ((float)newMouseY - oldMouseY); | ||||||
|  | 		oldMouseX = newMouseX; | ||||||
|  | 		oldMouseY = newMouseY; | ||||||
|  | 
 | ||||||
|  | 		cameraRot = Vector3f.add(cameraRot, new Vector3f(dy*sensitivity, dx*sensitivity, 0)); | ||||||
|  | 
 | ||||||
|  | 		if (i.isKeyDown(GLFW.GLFW_KEY_A)) movePosition(-moveSpeed, 0, 0); | ||||||
|  | 		if (i.isKeyDown(GLFW.GLFW_KEY_D)) movePosition(moveSpeed, 0, 0); | ||||||
|  | 		if (i.isKeyDown(GLFW.GLFW_KEY_W)) movePosition(0, 0, -moveSpeed); | ||||||
|  | 		if (i.isKeyDown(GLFW.GLFW_KEY_S)) movePosition(0, 0, moveSpeed); | ||||||
|  | 		if (i.isKeyDown(GLFW.GLFW_KEY_SPACE)) movePosition(0, moveSpeed, 0); | ||||||
|  | 		if (i.isKeyDown(GLFW.GLFW_KEY_LEFT_SHIFT)) movePosition(0, -moveSpeed, 0); | ||||||
|  | 		if (i.keyPress(GLFW.GLFW_KEY_R)) moveSpeed = 3*moveSpeed; | ||||||
|  | 		if (i.keyReleased(GLFW.GLFW_KEY_R)) moveSpeed = moveSpeed / 3; | ||||||
|  | 
 | ||||||
|  | 		setRotation(cameraRot); | ||||||
|  | 		setPosition(cameraPos); | ||||||
|  | 
 | ||||||
|  | 		i.reset(); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void moveForward() { | ||||||
|  | 		movePosition(0, 0, -moveSpeed); | ||||||
|  | 	} | ||||||
|  | 	public void moveBackward() { | ||||||
|  | 		movePosition(0, 0, moveSpeed); | ||||||
|  | 	} | ||||||
|  | 	public void moveLeft() { | ||||||
|  | 		movePosition(-moveSpeed, 0, 0); | ||||||
|  | 	} | ||||||
|  | 	public void moveRight() { | ||||||
|  | 		movePosition(moveSpeed, 0, 0); | ||||||
|  | 	} | ||||||
|  | 	public void moveUp() { | ||||||
|  | 		movePosition(0, moveSpeed, 0); | ||||||
|  | 	} | ||||||
|  | 	public void moveDown() { | ||||||
|  | 		movePosition(0, -moveSpeed, 0); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public float getMoveSpeed() { | ||||||
|  | 		return moveSpeed; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void setMoveSpeed(float moveSpeed) { | ||||||
|  | 		this.moveSpeed = moveSpeed; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void rotateCamera(float dx, float dy) throws Exception { | ||||||
|  | 
 | ||||||
|  | 		Vector3f cameraRot = getRotation(); | ||||||
|  | 		cameraRot = Vector3f.add(cameraRot, new Vector3f(dy*sensitivity, dx*sensitivity, 0)); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 		setRotation(cameraRot); | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										19
									
								
								src/org/hl/engine/objects/FixedCamera.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								src/org/hl/engine/objects/FixedCamera.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,19 @@ | |||||||
|  | package org.hl.engine.objects; | ||||||
|  | 
 | ||||||
|  | import org.hl.engine.math.lalg.Vector3f; | ||||||
|  | 
 | ||||||
|  | public class FixedCamera extends Camera { | ||||||
|  | 	public FixedCamera(Vector3f position, Vector3f rotation) { | ||||||
|  | 		super(position, rotation); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	@Override | ||||||
|  | 	public void setRotation(Vector3f rotation) throws Exception { | ||||||
|  | 		throw new Exception("You cannot rotate a fixed camera! "); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	@Override | ||||||
|  | 	public void setPosition(Vector3f rotation) throws Exception { | ||||||
|  | 		throw new Exception("You cannot move a fixed camera! "); | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										128
									
								
								src/org/hl/engine/objects/GameObject.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										128
									
								
								src/org/hl/engine/objects/GameObject.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,128 @@ | |||||||
|  | package org.hl.engine.objects; | ||||||
|  | 
 | ||||||
|  | import org.hl.engine.graphics.*; | ||||||
|  | import org.hl.engine.math.lalg.Vector2f; | ||||||
|  | import org.hl.engine.math.lalg.Vector3f; | ||||||
|  | import org.hl.engine.objects.yloaders.YMesh; | ||||||
|  | import org.hl.engine.objects.yloaders.YPoint; | ||||||
|  | import org.yaml.snakeyaml.Yaml; | ||||||
|  | import org.yaml.snakeyaml.constructor.Constructor; | ||||||
|  | 
 | ||||||
|  | import java.io.FileInputStream; | ||||||
|  | import java.io.FileNotFoundException; | ||||||
|  | import java.util.Objects; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | public class GameObject { | ||||||
|  | 	private Vector3f position, rotation, scale; | ||||||
|  | 	private Mesh mesh; | ||||||
|  | 
 | ||||||
|  | 	public GameObject(Mesh mesh, Vector3f position, Vector3f rotation, Vector3f scale) { | ||||||
|  | 		this.position = position; | ||||||
|  | 		this.rotation = rotation; | ||||||
|  | 		this.scale = scale; | ||||||
|  | 		this.mesh = mesh; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public GameObject(String meshFileName, Vector3f position, Vector3f rotation, Vector3f scale) throws Exception { | ||||||
|  | 		if (!meshFileName.endsWith(".mesh")) { throw new Exception("Wrong file type! "); } | ||||||
|  | 		Yaml yaml = new Yaml(); | ||||||
|  | 		FileInputStream inputStream = new FileInputStream(meshFileName); | ||||||
|  | 		YMesh yMesh = yaml.loadAs(inputStream, YMesh.class); | ||||||
|  | 		Integer[] cull = yMesh.getCull().toArray(new Integer[0]); | ||||||
|  | 		String type = yMesh.getType(); | ||||||
|  | 		String texture = yMesh.getTexture(); | ||||||
|  | 		YPoint[] vertices = yMesh.getVertices().toArray(new YPoint[0]); | ||||||
|  | 		Vertex[] meshFormat = new Vertex[vertices.length]; | ||||||
|  | 
 | ||||||
|  | 		for (YPoint vertex : vertices) { | ||||||
|  | 			if (vertex.getVertex().size() != 3) { | ||||||
|  | 				throw new Exception("Incorrect number of coordinates. "); | ||||||
|  | 			} | ||||||
|  | 			if (vertex.getColor().size() != 3) { | ||||||
|  | 				throw new Exception("Incorrect number of color values. "); | ||||||
|  | 			} | ||||||
|  | 			if (vertex.getTexture().size() != 2) { | ||||||
|  | 				throw new Exception("Incorrect number of texture coordinates. "); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		if (!type.equals("texture") && !type.equals("color")) { | ||||||
|  | 			throw new Exception("Incorrect type. Type can only be texture or color. "); | ||||||
|  | 		} | ||||||
|  | 		for (int i = 0; i < vertices.length; i ++) { | ||||||
|  | 			Vertex value = new Vertex( | ||||||
|  | 					new Vector3f(vertices[i].getVertex().get(0), vertices[i].getVertex().get(1), vertices[i].getVertex().get(2)), | ||||||
|  | 					new Vector3f(vertices[i].getColor().get(0), vertices[i].getColor().get(1), vertices[i].getColor().get(2)), | ||||||
|  | 					new Vector2f(vertices[i].getTexture().get(0), vertices[i].getTexture().get(1))); | ||||||
|  | 			meshFormat[i] = value; | ||||||
|  | 		} | ||||||
|  | 		int[] indices = new int[cull.length]; | ||||||
|  | 		for (int j = 0; j < cull.length; j ++) { | ||||||
|  | 			indices[j] = cull[j]; | ||||||
|  | 		} | ||||||
|  | 		this.mesh = new Mesh(meshFormat, indices, new Material(new Texture(texture)), type); | ||||||
|  | 		this.position = position; | ||||||
|  | 		this.scale = scale; | ||||||
|  | 		this.rotation = rotation; | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
|  | 	public GameObject(String meshFileName, String texturePath, Vector3f position, Vector3f rotation, Vector3f scale) throws Exception { | ||||||
|  | 		this.mesh = ModelLoader.loadModel(meshFileName, texturePath); | ||||||
|  | 		this.position = position; | ||||||
|  | 		this.scale = scale; | ||||||
|  | 		this.rotation = rotation; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	public void create() { | ||||||
|  | 		mesh.create(); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void destroy() { | ||||||
|  | 		mesh.destroy(); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public Vector3f getPosition() { | ||||||
|  | 		return position; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public Vector3f getRotation() { | ||||||
|  | 		return rotation; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public Vector3f getScale() { | ||||||
|  | 		return scale; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public Mesh getMesh() { | ||||||
|  | 		return mesh; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void setPosition(Vector3f position) { | ||||||
|  | 		this.position = position; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void setRotation(Vector3f rotation) { | ||||||
|  | 		this.rotation = rotation; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void setScale(Vector3f scale) { | ||||||
|  | 		this.scale = scale; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	@Override | ||||||
|  | 	public boolean equals(Object o) { | ||||||
|  | 		if (this == o) return true; | ||||||
|  | 		if (o == null || getClass() != o.getClass()) return false; | ||||||
|  | 		GameObject that = (GameObject) o; | ||||||
|  | 		return Objects.equals(getPosition(), that.getPosition()) && | ||||||
|  | 				Objects.equals(getRotation(), that.getRotation()) && | ||||||
|  | 				Objects.equals(getScale(), that.getScale()) && | ||||||
|  | 				Objects.equals(getMesh(), that.getMesh()); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	@Override | ||||||
|  | 	public int hashCode() { | ||||||
|  | 		return Objects.hash(getPosition(), getRotation(), getScale(), getMesh()); | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										173
									
								
								src/org/hl/engine/objects/ThirdPersonCamera.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										173
									
								
								src/org/hl/engine/objects/ThirdPersonCamera.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,173 @@ | |||||||
|  | package org.hl.engine.objects; | ||||||
|  | 
 | ||||||
|  | import org.hl.engine.io.Input; | ||||||
|  | import org.hl.engine.math.lalg.Vector3f; | ||||||
|  | import org.lwjgl.glfw.GLFW; | ||||||
|  | 
 | ||||||
|  | public class ThirdPersonCamera extends Camera { | ||||||
|  | 
 | ||||||
|  | 	private GameObject object; | ||||||
|  | 	private Input i; | ||||||
|  | 	private float distance; | ||||||
|  | 	private float angle = 0; | ||||||
|  | 	private float horizAngle = 0; | ||||||
|  | 	private float vertAngle = 0; | ||||||
|  | 	private float moveSpeed; | ||||||
|  | 	private float sensitivity; | ||||||
|  | 	private float near; | ||||||
|  | 	private float far; | ||||||
|  | 	private boolean clickToMove; | ||||||
|  | 	private boolean clickToZoom; | ||||||
|  | 	private boolean zoomEnabled; | ||||||
|  | 
 | ||||||
|  | 	private double oldMouseX, oldMouseY = 0; | ||||||
|  | 	private double newMouseX, newMouseY; | ||||||
|  | 
 | ||||||
|  | 	public ThirdPersonCamera(Vector3f position, Vector3f rotation, GameObject object, float sensitivity, float distance, float near, float far, boolean clickToMove, boolean clickToZoom, boolean zoomEnabled) { | ||||||
|  | 		super(position, rotation); | ||||||
|  | 		this.object = object; | ||||||
|  | 		this.sensitivity = sensitivity; | ||||||
|  | 		this.clickToMove = clickToMove; | ||||||
|  | 		this.clickToZoom = clickToZoom; | ||||||
|  | 		this.zoomEnabled = zoomEnabled; | ||||||
|  | 		this.near = near; | ||||||
|  | 		this.far = far; | ||||||
|  | 		this.distance = distance; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void create(Input i) throws Exception { | ||||||
|  | 
 | ||||||
|  | 		this.i = i; | ||||||
|  | 		setRotation(getRotation()); | ||||||
|  | 		setPosition(getPosition()); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	public void standardKeybindUpdate() throws Exception { | ||||||
|  | 
 | ||||||
|  | 		newMouseX = i.getMouseX(); | ||||||
|  | 		newMouseY = i.getMouseY(); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 		float dx = (float) ((float)newMouseX - oldMouseX); | ||||||
|  | 		float dy = (float) ((float)newMouseY - oldMouseY); | ||||||
|  | 
 | ||||||
|  | 		if (clickToMove && clickToZoom) { | ||||||
|  | 			if (i.isButtonDown(GLFW.GLFW_MOUSE_BUTTON_LEFT)) { | ||||||
|  | 				vertAngle -= dy * sensitivity; | ||||||
|  | 				horizAngle += dx * sensitivity; | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 			if (i.isButtonDown(GLFW.GLFW_MOUSE_BUTTON_RIGHT) && zoomEnabled) { | ||||||
|  | 				if (distance > 0) { | ||||||
|  | 					distance += dy * sensitivity; | ||||||
|  | 				} | ||||||
|  | 				else { | ||||||
|  | 					distance = near; | ||||||
|  | 				} | ||||||
|  | 				if (distance > far) { | ||||||
|  | 					distance = far; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		} else if (clickToMove) { | ||||||
|  | 
 | ||||||
|  | 			if (i.isButtonDown(GLFW.GLFW_MOUSE_BUTTON_LEFT)) { | ||||||
|  | 				vertAngle -= dy * sensitivity; | ||||||
|  | 				horizAngle += dx * sensitivity; | ||||||
|  | 			} | ||||||
|  | 			if (zoomEnabled) { | ||||||
|  | 				if (distance > 0) { | ||||||
|  | 					distance += dy * sensitivity; | ||||||
|  | 				} else { | ||||||
|  | 					distance = near; | ||||||
|  | 				} | ||||||
|  | 				if (distance > far) { | ||||||
|  | 					distance = far; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 		} else if (clickToZoom) { | ||||||
|  | 
 | ||||||
|  | 			vertAngle -= dy * sensitivity; | ||||||
|  | 			horizAngle += dx * sensitivity; | ||||||
|  | 
 | ||||||
|  | 			if (i.isButtonDown(GLFW.GLFW_MOUSE_BUTTON_RIGHT) && zoomEnabled) { | ||||||
|  | 				if (distance > 0) { | ||||||
|  | 					distance += dy * sensitivity; | ||||||
|  | 				} else { | ||||||
|  | 					distance = near; | ||||||
|  | 				} | ||||||
|  | 				if (distance > far) { | ||||||
|  | 					distance = far; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 		} else { | ||||||
|  | 
 | ||||||
|  | 			vertAngle -= dy * sensitivity; | ||||||
|  | 			horizAngle += dx * sensitivity; | ||||||
|  | 			if (zoomEnabled) { | ||||||
|  | 				if (distance > 0) { | ||||||
|  | 					distance += dy * sensitivity; | ||||||
|  | 				} else { | ||||||
|  | 					distance = near; | ||||||
|  | 				} | ||||||
|  | 				if (distance > far) { | ||||||
|  | 					distance = far; | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 
 | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 		oldMouseX = newMouseX; | ||||||
|  | 		oldMouseY = newMouseY; | ||||||
|  | 
 | ||||||
|  | 		float horizDistance = (float) (distance * Math.cos(Math.toRadians(vertAngle))); | ||||||
|  | 		float vertDistance = (float) (distance * Math.sin(Math.toRadians(vertAngle))); | ||||||
|  | 
 | ||||||
|  | 		float xOffset = (float) (horizDistance * Math.sin(Math.toRadians(-horizAngle))); | ||||||
|  | 		float zOffset = (float) (horizDistance * Math.cos(Math.toRadians(-horizAngle))); | ||||||
|  | 
 | ||||||
|  | 		setPosition(new Vector3f(object.getPosition().getX() + xOffset, object.getPosition().getY() - vertDistance, object.getPosition().getZ() + zOffset)); | ||||||
|  | 		setRotation(new Vector3f(-vertAngle, horizAngle,0)); | ||||||
|  | 
 | ||||||
|  | 		i.reset(); | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
|  | 	public void movePosition (float dy, float dx) throws Exception { | ||||||
|  | 		vertAngle -= dy * sensitivity; | ||||||
|  | 		horizAngle += dx * sensitivity; | ||||||
|  | 
 | ||||||
|  | 		float horizDistance = (float) (distance * Math.cos(Math.toRadians(vertAngle))); | ||||||
|  | 		float vertDistance = (float) (distance * Math.sin(Math.toRadians(vertAngle))); | ||||||
|  | 
 | ||||||
|  | 		float xOffset = (float) (horizDistance * Math.sin(Math.toRadians(-horizAngle))); | ||||||
|  | 		float zOffset = (float) (horizDistance * Math.cos(Math.toRadians(-horizAngle))); | ||||||
|  | 
 | ||||||
|  | 		setPosition(new Vector3f(object.getPosition().getX() + xOffset, object.getPosition().getY() - vertDistance, object.getPosition().getZ() + zOffset)); | ||||||
|  | 		setRotation(new Vector3f(-vertAngle, horizAngle,0)); | ||||||
|  | 	} | ||||||
|  | 	public void zoom (float dy) throws Exception { | ||||||
|  | 		if (zoomEnabled) { | ||||||
|  | 			if (distance > 0) { | ||||||
|  | 				distance += dy * sensitivity; | ||||||
|  | 			} else { | ||||||
|  | 				distance = near; | ||||||
|  | 			} | ||||||
|  | 			if (distance > far) { | ||||||
|  | 				distance = far; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		float horizDistance = (float) (distance * Math.cos(Math.toRadians(vertAngle))); | ||||||
|  | 		float vertDistance = (float) (distance * Math.sin(Math.toRadians(vertAngle))); | ||||||
|  | 
 | ||||||
|  | 		float xOffset = (float) (horizDistance * Math.sin(Math.toRadians(-horizAngle))); | ||||||
|  | 		float zOffset = (float) (horizDistance * Math.cos(Math.toRadians(-horizAngle))); | ||||||
|  | 
 | ||||||
|  | 		setPosition(new Vector3f(object.getPosition().getX() + xOffset, object.getPosition().getY() - vertDistance, object.getPosition().getZ() + zOffset)); | ||||||
|  | 		setRotation(new Vector3f(-vertAngle, horizAngle,0)); | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										9
									
								
								src/org/hl/engine/objects/TopDownCamera.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								src/org/hl/engine/objects/TopDownCamera.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | |||||||
|  | package org.hl.engine.objects; | ||||||
|  | 
 | ||||||
|  | import org.hl.engine.math.lalg.Vector3f; | ||||||
|  | 
 | ||||||
|  | public class TopDownCamera extends FixedCamera { | ||||||
|  | 	public TopDownCamera(Vector3f position) { | ||||||
|  | 		super(position, new Vector3f(90, 0, 0)); | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										42
									
								
								src/org/hl/engine/objects/yloaders/YMesh.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								src/org/hl/engine/objects/yloaders/YMesh.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,42 @@ | |||||||
|  | package org.hl.engine.objects.yloaders ; | ||||||
|  | 
 | ||||||
|  | import java.util.ArrayList; | ||||||
|  | 
 | ||||||
|  | public class YMesh implements java.io.Serializable { | ||||||
|  | 	private String type; | ||||||
|  | 	private ArrayList<YPoint> vertices; | ||||||
|  | 	private ArrayList<Integer> cull; | ||||||
|  | 	private String texture; | ||||||
|  | 
 | ||||||
|  | 	public String getType() { | ||||||
|  | 		return type; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void setType(String type) { | ||||||
|  | 		this.type = type; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public ArrayList<YPoint> getVertices() { | ||||||
|  | 		return vertices; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void setVertices(ArrayList<YPoint> vertices) { | ||||||
|  | 		this.vertices = vertices; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public ArrayList<Integer> getCull() { | ||||||
|  | 		return cull; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void setCull(ArrayList<Integer> cull) { | ||||||
|  | 		this.cull = cull; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public String getTexture() { | ||||||
|  | 		return texture; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void setTexture(String texture) { | ||||||
|  | 		this.texture = texture; | ||||||
|  | 	} | ||||||
|  | } | ||||||
							
								
								
									
										33
									
								
								src/org/hl/engine/objects/yloaders/YPoint.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								src/org/hl/engine/objects/yloaders/YPoint.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,33 @@ | |||||||
|  | package org.hl.engine.objects.yloaders; | ||||||
|  | 
 | ||||||
|  | import java.util.ArrayList; | ||||||
|  | 
 | ||||||
|  | public class YPoint implements java.io.Serializable  { | ||||||
|  | 	private ArrayList<Float> vertex; | ||||||
|  | 	private ArrayList<Float> texture; | ||||||
|  | 	private ArrayList<Float> color; | ||||||
|  | 
 | ||||||
|  | 	public ArrayList<Float> getVertex() { | ||||||
|  | 		return vertex; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void setVertex(ArrayList<Float> vertex) { | ||||||
|  | 		this.vertex = vertex; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public ArrayList<Float> getTexture() { | ||||||
|  | 		return texture; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void setTexture(ArrayList<Float> texture) { | ||||||
|  | 		this.texture = texture; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public ArrayList<Float> getColor() { | ||||||
|  | 		return color; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	public void setColor(ArrayList<Float> color) { | ||||||
|  | 		this.color = color; | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @ -1,9 +1,15 @@ | |||||||
| #version 330 core | #version 330 core | ||||||
| 
 | 
 | ||||||
| in vec3 passColor; | in vec3 passColor; | ||||||
|  | in vec2 passTextureCoord; | ||||||
|  | uniform int type; | ||||||
| 
 | 
 | ||||||
| out vec4 outColor; | out vec4 outColor; | ||||||
| 
 | 
 | ||||||
| void main() { | void main() { | ||||||
|  | 	if (type == 1) { | ||||||
|  | 		outColor = texture(tex, passTextureCoord); | ||||||
|  | 	} else { | ||||||
| 		outColor = vec4(passColor, 1.0); | 		outColor = vec4(passColor, 1.0); | ||||||
|  | 	} | ||||||
| } | } | ||||||
|  | |||||||
| @ -2,10 +2,24 @@ | |||||||
| 
 | 
 | ||||||
| layout(location = 0) in vec3 position; | layout(location = 0) in vec3 position; | ||||||
| layout(location = 1) in vec3 color; | layout(location = 1) in vec3 color; | ||||||
|  | layout(location = 2) in vec2 textureCoord; | ||||||
|  | 
 | ||||||
|  | uniform mat4 model; | ||||||
|  | uniform mat4 view; | ||||||
|  | uniform mat4 projection; | ||||||
|  | uniform int type; | ||||||
|  | 
 | ||||||
|  | layout(location = 0) out vec3 passColor; | ||||||
|  | layout(location = 1) out vec2 passTextureCoord; | ||||||
|  | layout(location = 2) out int passType; | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| out vec3 passColor; | out vec3 passColor; | ||||||
| 
 | 
 | ||||||
| void main() { | void main() { | ||||||
| 	gl_Position = vec4(position, 1.0); | 	gl_Position =  projection * view  * model *  vec4(position, 1.0); | ||||||
| 	passColor = color; | 	passColor = color; | ||||||
|  | 	passType = type; | ||||||
|  | 
 | ||||||
|  | 	passTextureCoord = textureCoord; | ||||||
| } | } | ||||||
		Reference in New Issue
	
	Block a user