Final Changes before submission

This commit is contained in:
IDunnoDev
2025-07-04 17:32:39 +01:00
committed by iDunnoDev
parent eeea920e45
commit ab6deb3cc2
7 changed files with 721 additions and 370 deletions

View File

@ -29,26 +29,26 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries> <UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType> <ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries> <UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset> <PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization> <WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet> <CharacterSet>Unicode</CharacterSet>
</PropertyGroup> </PropertyGroup>

View File

@ -334,11 +334,9 @@ void Model::CalculateVertexNormals()
} }
for (Vertex& currentVertex : _transformedVertices) for (Vertex& currentVertex : _transformedVertices)
{ {
currentVertex.SetNormal(currentVertex.GetNormal() / currentVertex.GetContributeCount());
currentVertex.SetNormal(currentVertex.GetNormal() / currentVertex.GetContributeCount()); currentVertex.NormalizeNormal();
currentVertex.NormalizeNormal();
} }
} }
@ -360,4 +358,17 @@ void Model::Sort()
} }
sort(_polygons.begin(), _polygons.end(), DepthCompare); sort(_polygons.begin(), _polygons.end(), DepthCompare);
}
void Model::CalculateUVPerspective()
{
for (Polygon3D& currentPolygon : _polygons)
{
for (int cpi = 0; cpi < currentPolygon.GetPolygonVertexCount(); cpi++)
{
_transformedVertices[currentPolygon.GetIndex(cpi)].UVCorrect(_uvCoords[currentPolygon.GetUVIndex(cpi)].GetU(), _uvCoords[currentPolygon.GetUVIndex(cpi)].GetV());
}
}
} }

View File

@ -78,6 +78,8 @@ public:
void CalculateVertexNormals(); void CalculateVertexNormals();
void Sort(void); void Sort(void);
void CalculateUVPerspective(void);
private: private:
vector<Polygon3D> _polygons; vector<Polygon3D> _polygons;
vector<Vertex> _vertices; vector<Vertex> _vertices;

File diff suppressed because it is too large Load Diff

View File

@ -2,6 +2,7 @@
#include <vector> #include <vector>
#include <string> #include <string>
#include <tchar.h> #include <tchar.h>
#include <ctime>
#include "Framework.h" #include "Framework.h"
#include "Vector3D.h" #include "Vector3D.h"
#include "Vertex.h" #include "Vertex.h"
@ -25,7 +26,7 @@ public:
void Update(const Bitmap& bitmap); void Update(const Bitmap& bitmap);
void Render(const Bitmap& bitmap); void Render(const Bitmap& bitmap);
void ClearViewport(const Bitmap& bitmap); void ClearViewport(const Bitmap& bitmap);
void DrawString(HDC hDc, int x, int y, LPCTSTR text, COLORREF textColor = 0x00FFFFFF, COLORREF backgroundColor = 0x00000000); void DrawString(HDC hDc, int x, int y, LPCTSTR text, int fontSize = 48, COLORREF textColor = 0x00FFFFFF, COLORREF backgroundColor = 0x00000000);
~Rasteriser(); ~Rasteriser();
@ -58,23 +59,40 @@ public:
void FillGouraudSideTriangle(HDC hDc, const Vertex& v1, const Vertex& v2, const Vertex& v3); void FillGouraudSideTriangle(HDC hDc, const Vertex& v1, const Vertex& v2, const Vertex& v3);
void FillPolygonTextured(HDC hDc, Model& model, vector<Vertex>& verticies); void FillPolygonTextured(HDC hDc, Model& model, vector<Vertex>& verticies);
void FillTexturedSideTriangle(HDC hDc, Model& model, const Vertex& v1, const Vertex& v2, const Vertex& v3, const UVCoord& uv1, const UVCoord& uv2, const UVCoord& uv3); void FillTexturedSideTriangle(HDC hDc, Model& model, const Vertex& v1, const Vertex& v2, const Vertex& v3);
void FillPolygonTexturedA(HDC hDc, Model& model, vector<Vertex>& verticies);
void FillTexturedBottomFlatTriangle(HDC hDc, Model& model, const Vertex& v1, const Vertex& v2, const Vertex& v3);
void FillTexturedTopFlatTriangle(HDC hDc, Model& model, const Vertex& v1, const Vertex& v2, const Vertex& v3);
private: private:
// Vector arrays to hold the scene models, the lights and the cameras.
vector<Model> _sceneModels; vector<Model> _sceneModels;
vector<Light*> _lights; vector<Light*> _lights;
vector<Camera> _cameras; vector<Camera> _cameras;
// Index of the currently viewing camera.
int _currentCamera = 0; int _currentCamera = 0;
// Matrices and Aspect ration for the viewing and perspective transformations.
Matrix _currentPerspectiveMatrix; Matrix _currentPerspectiveMatrix;
Matrix _currentViewMatrix; Matrix _currentViewMatrix;
float _currentAspectRatio = 0.0f; float _currentAspectRatio = 0.0f;
int _rotation = 0;
int _currentDrawMode = 0;
// bool to check if the screen is minimized to stop processing
bool _screenMinimized = false; bool _screenMinimized = false;
string _modelDataLocation = ".//model_data/"; string _modelDataLocation = ".//model_data/";
// timer variables to hold the start time of the showcase, and the current time for
// calculation of where in the showcase we are.
time_t _startTime;
time_t _currentTime;
// an int to store the current state of the showcase.
int _currentState;
int _maxStates;
// An array to store counters for use in.
int _counters[10];
}; };

