2014-12-21 94 views
0

enter image description here的DirectX11/OpenGL的只呈現紋理

這一半是應該的樣子。它使用與DX11和OpenGL相同的頂點/ uv座標。這個場景在DirectX10中呈現。

enter image description here

這是怎麼看起來像的DirectX11和OpenGL。

我不知道這會如何發生。我在DX10和DX11上都使用了相同的代碼,並且它們處理的事情真的很相似。你有一個想法是什麼問題,以及如何解決它? 如果需要,我可以發送代碼。

enter image description here 也使用其他紋理。

enter image description here 將紋理的透明部分更改爲紅色。

片段着色器GLSL

#version 330 core 

in vec2 UV; 
in vec3 Color; 
uniform sampler2D Diffuse; 


void main() 
{ 

    //color = texture2D(Diffuse, UV).rgb; 
    gl_FragColor = texture2D(Diffuse, UV); 
    //gl_FragColor = vec4(Color,1); 
} 

的Vertex Shader GLSL

#version 330 core 

layout(location = 0) in vec3 vertexPosition; 
layout(location = 1) in vec2 vertexUV; 
layout(location = 2) in vec3 vertexColor; 
layout(location = 3) in vec3 vertexNormal; 

uniform mat4 Projection; 
uniform mat4 View; 
uniform mat4 World; 

out vec2 UV; 
out vec3 Color; 

void main() 
{ 

    mat4 MVP = Projection * View * World; 
    gl_Position = MVP * vec4(vertexPosition,1); 

    UV = vertexUV; 

    Color = vertexColor; 

} 
+0

爲了將來的參考,在編寫GLSL 3.30核心着色器時,不要使用'gl_FragColor'或'texture2D(...)';那些已被棄用。許多GLSL編譯器會讓你繼續使用它們,但它們不是必需的。您應該使用用戶定義的片段輸出(例如'out vec4 frag_color')和'texture(...)'(這是一個重載函數,它採用所有采樣器類型,從GLSL 1.30開始)。 –

回答

0

我發現的錯誤。

原因是我忘了將Texture SamplerState設置爲Wrap/Repeat。 它被設置爲鉗位,所以uv座標最大爲1.

1

趕緊說,它看起來像您使用背面剔除(這是好的),而模型的另一面是錯誤地囉嗦。你可以通過關閉面部剔除(OpenGL:glDisable(GL_CULL_FACE))來確保這是問題。

真正的糾正是(如果這是問題)正確纏繞面部,通常是逆時針方向。這取決於你得到這個模型的地方。如果您自己生成它,請在您的模型生成例程中正確纏繞。通常,由3D建模軟件創建的模型文件具有正確的面部纏繞。

+0

hm沒有轉回臉上剔除或更改收卷順序不會改變任何東西。 gl_cull_face被禁用(只是通過打開它進行測試,它會產生一些類似但不同的效果) – PuRe

+0

這也是我的猜測,但如果是背面剔除問題,您會看到另一半的鳥當它旋轉時。這看起來只有一半的鳥正在繪製,但繪製正確。 – user1118321

0

這只是一個猜測,但你告訴系統要繪製的多邊形的正確數量?像glBufferData()這樣的調用取得數據的字節大小,而不是頂點或多邊形的數量。 (也許他們應該命名參數numBytes而不是size?)另外,大小必須包含所有數據的大小。如果你有顏色,法線,紋理座標和頂點全部交錯,它需要包括所有這些的大小。

由於glDrawElements()和其他東西將頂點的數量作爲它們的大小參數,這使得更令人困惑。該參數被命名爲count,但它不是顯而易見的,它是頂點數,而不是多邊形數。

+0

以及它們被渲染。我用另一個紋理添加了另一張圖片。那個黑色的一面是沒有被正確呈現的。我也將紋理的透明部分更改爲紅色,您可以看到上面的結果。 – PuRe

-1

幾件事情,你可以嘗試:

  1. 是深度測試啓用?看起來,來自「另一側」的多邊形的內部面被渲染在更接近視點的多邊形上。如果禁用深度測試,則可能發生這種情況以防萬一。

  2. 啓用照明?如果是這樣,請關閉它。旋轉圖像中似乎有一些白色閃光。可能是因爲不正常的法線 ...

HTH

+0

深度測試已啓用且燈光不亮。這些閃光的白色不在場景內,因爲這個gif。 – PuRe

+0

好的。它看起來(從你張貼的新圖像),法線是關閉的。你會介意粘貼一些代碼嗎? – shekhar

+0

我確實有法線,但我沒有在任何地方使用它們,因爲我沒有使用閃電。 – PuRe