Tôi sẽ cố gắng giải thích vấn đề của mình bằng hình ảnh. Vì vậy, đây là một kết cấu thử nghiệm Tôi đang sử dụng cho các ứng dụng OpenGL của tôi:Kết cấu không hiển thị chính xác - có thể tọa độ không đúng OpenGL, C++
Như bạn thấy, có một 2-pixel rộng đường viền xung quanh hình ảnh với màu sắc khác nhau cho tôi để có thể nhìn thấy nếu tọa độ được đặt đúng trong ứng dụng của tôi.
Tôi đang sử dụng mẫu 9 ô nên tôi vẽ 9 quad với tọa độ kết cấu cụ thể. Tại tất cả mọi thứ từ cái nhìn đầu tiên hoạt động tốt, nhưng có một vấn đề nhỏ với hiển thị một kết cấu:
Trong bức ảnh tôi đánh dấu nơi là quad đầu tiên, và đâu là một giây. Như bạn có thể thấy, cái đầu tiên được hiển thị chính xác, nhưng cái thứ hai sẽ chuyển từ màu sắc của quad đầu tiên sang màu riêng của nó, nhưng nó sẽ bắt đầu với màu xanh lá cây và màu hồng tinh khiết. Vì vậy, tôi đoán đó là một vấn đề với tọa độ kết cấu.
Đây là cách thức chúng được thiết lập:
// Bottom left quad [1st quad]
glBegin(GL_QUADS);
// Bottom left
glTexCoord2f(0.0f, 1.0);
glVertex2i(pos.x, pos.y + height);
// Top left
glTexCoord2f(0.0f, (GLfloat)1.0 - maxTexCoordBorderY);
glVertex2i(pos.x, pos.y + height - m_borderWidth);
// Top right
glTexCoord2f(maxTexCoordBorderX, (GLfloat)1.0 - maxTexCoordBorderY);
glVertex2i(pos.x + m_borderWidth, pos.y + height - m_borderWidth);
// Bottom right
glTexCoord2f(maxTexCoordBorderX, 1.0);
glVertex2i(pos.x + m_borderWidth, pos.y + height);
glEnd();
// Bottom middle quad [2nd quad]
glBegin(GL_QUADS);
// Bottom left
glTexCoord2f(maxTexCoordBorderX, 1.0);
glVertex2i(pos.x + m_borderWidth, pos.y + height);
// Top left
glTexCoord2f(maxTexCoordBorderX, (GLfloat)1.0 - maxTexCoordBorderY);
glVertex2i(pos.x + m_borderWidth, pos.y + height - m_borderWidth);
// Top right
glTexCoord2f((GLfloat)1.0 - maxTexCoordBorderX, (GLfloat)1.0 - maxTexCoordBorderY);
glVertex2i(pos.x + width - m_borderWidth, pos.y + height - m_borderWidth);
// Bottom right
glTexCoord2f((GLfloat)1.0 - maxTexCoordBorderX, 1.0);
glVertex2i(pos.x + width - m_borderWidth, pos.y + height);
glEnd();
Bạn có thể thấy rằng tôi đang sử dụng maxTexCoordBorderX
biến mà được tính dựa trên kích thước biên giới và hình ảnh. chiều rộng hình ảnh là 32 và chiều rộng biên giới là 2.
maxTexCoordBorderX
= 2/32 = 0,0625
thể ai vui lòng giúp đỡ trong việc tìm ra nơi mà vấn đề là?
Cảm ơn bạn đã trả lời Jason, nhưng bạn có thể giải thích cho tôi những gì bạn đã có nghĩa là bằng cách lấy mẫu trên các trung tâm Texel? –
Tôi đã cập nhật với sơ đồ thô. – JasonD
Cảm ơn Jason, nó đã giải quyết được vấn đề của tôi! –