Final Changes before submission
This commit is contained in:
@ -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>
|
||||||
|
21
Model.cpp
21
Model.cpp
@ -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());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
2
Model.h
2
Model.h
@ -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;
|
||||||
|
990
Rasteriser.cpp
990
Rasteriser.cpp
File diff suppressed because it is too large
Load Diff
28
Rasteriser.h
28
Rasteriser.h
@ -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];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
35
Vertex.cpp
35
Vertex.cpp
@ -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;
|
||||||
|
7
Vertex.h
7
Vertex.h
@ -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;
|
||||||
|
Reference in New Issue
Block a user