Glcopytexsubimage2d가 내 사각형을 올바르게 복사하지 않는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/641542

  •  22-07-2019
  •  | 
  •  

문제

출력은 다음과 같습니다. http://i43.tinypic.com/9a5zyx.png일이 내가 원하는 방식으로 작동한다면 왼쪽 사각형의 색상은 오른쪽 사각형의 색상과 일치합니다. 주제에 대한 도움을 주셔서 감사합니다

#include <gl/glfw.h>

const char* title="test";
GLuint img;
unsigned int w=64,h=64;
int screenwidth,screenheight;

void enable2d()
{
    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);
}

void 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);
}

void 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();
}

void texcopy()
{
    if (!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);
    drawquad(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();
}

int main()
{
    int running;

    glfwInit();

    running=glfwOpenWindow(640,480,0,0,0,0,0,0,GLFW_WINDOW);
    if (!running)
    {
        glfwTerminate();
        return 0;
    }


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

    enable2d();
    texcopy();

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

        drawquad(64,0);
        drawmytex();

        glfwSwapBuffers();
        running=!glfwGetKey(GLFW_KEY_ESC)&&glfwGetWindowParam(GLFW_OPENED);
        GLenum error=glGetError();
        if (error!=GL_NO_ERROR)running=error;
        glfwSleep(.017);
    }
    while (running==1);

    glDeleteTextures(1,&img);

    glfwTerminate();
    return running;
}
도움이 되었습니까?

해결책

'glcolor3f (1,1,1);'추가 해보십시오. 'DrawMyTex'함수에서. 나는 당신의 질감이 현재 색상으로 변조 (곱하기)되었다고 생각합니다. 그렇다면 문제는 텍스처 사본이 아니라 당신이 표시하는 방식입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top