Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java openGL纹理绑定拉伸和扭曲_Java_Opengl_Textures - Fatal编程技术网

Java openGL纹理绑定拉伸和扭曲

Java openGL纹理绑定拉伸和扭曲,java,opengl,textures,Java,Opengl,Textures,我正在尝试将纹理绑定到多边形像素完美(绘制纹理的一部分,但不比多边形本身大) 例如(编辑:图片中的多边形不是四边形) 我的代码如下 //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 drawRect

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

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

我的代码如下

//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);

问题是纹理坐标被标准化为[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();
}

宽度是图像宽度,高度是图像高度?@JohnM这取决于你如何设置渲染,可能是的。我在我的OP中预装了一些代码。你是说这个吗?关于设置rendering@JohnM是的,特克斯宽度和高度。