View File

@ -207,14 +207,19 @@ float Vertex::GetZOriginal() const
return _zOriginal; return _zOriginal;
} }
float Vertex::GetUOverZ() const void Vertex::SetZOriginal(const float value)
{ {
return _uOverZ; _zOriginal = value;
}
float Vertex::GetUOverZ() const
{
return _uOverZ;
} }
void Vertex::SetUOverZ(const float value) void Vertex::SetUOverZ(const float value)
{ {
_uOverZ = value / _zOriginal; _uOverZ = value;
} }
float Vertex::GetVOverZ() const float Vertex::GetVOverZ() const
@ -224,20 +229,27 @@ float Vertex::GetVOverZ() const
void Vertex::SetVOverZ(const float value) void Vertex::SetVOverZ(const float value)
{ {
_vOverZ = value / _zOriginal; _vOverZ = value;
} }
float Vertex::GetZRecip() const float Vertex::GetZRecip() const
{ {
return _zRecip; return _zRecip;
} }
void Vertex::UVCorrect(float u, float v) void Vertex::SetZRecip(const float value)
{ {
_zOriginal = _w; _zRecip = value;
_zRecip = 1 / _zOriginal; }
SetUOverZ(u);
SetVOverZ(v); void Vertex::UVCorrect(float u, float v, bool calcZRecip)
{
SetUOverZ(u / _zOriginal);
SetVOverZ(v / _zOriginal);
if (calcZRecip)
{
SetZRecip(1 / _zOriginal);
}
} }
int Vertex::GetXInt(bool forceRoundUp) const int Vertex::GetXInt(bool forceRoundUp) const
@ -289,7 +301,8 @@ int Vertex::GetWInt(bool forceRoundUp) const
} }
void Vertex::Dehomogenize() void Vertex::Dehomogenize()
{ {
_zOriginal = _w;
_x = _x / _w; _x = _x / _w;
_y = _y / _w; _y = _y / _w;
_z = _z / _w; _z = _z / _w;

View File

@ -45,12 +45,14 @@ public:
void SetUVIndex(const int index); void SetUVIndex(const int index);
float GetZOriginal() const; float GetZOriginal() const;
void SetZOriginal(const float value);
float GetUOverZ() const; float GetUOverZ() const;
void SetUOverZ(const float value); void SetUOverZ(const float value);
float GetVOverZ() const; float GetVOverZ() const;
void SetVOverZ(const float value); void SetVOverZ(const float value);
float GetZRecip() const; float GetZRecip() const;
void UVCorrect(float u, float v); void SetZRecip(const float value);
void UVCorrect(float u, float v, bool calcZRecip = true);
// Accessors for returning the private x, y, z and w values as integeres instead of floats // Accessors for returning the private x, y, z and w values as integeres instead of floats
// the ceil function to round the number up by defaults but using providing a false param will // the ceil function to round the number up by defaults but using providing a false param will
@ -76,6 +78,7 @@ private:
float _z; float _z;
float _w; float _w;
float _zOriginalSet = 0;
float _zOriginal; float _zOriginal;
int _contributeCount; int _contributeCount;