【问题标题】:openGL texture bind stretching and warpingopenGL 纹理绑定拉伸和变形
【发布时间】:2013-07-04 23:19:58
【问题描述】:

我正在尝试将纹理绑定到完美的多边形像素(绘制纹理的一部分但不大于多边形本身)

例如(编辑:这些是图中的多边形而不是四边形)

我的代码如下

//example usage
// drawRectangle((1D * 100D) + 110D, 5, 0D, 25);
//draws a 100px width, 20px height, 0px from left most screen and 5px from top most screen
public static void drawRectangle(double par1, double par2, double par3, double par4)
    {
        //glRectd(par1, par2, par3, par4);
        glBegin(GL_POLYGON);
        {
            glVertex2d(par1, par2);
            glTexCoord2d(0, 0);
            glVertex2d(par3, par2);
            glTexCoord2d(1, 0);
            glVertex2d(par3, par4);
            glTexCoord2d(1, 1);
            glVertex2d(par1, par4);
            glTexCoord2d(0, 1);
        }
        glEnd();
    }

openGL 启动代码

glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrtho(0, finals.GAME_WIDTH, finals.GAME_HEIGHT, 0, 1, -1);
        glMatrixMode(GL_MODELVIEW);

【问题讨论】:

    标签: java opengl textures


    【解决方案1】:

    问题是纹理坐标被标准化为 [0..1] 范围,您应该根据多边形大小和 tex 大小制作 tex 坐标,如下所示:

    public static void drawRectangle(double par1, double par2, double par3, double par4,
        double width, double height)
    {
        //glRectd(par1, par2, par3, par4);
        glBegin(GL_POLYGON);
        {
            glVertex2d(par1, par2);
            glTexCoord2d(par1/width, par2/height);
            glVertex2d(par3, par2);
            glTexCoord2d(par2/width, par2/height);
            glVertex2d(par3, par4);
            glTexCoord2d(par3/width, par4/height);
            glVertex2d(par1, par4);
            glTexCoord2d(par1/width, par4/height);
        }
        glEnd();
    }
    

    【讨论】:

    • width是图片宽度,height是图片高度?
    • @JohnM 这取决于你如何设置渲染,可能是的。
    • 我在我的 OP 中添加了一些代码,你是这个意思吗?关于设置渲染
    • @JohnM 是的,tex 宽度和高度。
    猜你喜欢
    • 2015-01-28
    • 2014-07-21
    • 2020-01-27
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    相关资源
    最近更新 更多