UV -Koordinaten zur Bezier -KurveC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 UV -Koordinaten zur Bezier -Kurve

Post by Anonymous »

Ich versuche, ein System zum Erstellen eines Netzes auf einer Bezier -Kurve zu erstellen. Alles scheint geklappt zu haben, aber beim Versuch, die UV -Koordinaten zu berechnen, treten Kuriositäten auf: In Orten starker Biegung scheint dies:

Ich dachte, es war, dass es sich um die Segmente handelte. Mit dem Code von hier: Subdivide Bezier -Kurven habe ich die Kurve in gleiche Segmente unterteilt, aber das Ergebnis änderte sich in keiner Weise. /> < /p>
Hier ist der Code zum Erstellen eines Netzes: < /p>

Code: Select all

for (int j = 0; j < numSegmentsPerCurve; j++)
{
float t = j / (float)numSegmentsPerCurve;

Vector3 point = Bezier.GetPosition(p0, p1, p2, p3, t);
pointsForDraw.Add(point);

Vector3 point_derivative = Bezier.GetDerivative(p0, p1, p2, p3, t);
Vector3 point_tangent = Vector3.Cross(point_derivative, Vector3.up).normalized;

float half_width = roadWidth * 0.5f;

var vert1 = point - point_tangent * half_width;
var vert2 = point + point_tangent * half_width;

v += 0.1f;

vertices.Add(vert1);
vertices.Add(vert2);

uvs.Add(new Vector2(0.0f, v * size_tex));
uvs.Add(new Vector2(1.0f, v * size_tex));
}
Keine Möglichkeit, mein Problem zu lösen, ohne die Segmente in der Kurvenbiegung zu erhöhen? Ich denke, ich muss diesen Artikel wirklich verwenden. Aber ich bin immer noch neu für Shader. Ich habe versucht, den Shader umzuschreiben, der im Artikel aufgeführt ist: < /p>

Code: Select all

Shader "Custom/test"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
}
SubShader
{
Tags { "RenderType"="Opaque" }

Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag

#include "UnityCG.cginc"

float4x4 g_matLocalToClip;
Texture2D _MainTex;
SamplerState sampler_MainTex;

struct VertexData
{
float3 pos : POSITION;
float3 uvq : TEXCOORD0;
};

void vert( VertexData vtx, out float3 uvq : TEXCOORD0, out float4 posClip : SV_Position)
{
posClip = mul(float4(vtx.pos, 1.0), g_matLocalToClip);
uvq = vtx.uvq;
}

void frag( float3 uvq : TEXCOORD0, out half4 o_rgba : SV_Target)
{
o_rgba = _MainTex.Sample(sampler_MainTex, uvq.xy / uvq.z);
}
ENDCG
}
}
}
Aber wenn das Material dieses Shaders auf das Raster angewendet wird, geschieht:

Ich denke, ich mache etwas falsches. Könnte es sein, weil ich Unity URP benutze? Könnten Sie mir auf den Fehler hinweisen?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post