2012-01-22 25 views
5

Tôi gặp vấn đề với trình đổ bóng của mình. Tôi đang cố gắng đặt họa tiết và bóng râm phong trong trò chơi của tôi bằng cách sử dụng glsl nhưng tôi không thể có được bất kỳ hiệu ứng tốt nào.Sử dụng cả hai phong bì và họa tiết trong glsl

Tôi đã tìm kiếm trong một thời gian dài và tôi không thể tìm thấy bất kỳ thông tin nào về cách kết nối và kết nối với nhau, vì vậy tôi đã quyết định viết và hỏi tại đây.

Đây là trò chơi của tôi mà không kết cấu: without texture

và đây là với kết cấu:

with texture

Những gì tôi muốn đạt được là làm cho kết cấu hồng nhạt này làm cho có thể nhìn thấy tốt hơn với vị trí trên trung tâm - giống như không có kết cấu, và cũng sửa chữa những người trên mỗi vertex shading trên máng xối - làm cho nó mỗi pixel shading, tôi không biết những gì là sai bây giờ.

Tôi đã kiểm tra khoảng 10 trình đổ bóng với hiệu ứng đổ bóng phong và tôi cũng có được mỗi điểm ảnh không phải trên mỗi pixel.

Đây là đoạn mã phân đoạn của tôi có thể ai đó có thể nhìn thấy gì đó?

varying vec3 N; 
    varying vec3 v; 
    uniform sampler2D myTexture; 

    varying vec2 vTexCoord;  

    void main (void) 
    { 
     vec4 finalColor = vec4(0.0, 0.0, 0.0, 0.0); 

vec3 L = normalize(gl_LightSource[0].position.xyz - v); 
      vec3 E = normalize(-v); // we are in Eye Coordinates, so EyePos is (0,0,0) 
      vec3 R = normalize(-reflect(L,N)); 

      //calculate Ambient Term: 
      vec4 Iamb = gl_FrontLightProduct[0].ambient;  

      //calculate Diffuse Term: 
      vec4 Idiff = gl_FrontLightProduct[0].diffuse * max(dot(N,L), 0.0);  

      // calculate Specular Term: 
      vec4 Ispec = gl_FrontLightProduct[0].specular 
         * pow(max(dot(R,E),0.0),0.3*gl_FrontMaterial.shininess); 

      finalColor+=Iamb + Idiff + Ispec; 
     // write Total Color: 
     gl_FragColor = gl_FrontLightModelProduct.sceneColor + (texture2D(myTexture, vTexCoord)) + finalColor; 
    } 

và shader

varying vec3 N; 
varying vec3 v; 
varying vec2 vTexCoord; 

void main(void) 
{ 

    v = vec3(gl_ModelViewMatrix * gl_Vertex);  
    N = normalize(gl_NormalMatrix * gl_Normal); 
    vTexCoord = vec2(gl_MultiTexCoord0); 

    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; 


} 

đỉnh của tôi, tôi sẽ rất vui mừng để được giúp đỡ.

CHỈNH SỬA:

đây là cách tôi đặt kết cấu vào bóng đổ. Nó hoạt động tốt (tôi nghĩ) bởi vì tôi có thể chỉnh sửa các giá trị kết cấu trong trình đổ bóng - theo một cách nào đó.

int my_sampler_uniform_location = glGetUniformLocation(brickProg, "myTexture"); 

glActiveTexture(GL_TEXTURE0); 
glBindTexture(GL_TEXTURE_2D, texture); 

glUniform1i(my_sampler_uniform_location,0); 
CUTIL::drawBox(); 
glBindTexture(GL_TEXTURE_2D,0); 

EDIT 2:

Sau Nicol Bolas gợi ý về màu sắc add Tôi đã chỉnh sửa đổ bóng của tôi và thay đổi nó như thế này:

gl_FragColor = (texture2D (myTexture, vTexCoord)) + finalColor;

Bây giờ nó chỉ sáng, nhưng bây giờ tôi phải chenge một chút ánh sáng trên sân khấu và sẽ là tuyệt vời. Nhưng tôi vẫn chưa có một pixel shading thay vì tôi đã có cho mỗi vertex shading. Đây là màn hình hiện tại của tôi và tôi đã đánh dấu trên ví dụ những gì tôi có nghĩa là nói về bóng:

enter image description here

+0

Bạn có thể hiển thị mã nơi bạn thiết lập và chuyển tới tọa độ kết cấu GL không? –

+0

@ MārtiņšMožeiko chỉnh sửa và thêm – sebap123

+0

Điều gì sẽ xảy ra nếu bạn chỉ hiển thị kết cấu mà không cần chiếu sáng? –

Trả lời

11

phương trình này:

gl_FragColor = gl_FrontLightModelProduct.sceneColor + (texture2D(myTexture, vTexCoord)) + finalColor; 

Không thực hiện bất kỳ ý nghĩa đối với hầu hết các kết cấu. Bạn đang lấy màu được tạo ra từ phương trình chiếu sáng và thêm nó vào màu lấy mẫu từ kết cấu. Điều này sẽ chỉ có ý nghĩa nếu các giá trị được lưu trữ trong kết cấu biểu thị ánh sáng phát ra thuộc tính của bề mặt.

Nói chung, giá trị màu của kết cấu biểu thị độ phản xạ khuếch tán của bề mặt. Có nghĩa là bạn cần phải kết hợp chúng vào phương trình chiếu sáng trực tiếp.Màu của kết cấu nên thay thế hoàn toàn màu khuếch tán từ vật liệu hoặc nó phải được kết hợp với màu khuếch tán vật liệu theo một cách nào đó.

+1

Màu khuếch tán nên được kết hợp với màu kết cấu khuếch tán như thế nào? Thêm? Nhân rộng? Thứ gì khác? Nó có giống với kết cấu xung quanh và gương không? – Kerndog73

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