这是输出: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; }
答案 0 :(得分:2)
尝试添加'glColor3f(1,1,1);'在你的'drawmytex'功能。我怀疑你的纹理是用当前颜色调制(乘),如果是这样,问题不是纹理复制,而是显示它的方式。