opengl-dziwne rozciaganie textury

0

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

0

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

0

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

0

Wrzuć może kod?

0

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

0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1