আমার টাইলসের মাঝে কেন রেখা আছে?


14

আমি টপ ডাউন এক্সএনএ গেমটি তৈরি করছি। টাইলস দ্বারা মানচিত্র তৈরি করা হয়। আমি সম্প্রতি যে সমস্যাটি লক্ষ্য করেছি তা হ'ল টাইলগুলির মধ্যে লাইনের একটি 'গ্রিড'। এটি কেবল কখনও কখনও এবং কেবল ক্যামেরার অবস্থানের উপর নির্ভর করে প্রদর্শিত হয়। আমি এক্সএনএটিকে পজিশনিং পরিচালনা করতে দিই, কেন এই লাইনগুলি প্রদর্শিত হচ্ছে?

লাইনগুলি সহ এখানে একটি চিত্র:

এখানে চিত্র বর্ণনা লিখুন

যাইহোক, আমার ক্যামেরাটিকে কিছুটা উপরে নিয়ে যাওয়ার পরে, এটি কীভাবে প্রদর্শিত হবে বলে মনে হচ্ছে তা যাদুতে ফিরে যায়:

এখানে চিত্র বর্ণনা লিখুন

কোন সাহায্যের জন্য ধন্যবাদ!

সম্পাদনা করুন:

উত্স কোডের জন্য এটি আমি সবচেয়ে ভাল করতে পারি, এটি একটি অত্যন্ত বৃহত প্রকল্প এবং রেন্ডারিং এটি একাধিক ক্ষেত্রে সম্পন্ন করেছে:

টাইলসের মতো গতিশীল উপাদানগুলির জন্য প্রধান রেন্ডার লুপ :

    spriteBatch.Begin(SpriteSortMode.Deferred, Nothing, SamplerState.LinearClamp, Nothing, Nothing, Nothing, Matrix.CreateTranslation(CameraX, CameraY, 0))
    Mode.Render(spriteBatch, False)
    For Each j As [Delegate] In DynamicInjectionList
        j.DynamicInvoke(spriteBatch)
    Next
    DynamicInjectionList.Clear()
    spriteBatch.End()

Mode.Render:

For x As Integer = 0 To GRIDMAX - 1
    For y As Integer = 0 To GRIDMAX - 1
        For z As Integer = 0 To 2
            Dim ter As TiledTerrain = Terrain(x, y, z)
            If ter IsNot Nothing Then
                sb.Draw(CBaseClient.TextureLibrary("TileMap"), New Rectangle(x * GRIDSIZE, y * GRIDSIZE, GRIDSIZE, GRIDSIZE), New Rectangle(ter.Texture_X, ter.Texture_Y, GRIDSIZE, GRIDSIZE), Color.White)
            End If
        Next
    Next
Next

TiledTerrain.vb ক্লাস:

Imports ProtoBuf

<ProtoContract()> _
Public Class TiledTerrain

    <ProtoMember(1)> _
    Public Property X As Integer
    <ProtoMember(2)> _
    Public Property Y As Integer
    <ProtoMember(3)> _
    Public Property Z As Integer

    <ProtoMember(4)> _
    Public Property Texture_X As Integer
    <ProtoMember(5)> _
    Public Property Texture_Y As Integer

End Class

আমার গবেষণা:

আমি এটিতে কিছু অনুসন্ধান করেছি এবং এটি হ'ল আমি:

  • এই সমস্যাটিকে ছেঁড়া বলা হয় (আমি বিশ্বাস করি?)
  • এটি সাধারণত টাইল অবস্থান ধরে রাখতে ভাসমান পয়েন্ট ডেটা টাইপ ব্যবহার করার কারণে ঘটে থাকে (আমি ব্যবহার করছি Integerতাই এটির কোনও সমস্যা হওয়া উচিত নয়?)

আপনি কিভাবে আপনার টাইলস আঁকেন? আপনার অঙ্কন কোড এবং অন্যান্য সমস্ত প্রাসঙ্গিক কোড আটকান, আমাদের গুরুত্ব সহকারে আরও তথ্যের প্রয়োজন :) সমস্যাটি সম্ভবত গোলাকার ত্রুটি / নির্ভুলতার সাথে কিছু করতে পারে

