Added lithium grease between pieces of blue tape for phong shader.

This commit is contained in:
Edward R. Gonzalez 2020-02-17 21:10:15 -05:00
parent aa560c34b6
commit ea17618c98
13 changed files with 535 additions and 132 deletions

View File

@ -194,7 +194,7 @@ namespace Actions
using QueueType = std::deque< ptr<IAction>>; using QueueType = std::deque< ptr<IAction>>;
public:
template<typename FunctionType, typename... ActionParams> template<typename FunctionType, typename... ActionParams>
sfn AddToQueue(Delegate< FunctionType> _actionToQueue, ActionParams... _paramsForAction) sfn AddToQueue(Delegate< FunctionType> _actionToQueue, ActionParams... _paramsForAction)
{ {
@ -243,6 +243,8 @@ namespace Actions
} }
private:
QueueType actionQueue; QueueType actionQueue;
}; };
} }

175
CompGraphics.vcxproj Normal file
View File

@ -0,0 +1,175 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<ItemGroup>
<ClInclude Include="Actions.hpp" />
<ClInclude Include="Cpp_Alias.hpp" />
<ClInclude Include="DGL_Buffers.hpp" />
<ClInclude Include="DGL_Model.hpp" />
<ClInclude Include="DGL_Space.hpp" />
<ClInclude Include="DGL_Enum.hpp" />
<ClInclude Include="DGL_FundamentalTypes.hpp" />
<ClInclude Include="DGL_MiscTypes.hpp" />
<ClInclude Include="DGL.hpp" />
<ClInclude Include="DGL_Shader.hpp" />
<ClInclude Include="DGL_Variable.hpp" />
<ClInclude Include="ShaderFromTut.hpp" />
<ClInclude Include="Testing.hpp" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="Execution.cpp" />
</ItemGroup>
<ItemGroup>
<None Include="3.3.shader.frag" />
<None Include="3.3.shader.vert" />
<None Include="5.1.transform.frag" />
<None Include="5.1.transform.vert" />
<None Include="6.3.coordinate_systems.frag" />
<None Include="6.3.coordinate_systems.vert" />
<None Include="BasicLamp.frag" />
<None Include="BasicLighting.frag" />
<None Include="PhongShader.frag" />
<None Include="PhongShader.vert" />
<None Include="SingleColor.frag" />
<None Include="SimpleFragmentShader.frag" />
<None Include="SimpleTransform.vert" />
<None Include="SimpleVertexShader.vert" />
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>16.0</VCProjectVersion>
<ProjectGuid>{4F39A7F3-8E88-4B30-A89D-44BE8F5DD0A9}</ProjectGuid>
<RootNamespace>CompGraphics</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<IncludePath>F:\Development\cpp_libs\glfw-3.3.2.bin.WIN64\include\GLFW;$(IncludePath)</IncludePath>
<LibraryPath>F:\Development\cpp_libs\glfw-3.3.2.bin.WIN64\lib-vc2019;$(LibraryPath)</LibraryPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ExecutablePath>$(ExecutablePath)</ExecutablePath>
<IncludePath>F:\Development\cpp_libs\glfw-3.3.2.bin.WIN64\include\GLFW;F:\Development\cpp_libs\glew-2.1.0\include\GL;F:\Development\cpp_libs\glm;$(IncludePath)</IncludePath>
<LibraryPath>F:\Development\cpp_libs\glfw-3.3.2.bin.WIN64\lib-vc2019;F:\Development\cpp_libs\glew-2.1.0\lib\Release\x64;$(LibraryPath)</LibraryPath>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<AdditionalDependencies>glfw3.lib;opengl32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>F:\Development\cpp_libs\glfw-3.3.2.bin.WIN64\lib-vc2019;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level4</WarningLevel>
<Optimization>Disabled</Optimization>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
<LanguageStandard>stdcpp17</LanguageStandard>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<AdditionalLibraryDirectories>F:\Development\cpp_libs\glfw-3.3.2.bin.WIN64\lib-vc2019;F:\Development\cpp_libs\glew-2.1.0\lib\x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>glfw3.lib;opengl32.lib;glew32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,93 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ClInclude Include="Cpp_Alias.hpp" />
<ClInclude Include="DGL_FundamentalTypes.hpp">
<Filter>Ducktape_GL</Filter>
</ClInclude>
<ClInclude Include="DGL_Shader.hpp">
<Filter>Ducktape_GL</Filter>
</ClInclude>
<ClInclude Include="DGL_Enum.hpp">
<Filter>Ducktape_GL</Filter>
</ClInclude>
<ClInclude Include="DGL_Buffers.hpp">
<Filter>Ducktape_GL</Filter>
</ClInclude>
<ClInclude Include="DGL_MiscTypes.hpp">
<Filter>Ducktape_GL</Filter>
</ClInclude>
<ClInclude Include="DGL.hpp">
<Filter>Ducktape_GL</Filter>
</ClInclude>
<ClInclude Include="DGL_Variable.hpp">
<Filter>Ducktape_GL</Filter>
</ClInclude>
<ClInclude Include="ShaderFromTut.hpp">
<Filter>Ducktape_GL</Filter>
</ClInclude>
<ClInclude Include="DGL_Space.hpp">
<Filter>Ducktape_GL</Filter>
</ClInclude>
<ClInclude Include="Testing.hpp" />
<ClInclude Include="Actions.hpp" />
<ClInclude Include="DGL_Model.hpp">
<Filter>Ducktape_GL</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Execution.cpp" />
</ItemGroup>
<ItemGroup>
<Filter Include="Ducktape_GL">
<UniqueIdentifier>{dffb88da-bab3-4079-8f08-9bb1e7475f9d}</UniqueIdentifier>
</Filter>
<Filter Include="Shaders">
<UniqueIdentifier>{05484b5d-cbf0-49d7-a593-8fffa98fadb3}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<None Include="3.3.shader.frag">
<Filter>Shaders</Filter>
</None>
<None Include="3.3.shader.vert">
<Filter>Shaders</Filter>
</None>
<None Include="5.1.transform.frag">
<Filter>Shaders</Filter>
</None>
<None Include="5.1.transform.vert">
<Filter>Shaders</Filter>
</None>
<None Include="6.3.coordinate_systems.frag">
<Filter>Shaders</Filter>
</None>
<None Include="6.3.coordinate_systems.vert">
<Filter>Shaders</Filter>
</None>
<None Include="SimpleFragmentShader.frag">
<Filter>Shaders</Filter>
</None>
<None Include="SimpleTransform.vert">
<Filter>Shaders</Filter>
</None>
<None Include="SimpleVertexShader.vert">
<Filter>Shaders</Filter>
</None>
<None Include="SingleColor.frag">
<Filter>Shaders</Filter>
</None>
<None Include="BasicLighting.frag">
<Filter>Shaders</Filter>
</None>
<None Include="BasicLamp.frag">
<Filter>Shaders</Filter>
</None>
<None Include="PhongShader.vert">
<Filter>Shaders</Filter>
</None>
<None Include="PhongShader.frag">
<Filter>Shaders</Filter>
</None>
</ItemGroup>
</Project>

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ShowAllFiles>false</ShowAllFiles>
</PropertyGroup>
</Project>

