Mordna Geschrieben 14. Mai 2016 Melden Share Geschrieben 14. Mai 2016 Hallöchen, ich versuche momentan zu erreichen, dass ein Netz aus Secksecken und 12 Fünfecken um eine Kugel (bzw. Planet) gelegt wird, also in etwa sollte es so aussehen: http://prntscr.com/b3zdho (Das habe ich per GL c# code erreicht) Jedoch soll es später mal ein Planet werden, also nicht ganz kugelförmig: http://prntscr.com/b3zdkb Das Problem ist sichtbar... Außerdem will ich kein Mesh haben, das die Linien darstellt, da Mehrere Submeshes benötigt werden (64k limit) Man weit rauszoomen darf , sodass eventuell die fps nur aufgrund der Linien zu Grunde geht Die Landschaft prozedural auch im Spiel noch verändert wird Ich habe bereits alle Punkte dieses Netzes, kann daraus auch Linien machen. Mein Ansatz mit dem Shader war: Ich berechne für jede Linie im Netz die Normale eine Ebene (e:n*(x-a) = 0), d.h. n = vecAB x a = b x a ,da vecAB = b - a Somit kann ich für jeden Punkt p die Distanz berechnen falls die kleiner als ein bestimmter Wert ist, berechne ich die x3 Differenz: falls negativ und die Punktnormale ist nach oben gerichtet: ignoriere den Punkt falls negativ und die Punktnormale ist nach unten gerichtet: arbeite mit diesem Punkt falls positiv und die Punktnormale ist nach oben gerichtet: arbeite mit diesem Punkt falls positiv und die Punktnormale ist nach unten gerichtet: ignoriere den Punkt Dann wird anhand dem x1 und x2 Abstand eine Farbe berechnet (wie mit Color.Lerp())->output Meine Probleme: Mit Shadercode kenne ich mich noch nicht so gut aus, arbeite lieber mit c# Ich muss für jedes Netz neue Shader erstellen, da die arrays im Shader eine vordefinierte Größe haben müssen? Brauch man dazu einen Surface Shader oder reicht ein vertex shader? Wäre dieser Ansatz effizient (bei mehr als 36.000 Kanten (s. Beispiel)), wenn nein, gibt es einen besseren Ansatz (möglichst ohne einen Shader zu benutzen) in cg oder hlsl werden arrays doch in etwa so erstellt: const uniform float3 _LevelNormals[36120] = { (-0.00267519,-0.003161566,0.001888227),(0.00267519,-0.003161566,0.001888227)}; //natürlich sind da noch 36118 mehr Normalen drinnen... Ich hoffe man versteht mein Problem. Danke im Vorraus! MFG Mordna Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.