繁体   English   中英

在OpenGL中围绕其中心旋转纹理的问题

[英]issue in rotating texture around its center in OpenGL

我正在尝试围绕纹理的中心旋转纹理,并且已经通过此代码实现了,但是在旋转图像时,图像也会以一定角度显示(因此,在某些角度无法正确看到图像),如所附图片所示,可以帮助我解决这个问题

这是我的代码

    public void onSurfaceChanged(GL10 gl, int width, int height) {
    gl.glViewport(0, 0, width, height);
    gl.glOrthof(0, 320, 0, 480, 0, 1);
    gl.glMatrixMode(GL10.GL_MODELVIEW);
    gl.glLoadIdentity();
    gl.glEnable(GL10.GL_TEXTURE_2D);

}

正方形的顶点是

float vertices[] = {

                -.25f,.25f,0,
                -.25f,-.25f,0,
                .25f,.25f,0,
                .25f,-.25f,0
        };

这是我的绘画方法

public void draw(GL10 gl) {
        gl.glPushMatrix();



        gl.glTranslatef(-.125f, -.125f, 0f);
        gl.glRotatef(r,0, 0,-1 );
        gl.glTranslatef(.125f, .125f, 0);

        // Point to our buffers 
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
        // Set the face rotation
        gl.glFrontFace(GL10.GL_CW);

        // Point to our vertex buffer
        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexbuffer);
        gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, texturebuffer);
        // Draw the vertices as triangle strip
        gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);

        //Disable the client state before leaving
        gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
        gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
        r = r+1;
        gl.glPopMatrix();

    }

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

看来您的纹理坐标可能只是引用了太多的纹理—如果您的代码的某些部分将非2的幂的图像填充为2的幂的纹理大小却没有传递,则可能会发生这种情况相关知识。 因此,您围绕纹理的中心旋转,但是实际图像仅使用纹理角落的一部分。

在您的示例代码中,我看不到任何内容来显示如何加载图像或谁将值放入texturebuffer但这些都是值得研究的领域。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM