2013-01-06 30 views
5

Trong OpenGL 2.1+, chúng ta có cần gọi glEnable(GL_TEXTURE) trước khi sử dụng họa tiết không? Và nếu chúng ta gặp rắc rối với kết cấu, điều gì có thể gây ra?Có cần gọi glEnable (GL_TEXTURE) trước khi sử dụng kết cấu trong OpenGL 2.1 không?

Cập nhật:

Tôi đang sử dụng OpenGL 2.1 cho máy tính để bàn và bước của tôi là:

  1. tải bmp 24 bit hình ảnh (tôi đã kiểm tra trong gDebuger và nó hiển thị kết cấu của tôi ok, vì vậy Tôi chắc rằng quy trình tải hình ảnh của tôi không thành công).

  2. Gọi một số chức năng OpenGL trong init() procedude:

    glGenTextures(1, &texture_id); 
    glBindTexture(GL_TEXTURE_2D, texture_id); 
    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_RGB, image_width, image_height, 0, GL_BGR, GL_UNSIGNED_BYTE, image_data); 
    
  3. Và trong draw_scene():

    glUseProgram(program); 
    glActiveTexture(GL_TEXTURE0); 
    glBindTexture(GL_TEXTURE_2D, texture_id); 
    glUniform1i(uniform_texture, 0); 
    ... 
    
  4. Vertex Shader (phiên bản 120):

    attribute vec3 vPos; 
    attribute vec2 vTexCoord; 
    
    uniform mat4 MV; 
    uniform mat4 Projection; 
    
    varying vec2 fragTexCoord; 
    
    void main() 
    { 
        fragTexCoord = vTexCoord; 
        gl_Position = Projection * MV * vPos; 
    } 
    
  5. Trình đổ bóng phân đoạn:

    uniform sampler2D my_texture; 
    varying vec2 fragTexCoord; 
    
    void main() 
    { 
        gl_FragColor = texture2D(my_texture, fragTexCoord); 
    } 
    
+1

Nếu bạn đang sử dụng trình đổ bóng, thì tôi nghi ngờ 'glEnable (GL_TEXTURE)' có tác dụng gì. Bạn có thể cung cấp cho chúng tôi ảnh chụp màn hình về những gì bạn đang nhận được hoặc mô tả vấn đề của đầu ra bạn có chi tiết hơn không? – TheAmateurProgrammer

+0

Tôi nghĩ rằng một số thông số lỗi của tôi, tôi đã xóa và viết lại tất cả các mã kết cấu và bây giờ nó hoạt động! Bất cứ ai có thể giải thích cho tôi những gì differents bettwen 'GL_RGBA8',' GL_RGBA', ... trong 'internalFormat'? Nếu tôi sử dụng 'GL_RGB' trong' internalFormat' thì tôi có thể truy cập phần tử alpha trong trình đổ bóng phân đoạn như: 'texture2D (myTexture, texCoord) .a'? –

Trả lời

3

Nếu bạn sử dụng shaders GLSL trong OpenGL 2.1 sau đó cuộc gọi đến glEnable(GL_TEXTURE_*) không có ý nghĩa. Bạn áp dụng texture trong shader fragment của bạn.

Nếu bạn định chuyển sang hồ sơ lõi OpenGL 3.x, hãy nhớ rằng glEnable(GL_TEXTURE_*) không được dùng nữa.

Các vấn đề liên quan