এক্সএনএ ৪.০ এ আমি কীভাবে আলফা স্বচ্ছতা করব?


14

ঠিক আছে, আমি বেশ কয়েকটি নিবন্ধ, টিউটোরিয়াল এবং এ সম্পর্কিত প্রশ্নগুলি পড়েছি। বেশিরভাগ একই কৌশলটির দিকে নির্দেশ করুন যা আমার সমস্যার সমাধান করে না। আমার অর্ধ-স্বচ্ছ স্প্রিট তৈরি করার দক্ষতা প্রয়োজন (টেক্সচার 2 ডি এর সত্যই) এবং সেগুলি অন্য স্প্রিটকে ওভারলে করে।

আমি খুঁজে পেয়েছি কোড নমুনাগুলির সাথে কিছুটা অর্জন করতে পারি তবে আমি ফলাফল নিয়ে সন্তুষ্ট নই এবং আমি জানি যে এটি করার একটি উপায় আছে। মোবাইল প্রোগ্রামিং (BREW) এ আমরা এটি পুরানো স্কুল করেছি এবং রেন্ডারিংয়ের আগে স্বচ্ছতার জন্য প্রতিটি পিক্সেলটি পরীক্ষা করেছি।

এক্ষেত্রে মনে হয় এটির নীচের স্প্রিটটি এটির উপরে আলফার সাথে মিশ্রিত হয়েছে। এটি আমি কীভাবে টেক্সচারটি উপস্থাপন করছি তার একটি নিদর্শন হতে পারে তবে আগেই বলেছি, সমস্ত উদাহরণ এই একটি কৌশলকে নির্দেশ করে to আরও কিছু করার আগে আমি এগিয়ে যাব এবং আমার উদাহরণ কোডটি পেস্ট করব।

    public void Draw(SpriteBatch batch, Camera camera, float alpha)
    {
        int tileMapWidth = Width;
        int tileMapHeight = Height;

        batch.Begin(SpriteSortMode.Texture,
            BlendState.AlphaBlend,
            SamplerState.PointWrap,
            DepthStencilState.Default,
            RasterizerState.CullNone,
            null, camera.TransformMatrix);

        for (int x = 0; x < tileMapWidth; x++)
        {
            for (int y = 0; y < tileMapHeight; y++)
            {
                int tileIndex = _map[y, x];

                if (tileIndex != -1)
                {
                    Texture2D texture = _tileTextures[tileIndex];

                    batch.Draw(
                        texture,
                        new Rectangle(
                            (x * Engine.TileWidth),
                            (y * Engine.TileHeight),
                            Engine.TileWidth,
                            Engine.TileHeight),
                        new Color(new Vector4(1f, 1f, 1f, alpha )));
                }
            }
        }

        batch.End();

    }

আপনি দেখতে পাচ্ছেন যে, এই কোডটিতে আমি ওভারলোডেড স্প্রিটব্যাচ.বাগিন পদ্ধতিটি ব্যবহার করছি যা অন্যান্য বিষয়গুলির মধ্যে একটি মিশ্রিত অবস্থা গ্রহণ করে। আমি প্রায় ইতিবাচক যে আমার সমস্যা। আমি স্প্রিটগুলি মিশ্রিত করতে চাই না, আমি আলফা 0 হবার সময় সেগুলি স্বচ্ছ হতে চাই this এই উদাহরণে আমি আলফাকে 0 তে সেট করতে পারি তবে এটি এখনও উভয় টাইলকে রেন্ডার করে, নিম্ন জেড অর্ডার করা স্প্রিটের মাধ্যমে দেখায়, এর কারণে বর্ণহীন হয় মিশ্রণ। এটি কোনও পছন্দসই প্রভাব নয়, আমি চাই উচ্চতর জেড-অর্ডারযুক্ত স্প্রিটটি বিবর্ণ হয়ে যায় এবং এর নীচে রঙটি এমনভাবে প্রভাবিত না করে।

আমি এক্সএনএ বিকাশে মোটামুটি নতুন তাই আমি ভুল খরগোশের গর্তের নীচে যাচ্ছি যদি ইভেন্টে আমাকে সঠিক দিকে চালিত করতে নির্দ্বিধায় থাকি তবে আমি এখানেই যেতে পারি।

টিয়া


কেন এটি 'যথাযথ' আলফা? আলফা সমর্থন আছে, এবং কোন আলফা সমর্থন আছে, তাই না?
কম্যুনিস্ট হাঁস

'সম্পাদনা' টিপে আপনার শিরোনাম সম্পাদনা করতে সক্ষম হওয়া উচিত এবং তারপরে শিরোনামটি শীর্ষে থাকা উচিত। কিছু না বদলে।
কম্যুনিস্ট হাঁস

উত্তর:


18

আমি যদি সমস্যাটি যথাযথভাবে অনুসরণ করি তবে ব্লেন্ডস্টেট.নোনপ্রিমুলিটিপ্লাইড দিয়ে কল করুন Begin এই নিবন্ধটি XNA- এ আলফা মিশ্রণ কীভাবে কাজ করে সে সম্পর্কে কিছুটা আলোকপাত করতে সহায়তা করতে পারে:

https://web.archive.org/web/20130208130323/http://blogs.msdn.com/b/shawnhar/archive/2010/04/08/premultiplied-alpha-in-xna-game-studio-4- 0.aspx


হ্যাঁ, দেখে মনে হচ্ছে ননপ্রিমিটপ্লাইটেড কৌশলটি করতে চলেছে (কমপক্ষে আপনি পোস্ট করেছেন এমন লিঙ্ক অনুযায়ী)। আমি অপেক্ষা করতে যাচ্ছি এবং দেখছি গ্রহণ করার আগে যখন আমি আজ রাতে ঘরে ফেলি তখন এটি কাজ করে কিনা তবে মনে হয় এটি উত্তর this ধন্যবাদ!
সোশিমো

যে কৌশল ছিল। আমি বুঝতে পারিনি যে তারা 4.0 এ পরিবর্তন করেছে। আপনি যে নিবন্ধটি সংযুক্ত করেছেন তা অত্যন্ত চিত্রণমূলক ছিল। ধন্যবাদ.
সোশিমো

1
+1 ধন্যবাদ! আমি আলফা কেন কেবল আংশিকভাবে কাজ করছিলাম তা জানার জন্য অনলাইনে দেখছিলাম। এটি এটি সমাধান। আমি গুগলে যে পদগুলি ব্যবহার করছিলাম সেগুলি ছিল স্প্রাইটব্যাচ ওপাসিটি, আশা করি সেই পদগুলি এখন গুগলদের এই উত্তর খুঁজে পেতে সহায়তা করবে।
অ্যাটাকিংহোব

6

অ্যালেক্সের প্রতিক্রিয়াটির সাথে সম্পূর্ণরূপে একমত, যদিও আপনি যদি প্রিম্টিপ্লাইড আলফা দিয়ে থাকেন তবে আমি বিশ্বাস করি আপনি এটিও এইভাবে করতে পারতেন

new Color(new Vector4(alpha, alpha, alpha, alpha ))

শন প্রিমিপ্লিটপ্লাইড এবং অ-গুণিত আলফার মধ্যে পার্থক্য ব্যাখ্যা করার জন্য একটি পোস্টও করেছে - http://blogs.msdn.com/b/shawnhar/archive/2009/11/06/prem Multiplaped-alpha.aspx

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.