मैं एक ऐसे अनुप्रयोग पर काम कर रहा हूं जो सरल 3 डी आकार खींचने के लिए शार्पडीएक्स और शार्पडीएक्स टूलकिट का उपयोग करता है, और जियोमेट्रिक्स। डिस्कोटॉप नमूना शुरू करने में बहुत मददगार था। अब मैं कुछ आकारों को पारदर्शी बनाने की कोशिश कर रहा हूं, और चीजों को सरल रखने के लिए मैं बस उस नमूने में टीपोट मॉडल को पारदर्शी दिखाई देने की कोशिश कर रहा हूं (शायद पारदर्शी अधिक सटीक होगा)।मैं SharpDX Toolkit के साथ एक पारदर्शी 3 डी ऑब्जेक्ट कैसे आकर्षित कर सकता हूं?
उन लोगों के लिए जो Geometrics.Desktop नमूना से परिचित नहीं हैं, यह 3 डी में कुछ सरल आदिम ज्यामितीय आकार खींचता है। एक नमूना ऐप होने के नाते, यह बहुत आसान है, इसलिए यह SharpDX "टूलकिट" लाइब्रेरी की 3 डी विशेषताओं के प्रयोग के लिए एक बहुत अच्छा स्क्रैचपैड बनाता है।
मैं सम्मिश्रण करने के लिए Direct3D तैयार करने के प्रयास में LoadContent विधि (जो स्टार्टअप समय एक ही बार में चलता है) को यह जोड़ दिया है,:
var blendStateDescription = new BlendStateDescription();
blendStateDescription.AlphaToCoverageEnable = false;
blendStateDescription.RenderTarget[0].IsBlendEnabled = true;
blendStateDescription.RenderTarget[0].SourceBlend = BlendOption.SourceAlpha;
blendStateDescription.RenderTarget[0].DestinationBlend = BlendOption.InverseSourceAlpha;
blendStateDescription.RenderTarget[0].BlendOperation = BlendOperation.Add;
blendStateDescription.RenderTarget[0].SourceAlphaBlend = BlendOption.Zero;
blendStateDescription.RenderTarget[0].DestinationAlphaBlend = BlendOption.Zero;
blendStateDescription.RenderTarget[0].AlphaBlendOperation = BlendOperation.Add;
blendStateDescription.RenderTarget[0].RenderTargetWriteMask = ColorWriteMaskFlags.All;
var blendState = SharpDX.Toolkit.Graphics.BlendState.New(this.GraphicsDevice, blendStateDescription);
this.GraphicsDevice.SetBlendState(blendState);
मैं इस प्रकार गहराई स्टेंसिल की स्थापना की है:
var depthDisabledStencilDesc = new DepthStencilStateDescription()
{
IsDepthEnabled = false,
DepthWriteMask = DepthWriteMask.All,
DepthComparison = Comparison.Less,
IsStencilEnabled = true,
StencilReadMask = 0xFF,
StencilWriteMask = 0xFF,
// Stencil operation if pixel front-facing.
FrontFace = new DepthStencilOperationDescription()
{
FailOperation = StencilOperation.Keep,
DepthFailOperation = StencilOperation.Increment,
PassOperation = StencilOperation.Keep,
Comparison = Comparison.Always
},
// Stencil operation if pixel is back-facing.
BackFace = new DepthStencilOperationDescription()
{
FailOperation = StencilOperation.Keep,
DepthFailOperation = StencilOperation.Decrement,
PassOperation = StencilOperation.Keep,
Comparison = Comparison.Always
}
};
// Create the depth stencil state.
var depthDisabledStencilState = SharpDX.Toolkit.Graphics.DepthStencilState.New(this.GraphicsDevice, depthDisabledStencilDesc);
//turn z-buffer off
this.GraphicsDevice.SetDepthStencilState(depthDisabledStencilState, 1);
और ड्रा विधि में (जो फ्रेम दर पर चलती है और 3 डी मॉडल की एक छोटी सी सरणी के माध्यम से पुनरावृत्त करती है, प्रत्येक को चित्रित करती है), मैंने नीचे दिया गया कोड जोड़ा है। यह टीपोट को व्यूपोर्ट के केंद्र में ले जाता है और अन्य कुछ वस्तुओं को हल करने के लिए पर्याप्त बनाता है। चाय की केतली पिछले तैयार की है, इसलिए अन्य मॉडल पहले से ही प्रस्तुत किए गए हों, इसलिए मैं वास्तव में उम्मीद कर रही थी इस उनमें से शीर्ष पर एक पारदर्शी चाय की केतली आकर्षित होगा:
// Draw the primitive using BasicEffect
if (i == 6)
{
basicEffect.Alpha = 0.5f;
basicEffect.World *= Matrix.Translation(-x, -y, 0);
basicEffect.World *= Matrix.Scaling(3);
}
else
{
basicEffect.Alpha = 1;
}
primitive.Draw(basicEffect);
(टिप्पणी और अंतिम कॉल के थे हिस्सा ड्रा करने के लिए मूल नमूना कोड)
लेकिन अफसोस, परिणाम एक बड़ा अपारदर्शी अन्य वस्तुओं के बीच चाय की केतली है:।
क्या मुझे लगता है कि ते बनाने के लिए क्या करना होगा पारदर्शी पारदर्शी?
क्या मुझे कुछ याद आ रहा है, या क्या मैंने मिश्रण स्थिति को गलत तरीके से कॉन्फ़िगर किया है?
और केवल पूर्णता के लिए, मैंने 50% पर अल्फा चैनल वाले छवियों के साथ अपनी ऑब्जेक्ट्स को टेक्सचर करने का भी प्रयास किया है, लेकिन यह अभी भी अपारदर्शी वस्तुओं में परिणाम देता है।
किसी भी सहायता के लिए अग्रिम धन्यवाद!
क्या आप direct3d11 का उपयोग कर रहे हैं? क्योंकि कोई * आदिम * बस * संदर्भ * नहीं है। –
हां मैं डी 3 डी 11 का उपयोग कर रहा हूं, हालांकि मैं ज्यामितीय अर्थ - घन, गोलाकार, सिलेंडर आदि में "आदिम" शब्द का उपयोग कर रहा था। शार्पडीएक्स टूलकिट में कक्षाएं हैं जो इस तरह के आकार को आकर्षित करना आसान बनाती हैं, और इनके साथ काम करना आसान होता है। अधिकतर। उन्हें पारदर्शी बनाना बहुत कठिन रहा है। – NSFW