2013-02-07 38 views
5

में एक पिक्सेल शेडर के माध्यम से रंग पास करना मेरे पास एक पिक्सेल शेडर है जो केवल इनपुट रंग को पास करना चाहिए, लेकिन इसके बजाय मुझे निरंतर परिणाम मिल रहा है। मुझे लगता है कि मेरा वाक्यविन्यास समस्या हो सकती है। यहाँ शेडर है:एचएलएसएल

struct PixelShaderInput 
{ 
    float3 color : COLOR; 
}; 

struct PixelShaderOutput 
{ 
    float4 color : SV_TARGET0; 
}; 

PixelShaderOutput main(PixelShaderInput input) 
{ 
    PixelShaderOutput output; 
    output.color.rgba = float4(input.color, 1.0f); // input.color is 0.5, 0.5, 0.5; output is black 
    // output.color.rgba = float4(0.5f, 0.5f, 0.5f, 1); // output is gray 
    return output; 
} 

परीक्षण के लिए, मैं शीर्ष शेडर कि pipleline 0.5, 0.5, 0.5 का एक रंग पैरामीटर पारित करने में इस से पहले आती है की है। विजुअलस्टूडियो में पिक्सेल शेडर के माध्यम से कदम, input.color के सही मान हैं, और इन्हें output.color पर सही तरीके से assing किया जा रहा है। हालांकि जब प्रस्तुत किया जाता है, तो इस शेडर का उपयोग करने वाले शिखर सभी काले होते हैं।

const D3D11_INPUT_ELEMENT_DESC vertexDesc[] = 
{ 
    { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, 
    { "COLOR",  0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, 
    { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, 
}; 

मुझे यकीन है कि अगर यह महत्वपूर्ण है कि शीर्ष शेडर रंग लेता है के रूप में आरजीबी एक ही आउटपुट, लेकिन पिक्सेल शेडर आउटपुट RGBA नहीं कर रहा हूँ:

यहाँ शीर्ष शेडर तत्व वर्णन है। अल्फा परत कम से कम सही ढंग से काम कर रही है।

यदि मैं पहले असाइनमेंट को टिप्पणी करता हूं, इनपुट इनपुटर का उपयोग करता हूं, और स्पष्ट असाइनमेंट के साथ अन्य असाइनमेंट को असम्बद्ध करता हूं, तो प्रस्तुत किए गए पिक्सेल ग्रे (अपेक्षित) होते हैं।

क्या मैं यहां गलत कर रहा हूं पर कोई विचार?

मैं अनुकूलक अक्षम और डीबग जानकारी सक्षम के साथ शेडर मॉडल 4 स्तर 9_1 का उपयोग कर रहा हूं।

उत्तर

2
output.color.rgba = float4(input.color, 1.0f); 

अपने इनपुट की कोशिश कर सकते हैं ?:।रंग एक Float4 है और आप एक और Float4 में से गुजर रहे हैं, मुझे लगता है कि यह काम करना चाहिए

output.color.rgba = float4(input.color.rgb, 1.0f); 

यह सब आप इसे माध्यम से बस

return input.color; 

पास करनी होगी आप के लिए रंग बदलने के लिए चाहते हैं लाल तो

input.color = float4(1.0f, 0.0f, 0.0f, 1.0f); 
return input.color; 
0

मैं निर्माता

इस तरह का
float4(input.color, 1.0f); 

इस समस्या हो सकती है कभी नहीं देखा है, लेकिन मैं गलत हो सकता है। इस तरह एक के बाद नाव मूल्यों एक गुजर का प्रयास करें:

float4(input.color[0], input.color[1], input.color[2], 1.0f); 

संपादित करें:

वास्तव में आप (http://msdn.microsoft.com/en-us/library/windows/desktop/bb509647(v=vs.85).aspx)

+0

धन्यवाद यति जैसे कुछ करें। मेरे पास फ्लोट 4 प्रारंभिकता है जो मैंने डायरेक्ट 3 डी नमूने से सीधे लिया है जो वीएस2012 के साथ जहाजों। मैंने उस व्यक्ति को बदलने की कोशिश की जिसका आप उल्लेख करते हैं लेकिन मुझे एक ही परिणाम मिल रहा है। –

+0

मैंने अपने कोड को संशोधित किया है कि कशेरुक घोषणा में अब रंग DXGI_FORMAT_R32G32B32A32_FLOAT के रूप में है, और मैंने shaters को फ्लोट 3 के बजाय फ्लोट 4 लेने और वापस करने के लिए संशोधित किया है, लेकिन आउटपुट में कोई बदलाव नहीं है। –

+0

फ्लोट 4 (फ्लोट 3, 1.0 एफ); सही एचएसएलएस वाक्यविन्यास है, लेकिन मुझे उस पर msdn दस्तावेज़ नहीं मिल रहा है। – Stardidi

1

* रंग के लिए प्रकार के रूप में Float4 उपयोग करने के लिए आप सुनिश्चित करें कि आपके कोने हैं कर रहे हैं हो सकता है जगह में वे माना जाता है? आप मुझे मेरे डी 3 डी ज्ञान पर संदेह करना शुरू कर रहे हैं। : पी मुझे विश्वास है कि आपकी समस्या यह है कि आप केवल एक रंग गुजर रहे हैं, शेडर के दोनों हिस्सों को काम करने के लिए एक स्थिति की आवश्यकता है। आपका पिक्सेलशैडर इनपुट लेआउट होना चाहिए: संरचना पिक्सेलशैडर इनपुट { फ्लोट 4 स्थिति: SV_POSITION; फ्लोट 3 रंग: रंग; }; *

आप शायद यह आपके पिक्सेल शेडर रूप

float4 main(float3 color : COLOR) : SV_TARGET 
{ 
    return float4(color, 1.0f); 
} 
+0

मैंने सत्यापित किया है कि एक पिक्सेल शेडर को SV_POSITION इनपुट की आवश्यकता नहीं है। –

+0

सुनिश्चित नहीं हैं कि अगर इस समस्या है, लेकिन आप अपने साथ शेडर पिक्सेल की जगह की कोशिश कर सकते: Float4 मुख्य (float3 रंग: COLOR): SV_TARGET { \t वापसी Float4 (रंग, 1.0f); } – Stardidi

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^