próbuję napisać funkcję wyświetlającą obiekty. Mam w nich zapisane współrzędne punktów, współrzędne na texturze,kolor,przezroczystość. Po nałożeniu textury na trapez okazało się, że mam tam 2 trójkąty nie do końca ładnie nałożone... i stąd moje pytanie, czy da się to jakoś zrobić by to się rozciągało poprawnie? od razu muszę powiedzieć, że nie wiem w jakiej kolejności mam punkty ani jaki to kształt
Próbuję odpalić auto. Mam w stacyjce włożone kluczyki, lusterka poustawiane. Po przekręceniu kluczyków okazuje się, że coś nie do końca się odpala. I stąd moje pytanie, czy da się zrobić coś, aby się odpaliło poprawnie?
tl;dr - za mało danych
no nie wiem co mogę jeszcze powiedzieć, po prostu textura nakłada się w niechciane przeze mnie sposób... widziałem rozwiązania ale były one dla gotowych modeli, dla których znamy od razu wszystkie parametry... natomiast ja mam same niewiadome, i chcę wiedzieć jak to się wylicza... pamiętam tyle, że się bawiło z glTexCoords4f
Wrzuć może kod?
funkcja rysująca
void draw(Object object,Camera cam)
{
Point point;
for (unsigned int i=0; i<object.walls.size(); i++)
{
Texture::bind(object.walls[i].tex);
glBegin(GL_POLYGON);
for (unsigned int j=0; j<object.walls[i].points.size(); j++)
{
point=object.walls[i].points[j];
rotate(point,object.rx,object.ry,object.rz);
point.x+=object.x-cam.x;
point.y+=object.y-cam.y;
point.z+=object.z-cam.z;
rotate(point,-cam.rx,-cam.ry,-cam.rz);
glColor4d(point.r,point.g,point.b,point.a);
glTexCoord2d(point.tex_x,point.tex_y);//+(point.tex_x==1 and point.tex_y==1));
glVertex3d(point.x,point.y,point.z);
}
glEnd();
}
}
i definicje:
class Point
{
public:
double tex_x,tex_y;
double x,y,z;
double r,g,b,a;
Point();
Point(const Point & target);
~Point();
};
class Wall
{
public:
Texture * tex;
vector<Point>points;
Wall();
Wall(vector<Point>Points,Texture * Tex);
Wall(const Wall & target);
~Wall();
};
class Object
{
public:
double x,y,z;
double rx,ry,rz;
vector<Wall>walls;
void applytex(Texture * tex);
void applycolor(double r,double g,double b,double a);
Object();
Object(vector<Wall>Walls);
Object(const Object & target);
~Object();
};
class Camera
{
public:
double x,y,z;
double rx,ry,rz;
Camera();
Camera(const Camera & target);
~Camera();
};
i mam do tego jeszcze to
Object generator::model::plane(double planesize)
{
Object returner;
Point point;
point.x=-planesize/2;
point.y=-planesize/2;
returner.walls.push_back(Wall());
point.tex_x=0;
point.tex_y=1;
returner.walls[0].points.push_back(point);
point.x*=-1;
point.tex_x=1;
point.tex_y=1;
returner.walls[0].points.push_back(point);
point.y*=-1;
point.tex_y=0;
point.tex_x=1;
returner.walls[0].points.push_back(point);
point.x*=-1;
point.tex_x=0;
point.tex_y=0;
returner.walls[0].points.push_back(point);
return returner;
}
co daje mi dwadrat
może zapytam inaczej-w przykładach jaki widziałem wykorzystana jest funkcja glTexCoords4f i jako podawane są tam parametry w losowy dla mnie sposób... jak to działa? mówię o przykładzie który jest w jednej z odpowiedzi: http://stackoverflow.com/questions/15242507/perspective-correct-texturing-of-trapezoid-in-opengl-es-2-0