View File

@ -119,6 +119,10 @@ namespace DGL
A = GLFW_KEY_A , A = GLFW_KEY_A ,
D = GLFW_KEY_D , D = GLFW_KEY_D ,
E = GLFW_KEY_E , E = GLFW_KEY_E ,
I = GLFW_KEY_I ,
J = GLFW_KEY_J ,
K = GLFW_KEY_K ,
L = GLFW_KEY_L ,
Q = GLFW_KEY_Q , Q = GLFW_KEY_Q ,
S = GLFW_KEY_S , S = GLFW_KEY_S ,
W = GLFW_KEY_W , W = GLFW_KEY_W ,

View File

@ -29,12 +29,12 @@ namespace DGL
// ID Reference Types // ID Reference Types
class VertexBuffer ; class VertexBuffer ;
class NormalBuffer; class NormalBuffer ;
class Vec3 ; class Vec3 ;
class Matrix ; class Matrix ;
class Shader ; class Shader ;
class ShaderProgram; class ShaderProgram;
class VertexArray ; class VertexArray ;
class ElementBuffer; class ElementBuffer;

View File

@ -63,33 +63,48 @@ namespace DGL
} }
}; };
/*struct Face
{
VecInt Vertexes, UVs, Normals;
};*/
struct Face struct Face
{ {
VecInt Vertexes, uvIndex, Normals; VecInt Vertexes, UVs, Normals;
}; };
struct FaceVertexIndex
{
gUInt Vertex, UV, Normal;
FaceVertexIndex() : Vertex(0), UV(0), Normal(0) {};
FaceVertexIndex(gUInt _vertex, gUInt _uv, gUInt _norm) : Vertex(_vertex), UV(_uv), Normal(_norm) {};
};
using VertexIndexList = Generic::Vector3<FaceVertexIndex>;
// A face primitive is a triangle.
//struct Face
//{
// //FaceVertexIndex Indicies[3];
// gInt Vertex[3], Normal[3], UV[3];
//};
struct FaceGenerator struct FaceGenerator
{ {
using ComponentList = std::vector< gInt>; using ComponentList = std::vector< gUInt>;
ComponentList vertIndexes, uvIndexes, normals; ComponentList vertIndexes, uvIndexes, normals;
sfn AddVertexIndex(gInt _index) sfn AddVertexIndex(gUInt _index)
{ {
vertIndexes.push_back(_index); vertIndexes.push_back(_index);
} }
sfn AddUVIndex(gInt _index) sfn AddUVIndex(gUInt _index)
{ {
uvIndexes.push_back(_index); uvIndexes.push_back(_index);
} }
sfn AddNormalIndex(gInt _index) sfn AddNormalIndex(gUInt _index)
{ {
normals.push_back(_index); normals.push_back(_index);
} }
@ -98,35 +113,33 @@ namespace DGL
{ {
Face generated; Face generated;
if (vertIndexes.size() != 0) for (int index = 0; index < 3; index++)
{ {
for (int index = 0; index < vertIndexes.size(); index++) generated.Vertexes[index] = vertIndexes[index];
{
generated.Vertexes[index] = vertIndexes.at(index);
}
}
if (uvIndexes.size() != 0)
{
for (int index = 0; index < uvIndexes.size(); index++)
{
generated.uvIndex[index] = uvIndexes.at(index);
}
}
if (normals.size() != 0)
{
for (int index = 0; index < normals.size(); index++)
{
generated.Normals[index] = normals.at(index);
}
}
if (uvIndexes.size() == 0) if (uvIndexes.size() > 0)
{ {
generated.uvIndex = VecInt(0, 0, 0); generated.UVs[index] = uvIndexes[index];
} }
if (normals.size() == 0)
{ if (normals.size() > 0)
generated.Normals = VecInt(0, 0, 0); {
generated.Normals[index] = normals[index];
}
/*generated.Vertex[index] = vertIndexes[index];
if (uvIndexes.size() > 0)
{
generated.UV[index] = uvIndexes[index];
}
if (normals.size() > 0)
{
generated.Normal[index] = normals[index];
}*/
} }
return generated; return generated;
@ -225,7 +238,7 @@ namespace DGL
deduce processFace = [&](Ref(stringstream) _faceStream) deduce processFace = [&](Ref(stringstream) _faceStream)
{ {
FaceGenerator faceMade; gInt vertexIndex, textureIndex, normalIndex; FaceGenerator faceMade; gUInt vertexIndex, textureIndex, normalIndex;
while (not _faceStream.eof()) while (not _faceStream.eof())
{ {
@ -325,33 +338,29 @@ namespace DGL
BindVertexArray(VAO); BindVertexArray(VAO);
BindBuffer(EBufferTarget::VertexAttributes, VBO); BindBuffer(EBufferTarget::VertexAttributes, VBO);
BufferData(Address(Verticies[0]), Verticies.size() * sizeof(Vector3), EBufferTarget::VertexAttributes, EBufferUsage::StaticDraw); BufferData(Address(Verticies[0]), Verticies.size() * sizeof(Vector3), EBufferTarget::VertexAttributes, EBufferUsage::StaticDraw);
EnableVertexAttributeArray(0);
FormatVertexAttributes<Vector3>(0, EDataType::Float, ZeroOffset(), 3, EBool::False);
if (VertNormals.size() != 0) if (VertNormals.size() != 0)
{ {
BindBuffer(EBufferTarget::VertexAttributes, NBO); BindBuffer(EBufferTarget::VertexAttributes, NBO);
BufferData(Address(VertNormals[0]), VertNormals.size() * sizeof(Vector3), EBufferTarget::VertexAttributes, EBufferUsage::StaticDraw); BufferData(Address(VertNormals[0]), VertNormals.size() * sizeof(Vector3), EBufferTarget::VertexAttributes, EBufferUsage::StaticDraw);
EnableVertexAttributeArray(1);
FormatVertexAttributes<Vector3>(1, EDataType::Float, ZeroOffset(), 3, EBool::False);
} }
BindBuffer(EBufferTarget::VertexIndices, EBO); BindBuffer(EBufferTarget::VertexIndices, EBO);
BufferData(Address(Faces[0]), Faces.size() * sizeof(Face), EBufferTarget::VertexIndices, EBufferUsage::StaticDraw); BufferData(Address(Faces[0]), Faces.size() * sizeof(Face), EBufferTarget::VertexIndices, EBufferUsage::StaticDraw);
//BufferData(Address(Indicies[0]), Indicies.size() * sizeof(gUInt), EBufferTarget::VertexIndices, EBufferUsage::StaticDraw);
EnableVertexAttributeArray(0);
FormatVertexAttributes<Vector3>(0, EDataType::Float, ZeroOffset(), 3, EBool::False);
/*EnableVertexAttributeArray(1);
FormatVertexAttributes<gInt>(1, EDataType::Float, ZeroOffset(), 3, EBool::False);*/
BindVertexArray(0); BindVertexArray(0);
} }
@ -363,7 +372,7 @@ namespace DGL
gInt Size; GetBufferParameterIV(EBufferTarget::VertexIndices, EBufferParam::Size, Address(Size)); gInt Size; GetBufferParameterIV(EBufferTarget::VertexIndices, EBufferParam::Size, Address(Size));
Size /= sizeof(gFloat); Size /= sizeof(gInt);
DrawElements(EPrimitives::Triangles, Size, EDataType::UnsignedInt, ZeroOffset()); DrawElements(EPrimitives::Triangles, Size, EDataType::UnsignedInt, ZeroOffset());

View File

@ -1,9 +1,10 @@
#pragma once #pragma once
//DGL //DGL
#include "DGL_Enum.hpp"
#include "DGL_FundamentalTypes.hpp" #include "DGL_FundamentalTypes.hpp"
#include "DGL_MiscTypes.hpp" #include "DGL_MiscTypes.hpp"
#include "DGL_Enum.hpp" #include "DGL_Buffers.hpp"
#include "DGL_Space.hpp" #include "DGL_Space.hpp"
@ -384,7 +385,7 @@ namespace DGL
LightColorID = GetUniformVariable(Shader, "LightColor" ); LightColorID = GetUniformVariable(Shader, "LightColor" );
} }
sfn SetupRender(Ref(CoordSpace) _cubeTransform, Ref(Vector3) _objectColor, Ref(Vector3) _lightColor) sfn Use(Ref(CoordSpace) _cubeTransform, Ref(Vector3) _objectColor, Ref(Vector3) _lightColor)
{ {
UseProgramShader(Shader); UseProgramShader(Shader);
@ -392,6 +393,15 @@ namespace DGL
SetUniformVariable_Vector3(ObjectColorID, 1, Address(_objectColor[0])); SetUniformVariable_Vector3(ObjectColorID, 1, Address(_objectColor[0]));
SetUniformVariable_Vector3(LightColorID , 1, Address(_lightColor [0])); SetUniformVariable_Vector3(LightColorID , 1, Address(_lightColor [0]));
EnableVertexAttributeArray(0);
EnableVertexAttributeArray(1);
}
sfn Stop()
{
DisableVertexAttributeArray(0);
DisableVertexAttributeArray(1);
} }
} }
@ -413,6 +423,15 @@ namespace DGL
UseProgramShader(Shader); UseProgramShader(Shader);
SetUniformVariable_MVA(ScreenSpaceVarID, 1, EBool::False, Address(_lampTransform[0][0])); SetUniformVariable_MVA(ScreenSpaceVarID, 1, EBool::False, Address(_lampTransform[0][0]));
EnableVertexAttributeArray(0);
EnableVertexAttributeArray(1);
}
sfn Stop()
{
DisableVertexAttributeArray(0);
DisableVertexAttributeArray(1);
} }
} }
@ -420,9 +439,9 @@ namespace DGL
{ {
ID<ShaderProgram> ShaderID; ID<ShaderProgram> ShaderID;
ID<CoordSpace> ModelScreenSpaceID, ModelSpaceID; ID<CoordSpace> ModelSpaceID, InverseModelSpaceID, ViewportID, ProjectionID;
ID<Vec3> LightPositionID; ID<Vec3> LightPositionID, ViewPositionID;
ID<Vec3> ObjectColorID, LightColorID; ID<Vec3> ObjectColorID, LightColorID;
@ -430,32 +449,51 @@ namespace DGL
{ {
ShaderID = LoadShaders("PhongShader.vert", "PhongShader.frag"); ShaderID = LoadShaders("PhongShader.vert", "PhongShader.frag");
ModelScreenSpaceID = GetUniformVariable(ShaderID, "ModelScreenSpace"); InverseModelSpaceID = GetUniformVariable(ShaderID, "InverseModelSpace");
ModelSpaceID = GetUniformVariable(ShaderID, "ModelSpace" ); ModelSpaceID = GetUniformVariable(ShaderID, "ModelSpace" );
ProjectionID = GetUniformVariable(ShaderID, "Projection" );
ViewportID = GetUniformVariable(ShaderID, "Viewport" );
ObjectColorID = GetUniformVariable(ShaderID, "ObjectColor" ); ObjectColorID = GetUniformVariable(ShaderID, "ObjectColor" );
LightColorID = GetUniformVariable(ShaderID, "LightColor" ); LightColorID = GetUniformVariable(ShaderID, "LightColor" );
LightPositionID = GetUniformVariable(ShaderID, "LightPositionID"); LightPositionID = GetUniformVariable(ShaderID, "LightPosition");
ViewPositionID = GetUniformVariable(ShaderID, "ViewPosition" );
} }
sfn SetupRender sfn SetupRender
( (
Ref(CoordSpace) _screenSapceTransform, Ref(CoordSpace) _projection ,
Ref(CoordSpace) _viewport ,
Ref(CoordSpace) _objectTransform , Ref(CoordSpace) _objectTransform ,
Ref(Vector3 ) _objectColor , Ref(Vector3 ) _objectColor ,
Ref(Vector3 ) _lightPosition , Ref(Vector3 ) _lightPosition ,
Ref(Vector3 ) _lightColor Ref(Vector3 ) _lightColor ,
Ref(Vector3 ) _viewPosition
) )
{ {
CoordSpace inverseTransform = Inverse(_objectTransform);
UseProgramShader(ShaderID); UseProgramShader(ShaderID);
SetUniformVariable_MVA(ModelScreenSpaceID, 1, EBool::False, Address(_screenSapceTransform[0][0])); SetUniformVariable_MVA(InverseModelSpaceID, 1, EBool::False, Address(inverseTransform[0][0]));
SetUniformVariable_MVA(ModelSpaceID , 1, EBool::False, Address(_objectTransform [0][0])); SetUniformVariable_MVA(ModelSpaceID , 1, EBool::False, Address(_objectTransform[0][0]));
SetUniformVariable_MVA(ProjectionID , 1, EBool::False, Address(_projection [0][0]));
SetUniformVariable_MVA(ViewportID , 1, EBool::False, Address(_viewport [0][0]));
SetUniformVariable_Vector3(LightPositionID, 1, Address(_lightPosition[0])); SetUniformVariable_Vector3(LightPositionID, 1, Address(_lightPosition[0]));
SetUniformVariable_Vector3(ObjectColorID, 1, Address(_objectColor[0])); SetUniformVariable_Vector3(ObjectColorID , 1, Address(_objectColor [0]));
SetUniformVariable_Vector3(LightColorID , 1, Address(_lightColor [0])); SetUniformVariable_Vector3(LightColorID , 1, Address(_lightColor [0]));
SetUniformVariable_Vector3(ViewPositionID, 1, Address(_viewPosition[0]));
EnableVertexAttributeArray(0);
EnableVertexAttributeArray(1);
}
sfn Stop()
{
DisableVertexAttributeArray(1);
DisableVertexAttributeArray(0);
} }
} }

