mirror of
https://github.com/TheRedShip/RT_GPU.git
synced 2025-09-27 18:48:36 +02:00
+ | Polygone textured
This commit is contained in:
@ -29,7 +29,7 @@ class ObjParser
|
|||||||
void addFace(std::stringstream &line);
|
void addFace(std::stringstream &line);
|
||||||
long int checkVertexIndex(int index, size_t size);
|
long int checkVertexIndex(int index, size_t size);
|
||||||
void parseMtl(std::stringstream &line, Scene &scene);
|
void parseMtl(std::stringstream &line, Scene &scene);
|
||||||
bool addTriangleFromPolygon(std::vector<glm::vec3> &vertices, int inv);
|
bool addTriangleFromPolygon(std::vector<glm::vec3> &vertices, std::vector<glm::vec2> &textureVertices, int inv);
|
||||||
void addTriangle(glm::vec3 v1, glm::vec3 v2, glm::vec3 v3, std::vector<glm::vec2> textureVertices);
|
void addTriangle(glm::vec3 v1, glm::vec3 v2, glm::vec3 v3, std::vector<glm::vec2> textureVertices);
|
||||||
std::string getFilePath(std::string &file);
|
std::string getFilePath(std::string &file);
|
||||||
int pointInTriangle(glm::vec3 pts[3], std::vector<glm::vec3> vertices, size_t cur);
|
int pointInTriangle(glm::vec3 pts[3], std::vector<glm::vec3> vertices, size_t cur);
|
||||||
|
@ -8,6 +8,6 @@ MAT 255 255 255 0. 0.0 0.0 LAM 0 // tex 1
|
|||||||
|
|
||||||
sp 0 8 0 1.0 1
|
sp 0 8 0 1.0 1
|
||||||
|
|
||||||
OBJ scenes/obj/tails.obj 0 0 0 1
|
OBJ obj/tails.obj 0 0 0 1
|
||||||
# OBJ scenes/obj/Lowpoly_tree_sample.obj 10 0 0
|
# OBJ obj/Lowpoly_tree_sample.obj 10 0 0
|
||||||
OBJ scenes/obj/cat.obj -10 0 0 0.25 90 0 0
|
OBJ obj/cat.obj -10 0 0 0.25 90 0 0
|
||||||
|
@ -98,20 +98,31 @@ int ObjParser::pointInTriangle(glm::vec3 pts[3], std::vector<glm::vec3> vertices
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ObjParser::addTriangleFromPolygon(std::vector<glm::vec3> &vertices, int inv)
|
bool ObjParser::addTriangleFromPolygon(std::vector<glm::vec3> &vertices, std::vector<glm::vec2> &textureVertices, int inv)
|
||||||
{
|
{
|
||||||
glm::vec3 v1, v2, v3;
|
glm::vec3 v1, v2, v3;
|
||||||
|
glm::vec2 vt1, vt2, vt3;
|
||||||
|
|
||||||
float dot;
|
float dot;
|
||||||
|
|
||||||
for (size_t i = 0; i < vertices.size(); i++)
|
for (size_t i = 0; i < vertices.size(); i++)
|
||||||
{
|
{
|
||||||
if(!i)
|
if(!i)
|
||||||
|
{
|
||||||
v1 = vertices.back();
|
v1 = vertices.back();
|
||||||
|
vt1 = textureVertices.back();
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
v1 = vertices[i - 1];
|
v1 = vertices[i - 1];
|
||||||
|
vt1 = textureVertices[i - 1];
|
||||||
|
}
|
||||||
v2 = vertices[i];
|
v2 = vertices[i];
|
||||||
v3 = vertices[(i + 1) % vertices.size()];
|
v3 = vertices[(i + 1) % vertices.size()];
|
||||||
|
|
||||||
|
vt2 = textureVertices[i];
|
||||||
|
vt3 = textureVertices[(i + 1) % textureVertices.size()];
|
||||||
|
|
||||||
if (inv)
|
if (inv)
|
||||||
dot = glm::cross(v2 - v1, v2 - v3).z;
|
dot = glm::cross(v2 - v1, v2 - v3).z;
|
||||||
else
|
else
|
||||||
@ -122,7 +133,15 @@ bool ObjParser::addTriangleFromPolygon(std::vector<glm::vec3> &vertices, int inv
|
|||||||
if(pointInTriangle(triangleVertices, vertices, i))
|
if(pointInTriangle(triangleVertices, vertices, i))
|
||||||
continue;
|
continue;
|
||||||
vertices.erase(vertices.begin() + i);
|
vertices.erase(vertices.begin() + i);
|
||||||
addTriangle(v1, v2, v3, std::vector<glm::vec2>(0));
|
textureVertices.erase(textureVertices.begin() + i);
|
||||||
|
|
||||||
|
|
||||||
|
std::vector<glm::vec2> texture;
|
||||||
|
texture.push_back(vt1);
|
||||||
|
texture.push_back(vt2);
|
||||||
|
texture.push_back(vt3);
|
||||||
|
|
||||||
|
addTriangle(v1, v2, v3, texture);
|
||||||
return(1);
|
return(1);
|
||||||
}
|
}
|
||||||
return(0);
|
return(0);
|
||||||
@ -172,8 +191,8 @@ void ObjParser::addFace(std::stringstream &line)
|
|||||||
throw std::runtime_error("OBJ : face does not have enough vertices");
|
throw std::runtime_error("OBJ : face does not have enough vertices");
|
||||||
|
|
||||||
while(faceVertices.size() > 3)
|
while(faceVertices.size() > 3)
|
||||||
if (!addTriangleFromPolygon(faceVertices, 0))
|
if (!addTriangleFromPolygon(faceVertices, textureVertices, 0))
|
||||||
if(!addTriangleFromPolygon(faceVertices, 1))
|
if(!addTriangleFromPolygon(faceVertices, textureVertices, 1))
|
||||||
return ;
|
return ;
|
||||||
|
|
||||||
if(!line.eof())
|
if(!line.eof())
|
||||||
|
Reference in New Issue
Block a user