4

这里是输出: http: //i43.tinypic.com/9a5zyx.png 如果事情按照我想要的方式工作,左边正方形的颜色将匹配右边正方形的颜色。感谢有关该主题的任何帮助

#include <gl/glfw.h>

const char* 标题="测试";
胶粘剂img;
无符号整数 w=64,h=64;
整数屏幕宽度,屏幕高度;

无效启用2d()
{
    glMatrixMode(GL_PROJECTION);
    glPushMatrix();
    glLoadIdentity();

    glViewport(0,0,screenwidth,screenheight);
    glOrtho(0,screenwidth,screenheight,0,-1,1);

    glMatrixMode(GL_MODELVIEW);
    glPushMatrix();
    glLoadIdentity();

    glPushAttrib(GL_DEPTH_BUFFER_BIT|GL_LIGHTING_BIT);
    glDisable(GL_DEPTH_TEST);
    glDisable(GL_LIGHTING);

    glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
}

无效的drawmytex()
{
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D,img);
    glBegin(GL_QUADS);
    glTexCoord2i(0,0);
    glVertex2i(0,0);
    glTexCoord2i(1,0);
    glVertex2i(w,0);
    glTexCoord2i(1,1);
    glVertex2i(w,h);
    glTexCoord2i(0,1);
    glVertex2i(0,h);
    glEnd();
    glDisable(GL_TEXTURE_2D);
}

无效drawquad(int x,int y)
{
    glBegin(GL_QUADS);
    glColor3f(0.0f,1.0f,0.0f);
    glVertex2i(x,y);
    glColor3f(1.0f,0.0f,1.0f);
    glVertex2i(x+w,y);
    glColor3f(0.0f,1.0f,1.0f);
    glVertex2i(x+w,y+h);
    glColor3f(0.0f,0.0f,1.0f);
    glVertex2i(x,y+h);
    glEnd();
}

无效的 texcopy()
{
    如果(!glIsTexture(img))
        glDeleteTextures(1,&img);
    glGenTextures(1,&img);
    glBindTexture(GL_TEXTURE_2D,img);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,w,h,0,GL_RGBA,GL_UNSIGNED_BYTE,0);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0,w,h,0,-1,1);
    glViewport(0,0,w,h);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    绘制四边形(0,0);

    glBindTexture(GL_TEXTURE_2D,img);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    //glCopyTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,0,0,w,h,0);
    glCopyTexSubImage2D(GL_TEXTURE_2D,0,0,0,0,0,w,h);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0,screenwidth,screenheight,0,-1,1);
    glViewport(0,0,screenwidth,screenheight);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

主函数()
{
    整数运行;

    glfwInit();

    运行=glfwOpenWindow(640,480,0,0,0,0,0,0,GLFW_WINDOW);
    如果(!运​​行)
    {
        glfw终止();
        返回0;
    }


    glfwSetWindowTitle(title);
    glfwEnable(GLFW_STICKY_KEYS);
    glfwGetWindowSize(&screenwidth,&screenheight);

    enable2d();
    纺织品();

    做
    {
        glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
        glLoadIdentity();

        drawquad(64,0);
        drawmytex();

        glfwSwapBuffers();
        运行=!glfwGetKey(GLFW_KEY_ESC)&&glfwGetWindowParam(GLFW_OPENED);
        GLenum 错误=glGetError();
        如果(错误!=GL_NO_ERROR)运行=错误;
        glfwSleep(.017);
    }
    而(运行==1);

    glDeleteTextures(1,&img);

    glfw终止();
    返回运行;
}
4

1 回答 1

2

尝试添加 'glColor3f(1,1,1);' 在你的“drawmytex”函数中。我怀疑您的纹理是用当前颜色调制(相乘)的,如果是这样,问题不在于纹理副本,而在于您显示它的方式。

于 2009-03-13T17:32:08.017 回答