View File

@ -60,6 +60,11 @@ namespace DGL
return glm::normalize(_vectorSpecified); return glm::normalize(_vectorSpecified);
} }
sfn Inverse(const Matrix4x4 _matrix)
{
return glm::inverse(_matrix);
}
sfn Rotate(const Matrix4x4 _matrix, gFloat _rotationAngleAmount, Vector3 _axis) -> Matrix4x4 sfn Rotate(const Matrix4x4 _matrix, gFloat _rotationAngleAmount, Vector3 _axis) -> Matrix4x4
{ {
return glm::rotate(_matrix, _rotationAngleAmount, _axis); return glm::rotate(_matrix, _rotationAngleAmount, _axis);

View File

@ -88,6 +88,8 @@ namespace Execution
double CursorX, CursorY; // Cursor axis position on the window. double CursorX, CursorY; // Cursor axis position on the window.
bool CursorOff = true;
gFloat CamMoveSpeed = 8.0f, // Rate at which the camera should move. gFloat CamMoveSpeed = 8.0f, // Rate at which the camera should move.
CamRotationSpeed = 27.0f ; // Rate at which the camera should rotate. CamRotationSpeed = 27.0f ; // Rate at which the camera should rotate.
@ -199,7 +201,10 @@ namespace Execution
_inputProcedure(DefaultWindow); _inputProcedure(DefaultWindow);
ResetCursor(DefaultWindow, ScreenCenterWidth, ScreenCenterHeight); if (CursorOff)
{
ResetCursor(DefaultWindow, ScreenCenterWidth, ScreenCenterHeight);
}
InputDelta = 0.0; InputDelta = 0.0;
} }
@ -254,7 +259,7 @@ namespace Execution
} }
deduce ModifyCamSpeedDelegate = Delegate<decltype(ModifyCamSpeed)>(ModifyCamSpeed); deduce ModifyCamSpeedDelegate = Delegate<decltype(ModifyCamSpeed)>(ModifyCamSpeed);
deduce SetPolyModeDelegate = Delegate<decltype(SetPolygonMode)>(SetPolygonMode); deduce SetPolyModeDelegate = Delegate<decltype(SetPolygonMode)>(SetPolygonMode);
sfn InputProcedure(ptr<Window> _currentWindowContext) sfn InputProcedure(ptr<Window> _currentWindowContext)
{ {
@ -269,11 +274,15 @@ namespace Execution
{ {
ActionsToComplete.AddToQueue(delegate , _currentWindowContext, EMouseMode::Cursor , ECursorMode::Disable); ActionsToComplete.AddToQueue(delegate , _currentWindowContext, EMouseMode::Cursor , ECursorMode::Disable);
ActionsToComplete.AddToQueue(delegateRaw, _currentWindowContext, EMouseMode::RawMouse, EBool ::True ); ActionsToComplete.AddToQueue(delegateRaw, _currentWindowContext, EMouseMode::RawMouse, EBool ::True );
CursorOff = true;
} }
else else
{ {
ActionsToComplete.AddToQueue(delegate , _currentWindowContext, EMouseMode::Cursor , ECursorMode::Normal); ActionsToComplete.AddToQueue(delegate , _currentWindowContext, EMouseMode::Cursor , ECursorMode::Normal);
ActionsToComplete.AddToQueue(delegateRaw, _currentWindowContext, EMouseMode::RawMouse, EBool ::False ); ActionsToComplete.AddToQueue(delegateRaw, _currentWindowContext, EMouseMode::RawMouse, EBool ::False );
CursorOff = false;
} }
} }
@ -297,14 +306,17 @@ namespace Execution
ActionsToComplete.AddToQueue(SetPolyModeDelegate, DGL::EFace::Front_and_Back, DGL::ERenderMode::Fill); ActionsToComplete.AddToQueue(SetPolyModeDelegate, DGL::EFace::Front_and_Back, DGL::ERenderMode::Fill);
} }
if (CursorX != 0) if (CursorOff)
{ {
ActionsToComplete.AddToQueue(RotateCamDelegate, ERotationAxis::Yaw, CursorX * CamRotationSpeed, PhysicsDelta); if (CursorX != 0)
} {
ActionsToComplete.AddToQueue(RotateCamDelegate, ERotationAxis::Yaw, CursorX * CamRotationSpeed, PhysicsDelta);
}
if (CursorY != 0) if (CursorY != 0)
{ {
ActionsToComplete.AddToQueue(RotateCamDelegate, ERotationAxis::Pitch, CursorY * CamRotationSpeed, PhysicsDelta); ActionsToComplete.AddToQueue(RotateCamDelegate, ERotationAxis::Pitch, CursorY * CamRotationSpeed, PhysicsDelta);
}
} }
if (KeyPressed(_currentWindowContext, EKeyCodes::E)) if (KeyPressed(_currentWindowContext, EKeyCodes::E))
@ -336,6 +348,26 @@ namespace Execution
{ {
ActionsToComplete.AddToQueue(MoveCamDelegate, EDirection::Backward, CamMoveSpeed, PhysicsDelta); ActionsToComplete.AddToQueue(MoveCamDelegate, EDirection::Backward, CamMoveSpeed, PhysicsDelta);
} }
if (KeyPressed(_currentWindowContext, EKeyCodes::I))
{
ActionsToComplete.AddToQueue(RotateCamDelegate, ERotationAxis::Pitch, -6.0f * CamRotationSpeed, PhysicsDelta);
}
if (KeyPressed(_currentWindowContext, EKeyCodes::K))
{
ActionsToComplete.AddToQueue(RotateCamDelegate, ERotationAxis::Pitch, 6.0f * CamRotationSpeed, PhysicsDelta);
}
if (KeyPressed(_currentWindowContext, EKeyCodes::J))
{
ActionsToComplete.AddToQueue(RotateCamDelegate, ERotationAxis::Yaw, -6.0f * CamRotationSpeed, PhysicsDelta);
}
if (KeyPressed(_currentWindowContext, EKeyCodes::L))
{
ActionsToComplete.AddToQueue(RotateCamDelegate, ERotationAxis::Yaw, 6.0f * CamRotationSpeed, PhysicsDelta);
}
} }
@ -360,6 +392,8 @@ namespace Execution
//RAW_RotateLitCube(PhysicsDelta); //RAW_RotateLitCube(PhysicsDelta);
RAW_LightRotate(PhysicsDelta);
ProperCube::Rotate(PhysicsDelta); ProperCube::Rotate(PhysicsDelta);
UpdateThisShit(); UpdateThisShit();
@ -371,27 +405,9 @@ namespace Execution
{ {
glfwSetWindowTitle(DefaultWindow, somethingtoupdate.str().c_str()); glfwSetWindowTitle(DefaultWindow, somethingtoupdate.str().c_str());
EnableVertexAttributeArray(VertexAttributeIndex);
EnableVertexAttributeArray(1);
//UseProgramShader(DGL::SS_Transformed::Shader);
//BindVertexArray(VertexArrayObj);
//DrawElements(EPrimitives::Triangles, 6, EDataType::UnsignedInt, ZeroOffset());
RAW_RenderLight(WorldCamera.Perspective, WorldCamera.Viewport); RAW_RenderLight(WorldCamera.Perspective, WorldCamera.Viewport);
ProperCube::Render(WorldCamera.Perspective, WorldCamera.Viewport, WorldCamera.Position);
//RAW_RenderLitCube(WorldCamera.Perspective, WorldCamera.Viewport);
ProperCube::Render(WorldCamera.Perspective, WorldCamera.Viewport);
DisableVertexAttributeArray(VertexAttributeIndex);
DisableVertexAttributeArray(1);
} }