@ যাক্কোলিপসেনেন, সেখানে আমি কিছু কোড যুক্ত করেছি :)
ফ্রিসনউ

1
সম্প্রতি একটি অনুরূপ বিষয়ে একটি প্রশ্ন ছিল যা খুব পড়ার পক্ষেও হতে পারে।
অ্যান্ড্রু রাসেল

আপনার টাইলগুলির মধ্যে রেখাগুলির প্রশ্নের উত্তর দেওয়া হলেও আমি লক্ষ্য করেছি যে আপনার টাইলগুলিতে লাইনও রয়েছে (যেমন খারাপ ঘাসের গঠন)। আপনি যদি এটিও ঠিক করতে চান তবে এইটি
ড্যান

উত্তর:


19

আমি ধরে নিয়েছি যে আপনার টাইলের অবস্থানগুলি পূর্ণসংখ্যায় সংজ্ঞায়িত করা হলেও আপনার ক্যামেরার অবস্থানটি নাও হতে পারে। সুতরাং আপনি যদি পিক্সেল-নিখুঁত অবস্থান থেকে পিক্সেল-নিখুঁত অবস্থানগুলি রেন্ডার করার চেষ্টা করছেন তবে নমুনাটি বন্ধ হয়ে যেতে পারে এবং টাইলগুলির মধ্যে লাইন তৈরি করতে পারে। আপনার SpriteBatch.Drawকল, আমি পরিবর্তন পরামর্শ চাই SamplerState করতেPointClamp তা নিশ্চিত করার জন্য অঙ্গবিন্যাস একটি বিন্দু ভিত্তিতে নমুনা হিসেবে পাঠানো হয় এবং সেই অতিরিক্ত লাইন মুছে ফেলা আবশ্যক।

আপনার কোড সংশোধিত:

spriteBatch.Begin(
    SpriteSortMode.Deferred, 
    Nothing, 
    SamplerState.PointClamp, 
    Nothing, 
    Nothing, 
    Nothing, 
    Matrix.CreateTranslation(CameraX, CameraY, 0))

1

ডাইরেক্টএক্স 11 এর সাথে আমারও একই সমস্যা ছিল এবং এটি আমার পক্ষে কাজ করেছে:

আমি নমুনা রাষ্ট্রের বর্ণনায় টেক্সচারের ঠিকানা মোডটি পরিবর্তন করেছি। টেক্সচার অ্যাড্রেস মোডটি রেঞ্জের বাইরে টেক্সচার সমন্বয়গুলির সাথে ডাইরেক্ট 3 ডি কী করে তা নিয়ন্ত্রণ করতে ব্যবহৃত হয় (ডাইরেক্টএক্স 11 এ, এটি [0.0f, 1.0f])। আমি পরিবর্তনADDRESS_U , ADDRESS_V,ADDRESS_W সদস্যদেরD3D11_TEXTURE_ADDRESS_CLAMP যা পরিসীমা মধ্যে জমিন স্থানাঙ্ক এর আউট-অফ-পরিসীমা মান clamps।

আপনার কোডটিতে যদি কোনও অ্যানালগাস প্যারামিটার থাকে তবে এটি সাহায্য করতে পারে।


0

আমার টাইলগুলির মধ্যে লাইনগুলি দেখানোর ক্ষেত্রেও আমার একই রকম সমস্যা ছিল, তবে প্যাঁচার ক্ল্যাম্পে নমুনা পরিস্থিতি পরিবর্তন করা সমস্যার সমাধান করতে পারেনি।

পরিবর্তে আমি দেখতে পেয়েছি যে মাল্টি-স্যাম্পলিং বন্ধ করে এবং উল্লম্ব ট্রেস সিঙ্ক্রোনাইজ করার ফলে সমস্যাটি স্থির হয়েছে। এটি এক্সএনএ ৪.০ এ রয়েছে:

public GraphicsDeviceManager _graphics;

_graphics = new GraphicsDeviceManager(this);
_graphics.PreferMultiSampling = false;
_graphics.SynchronizeWithVerticalRetrace = true;

আশা করছি এটা ওখানে কাওকে সাহায্য করবে!

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