Làm cách nào để tôi vẽ một kết cấu độ phân giải đầy đủ cho một cửa sổ có cùng độ phân giải?


8

Hình ảnh của tôi là 1280x800 và kích thước màn hình của tôi là 1280x800. Nó nên vẽ hoàn hảo. Tôi đang tạo một hình tứ giác kích thước của màn hình và đặt họa tiết cho vừa với hình tứ giác. Nhưng ngay bây giờ, nó vẽ một kết cấu vuông ở góc trên bên trái màn hình của tôi vượt quá tỷ lệ và không đủ lớn.

Tôi không biết tại sao nó không hoạt động, tôi đã thử viết kích thước của họa tiết lớn hơn khi vẽ và nó dường như hoạt động, nhưng tôi không biết tại sao nó không hoạt động khi vẽ trên 1280x800 tứ giác.

Làm cách nào để tạo một quad toàn màn hình?

Đây là cách tôi đang làm:

Đây là OPENGL và mã thiết lập hiển thị của tôi:

    DisplayMode displayMode = null;
    DisplayMode[] modes = Display.getAvailableDisplayModes();

    for (int i = 0; i < modes.length; i++) {
        if (modes[i].getWidth() == World.SCREEN_WIDTH && modes[i].getHeight() == World.SCREEN_HEIGHT && modes[i].isFullscreenCapable()) {
            displayMode = modes[i];
        }
    }

    Display.setDisplayMode(displayMode);
    Display.setFullscreen(false);
    Display.create();

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, World.SCREEN_WIDTH, World.SCREEN_HEIGHT, 0, 1, -1);
    glMatrixMode(GL_MODELVIEW);
    glEnable(GL_TEXTURE_2D);

Đây là mã của tôi để vẽ quad kết cấu:

    background = TextureLoader.getTexture("PNG", new FileInputStream(new File("res/menu/background.png")));

    glBindTexture(GL_TEXTURE_2D, background.getTextureID());
    glPushMatrix();
    glBegin(GL_QUADS);
    glTexCoord2f(0, 0);
    glVertex2f(0, 0); // Upper left

    glTexCoord2f(1, 0);
    glVertex2f(World.SCREEN_WIDTH, 0); // Upper right

    glTexCoord2f(1, 1);
    glVertex2f(World.SCREEN_WIDTH, World.SCREEN_HEIGHT); // Lower right

    glTexCoord2f(0, 1);
    glVertex2f(0, World.SCREEN_HEIGHT); // Lower left
    glEnd();
    glPopMatrix();

Âm thanh như Slick2D tạo ra một kết cấu có kích cỡ bằng hai. Xem slick.ninjacave.com/forum/viewtopic.php?p=26076
msell

@msell Vậy làm cách nào để che màn hình 1280x800 của tôi?
Louis Hồng

2
Mặc dù đây có thể là vấn đề thực sự với bạn, nhưng câu hỏi này có vẻ giống như câu hỏi "gỡ lỗi mã của tôi", không phù hợp để xếp chồng kiểu Q / A trao đổi.
Katu

Trên thực tế không phải vậy, đây là một vấn đề LWJGL thực sự. Tôi đã có câu trả lời cho câu hỏi. Nhưng tôi không thích cách những người có thứ hạng cao đi khắp nơi bỏ phiếu mà không thực sự nhìn vào nội dung @Katu
Louis Hong

1
Kích thước hai chiều không quan trọng vì texcoords được sử dụng sẽ kéo dài hoặc ép kết cấu để lấp đầy màn hình. Nhiều khả năng hơn là ma trận modelview không phải là danh tính - xem câu trả lời của tôi dưới đây.
Maximus Minimus

Câu trả lời:


5

Một nguyên nhân có thể xảy ra là bạn có thể không có danh tính trong ma trận mô hình của bạn khi bạn đến để vẽ hình tứ giác toàn màn hình. Điều này có thể xảy ra nếu bạn vẽ bất cứ thứ gì khác trước bộ tứ.

Tôi lưu ý từ mã thiết lập của bạn rằng bạn chuyển chính xác chế độ ma trận sang GL_MODELVIEW, nhưng sau đó bạn không thực hiện cuộc gọi glLoadIdentity sau khi thực hiện (điều này cũng ổn vì đây là nhận dạng ban đầu, nhưng đó là một thói quen tốt để vào).

Khi vẽ hình tứ giác của bạn, bạn có nó được bao quanh bởi một lệnh gọi glPushMatrix / glPopMatrix. Điều này tự nó không đủ để tạo ra một bản sắc ma trận; từ đặc điểm kỹ thuật :

glPushMatrix đẩy ngăn xếp ma trận hiện tại xuống một, nhân đôi ma trận hiện tại . Đó là, sau một lệnh gọi glPushMatrix, ma trận trên đỉnh của ngăn xếp giống hệt với ma trận bên dưới nó .

(Nhấn mạnh của tôi.)

Nói cách khác, nếu ma trận modelview trước của bạn không phải là danh tính, thì sau khi gọi glPushMatrix, ma trận modelview mới cũng sẽ không phải là danh tính.

Cách khắc phục đơn giản nhất là thêm glLoadIdentity sau cuộc gọi glPushMatrix của bạn.


Wow, điều này rất phức tạp. Làm thế nào để ma trận làm việc?
Louis Hồng

1
Bạn nên tìm kiếm một số tài liệu hướng dẫn cho điều đó - nó rất lạc đề đối với trang web này.
Maximus Minimus
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.