View File

@ -3,32 +3,45 @@
out vec4 FragColor; out vec4 FragColor;
//in vec3 FragPosition; in vec3 FragPosition;
//in vec3 Normal ; in vec3 Normal ;
uniform vec3 ObjectColor; uniform vec3 ObjectColor;
//uniform vec3 LightPosition; uniform vec3 LightPosition;
uniform vec3 LightColor ; uniform vec3 LightColor ;
uniform vec3 ViewPosition;
void main() void main()
{ {
float AmbientStrength = 0.1; float AmbientStrength = 0.1;
float SpecularStrength = 0.5;
vec3 ambient = AmbientStrength * LightColor ; vec3 ambient = AmbientStrength * LightColor ;
// vec3 Direction = normalize(Normal ); vec3 Direction = normalize(Normal );
// vec3 LightDirection = normalize(LightPosition - FragPosition); vec3 LightDirection = normalize(LightPosition - FragPosition);
//
// float DiffuseStrength = max(dot(Normal, LightDirection), 0.0);
// vec3 diffuse = DiffuseStrength * LightColor ;
vec3 result = (ambient ) * ObjectColor; float DiffuseStrength = max(dot(Normal, LightDirection), 0.0);
vec3 diffuse = DiffuseStrength * LightColor ;
vec3 ViewDirection = normalize(ViewPosition - FragPosition);
vec3 ReflectionDirection = reflect(-LightDirection, Normal);
float Spec = pow(max(dot(ViewDirection, ReflectionDirection), 0.0), 32);
vec3 specular = SpecularStrength * Spec * LightColor;
vec3 result = (ambient + diffuse + specular) * ObjectColor;
FragColor = vec4(result, 1.0); FragColor = vec4(result, 1.0);
} }

