Tôi đang cố gắng đặt hình nền của cửa sổ OpenGL bằng cách tạo một hình tứ giác trên ma trận chiếu trực giao và thêm kết cấu vào đó. Tôi cũng đang sử dụng bộ công cụ GLUT trong ứng dụng của mình.Đặt hình nền của cửa sổ OpenGL
Tuy nhiên, tôi đang gặp một số sự cố. Dưới đây là ảnh chụp màn hình minh họa vấn đề: hình ảnh là màu xám và nó lặp lại trên x và y, mặc dù kích thước kết cấu được thiết lập giống như quad.
Đó là những gì tôi đang cố gắng để đạt được:
Và đó là những gì tôi nhận được:
Mã cho rendering và kết cấu tải trông như thế này:
void orthogonalStart (void) {
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
gluOrtho2D(0, w1, 0, h1);
glScalef(1, -1, 1);
glTranslatef(0, -h1, 0);
glMatrixMode(GL_MODELVIEW);
}
void orthogonalEnd (void) {
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
}
GLuint LoadTexture(const char * filename, int width, int height)
{
GLuint texture;
unsigned char * data;
FILE * file;
//The following code will read in our RAW file
file = fopen(filename, "rb");
if (file == NULL) return 0;
data = (unsigned char *)malloc(width * height * 3);
fread(data, width * height * 3, 1, file);
fclose(file);
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
//even better quality, but this will do for now.
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_LINEAR);
//to the edge of our shape.
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
//Generate the texture
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0,GL_RGB, GL_UNSIGNED_BYTE, data);
free(data); //free the texture
return texture; //return whether it was successful
}
void FreeTexture(GLuint texture)
{
glDeleteTextures(1, &texture);
}
void background (void) {
glBindTexture(GL_TEXTURE_2D, texture);
orthogonalStart();
glBegin(GL_QUADS);
glTexCoord2d(0.0,0.0); glVertex2f(0, 0);
glTexCoord2d(1.0,0.0); glVertex2f(1024, 0);
glTexCoord2d(1.0,1.0); glVertex2f(1024, 1024);
glTexCoord2d(0.0,1.0); glVertex2f(0, 1024);
glEnd();
orthogonalEnd();
}
void display (void) {
glClearColor (1.0,0.0,0.0,1.0);
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glEnable(GL_TEXTURE_2D);
background();
gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glutSwapBuffers();
}
Để chuyển đổi kết cấu từ png sang định dạng Raw, tôi sử dụng photoshop, vì vậy tôi nghĩ hình ảnh màu xám có thể là do chuyển đổi.
Lưu ý: Tôi vừa bắt đầu học mở, vì vậy đây có thể không phải là cách tiếp cận tốt nhất. Xin vui lòng cho tôi biết nếu có một cách tốt hơn
Chỉnh sửa: Hình ảnh có để ở trên một nơi và không rescalse
Side lưu ý: Tôi nghĩ bạn có nghĩa là glTexCoord2f ("d" là viết tắt của "kép", không "kích thước"). –
@MarceloCantos Phải, nhưng nó không nên tạo nên sự khác biệt, phải không? – Vitalij
Không, tôi không mong đợi điều này ảnh hưởng đến kết quả. –