View File

@ -1,26 +1,25 @@
#version 330 core #version 330 core
layout (location = 0) in vec3 VertPosition; layout (location = 0) in vec3 VertPosition;
//layout (location = 1) in vec3 VertNormal ; layout (location = 1) in vec3 VertNormal ;
out vec3 FragPosition;
out vec3 Normal ;
//out vec3 FragPosition;
//out vec3 Normal ;
uniform mat4 ModelScreenSpace ;
uniform mat4 ModelSpace ; uniform mat4 ModelSpace ;
uniform mat4 Viewport ;
uniform mat4 Projection ;
uniform mat4 InverseModelSpace; uniform mat4 InverseModelSpace;
void main() void main()
{ {
gl_Position = ModelScreenSpace * vec4(VertPosition, 1.0); FragPosition = vec3(ModelSpace * vec4(VertPosition, 1.0));
// FragPosition = vec3(ModelSpace * vec4(VertPosition, 1.0)); Normal = mat3(transpose(InverseModelSpace)) * VertNormal;
// Normal = VertNormal;
// Normal = mat3(transpose(InverseModelSpace)); gl_Position = Projection * Viewport * ModelSpace * vec4(FragPosition, 1.0);
} }

View File

@ -370,7 +370,7 @@ sfn RAW_RenderCube()
LinearColor CoralColor(1.0f, 0.5f, 0.31f, 1.0f); LinearColor CoralColor(1.0f, 0.5f, 0.31f, 1.0f);
LinearColor LightColor(1.0f, 1.0f, 1.0f , 1.0f); LinearColor LightColor(1.0f, 1.0f, 1.0f , 1.0f);
Vector3 LightPosition(1.2f, 1.0f, 2.0f); Vector3 LightPosition(1.2f, 2.0f, 3.0f);
Vector3 LightScale = Vector3(0.2f); Vector3 LightScale = Vector3(0.2f);
@ -397,6 +397,40 @@ sfn RAW_MakeLightVAO()
LightTransform = DGL::Scale (LightTransform, LightScale ); LightTransform = DGL::Scale (LightTransform, LightScale );
} }
sfn RAW_LightRotate(gFloat _delta)
{
//LightTransform = DGL::Rotate(LightTransform, 0.1f, Vector3(1, 0, 0));
static bool test = true;
LightTransform = CoordSpace(1.0f);
if (test)
{
LightPosition.x += 0.001f + _delta;
if (LightPosition.x > 4)
{
test = false;
}
LightTransform = DGL::Translate(LightTransform, LightPosition);
LightTransform = DGL::Scale (LightTransform, LightScale );
}
else
{
LightPosition.x -= 0.001f + _delta;
if (LightPosition.x < -4)
{
test = true;
}
LightTransform = DGL::Translate(LightTransform, LightPosition);
LightTransform = DGL::Scale (LightTransform, LightScale );
}
}
using DGL::GetBufferParameterIV; using DGL::GetBufferParameterIV;
@ -409,6 +443,8 @@ sfn RAW_RenderLight(CoordSpace _projection, CoordSpace _viewport)
DGL::BindVertexArray(LightVAO); DGL::BindVertexArray(LightVAO);
RAW_RenderCube(); RAW_RenderCube();
DGL::Basic_LampShader::Stop();
} }
@ -448,7 +484,7 @@ sfn RAW_RenderLitCube(CoordSpace _projection, CoordSpace _viewport)
Vector3 lightColor = LightColor.Vector(); Vector3 lightColor = LightColor.Vector();
DGL::PhongShader::SetupRender(screenspaceTransform, LitCubeTransform, CubeColor, LightPosition, lightColor); //DGL::PhongShader::SetupRender(screenspaceTransform, LitCubeTransform, CubeColor, LightPosition, lightColor);
DGL::BindVertexArray(LitCubeVAO); DGL::BindVertexArray(LitCubeVAO);
@ -459,7 +495,7 @@ sfn RAW_RenderLitCube(CoordSpace _projection, CoordSpace _viewport)
namespace ProperCube namespace ProperCube
{ {
Model model("cube.obj"); Model model("Cube.obj");
Vector3 position = Vector3(0.0f); Vector3 position = Vector3(0.0f);
@ -469,20 +505,33 @@ namespace ProperCube
sfn Rotate(gFloat _delta) sfn Rotate(gFloat _delta)
{ {
transform = DGL::Rotate(transform, 3.5f * _delta, Vector3(0, 1, 0)); //transform = DGL::Rotate(transform, 1.5f * _delta, Vector3(0, 1, 0));
} }
sfn Render(Ref(CoordSpace) _projection, Ref(CoordSpace) _viewport) sfn Render(Ref(CoordSpace) _projection, Ref(CoordSpace) _viewport, Ref(Vector3) _cameraPosition)
{ {
CoordSpace screenspaceTransform = _projection * _viewport * transform; CoordSpace screenspaceTransform = _projection * _viewport * transform;
Vector3 lightColor = LightColor.Vector(); Vector3 lightColor = LightColor.Vector();
//DGL::PhongShader::SetupRender(screenspaceTransform, transform, color, LightPosition, lightColor); DGL::PhongShader::SetupRender
(
_projection ,
_viewport ,
transform ,
color ,
LightPosition ,
lightColor ,
_cameraPosition
);
DGL::Basic_LightingShader::SetupRender(screenspaceTransform, color, lightColor); //DGL::Basic_LightingShader::Use(screenspaceTransform, color, lightColor);
model.Render(); model.Render();
DGL::Basic_LightingShader::Stop();
DGL::PhongShader::Stop();
} }
sfn Setup() sfn Setup()
@ -496,9 +545,3 @@ namespace ProperCube
//transform = DGL::Scale(transform, Vector3(0.01)); //transform = DGL::Scale(transform, Vector3(0.01));
} }
} }