Geosphere Texturieren
Übersicht

HaubitzeBetreff: Geosphere Texturieren |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hallo ich bins wieder.
ich code ja noch immer an meinem kleinen planeten. nun will ich diesen texturieren und wie der titel schon sagt is besagter planet eine geosphere. nun habe ich im netz eine formel gefunden womit es moeglich sein soll die uv-coordinaten ueber die xyz-coordinaten zu errechnen. soweit klappt das auch nur habe ich da noch so kleine problemchen. hier mal 2 screens(ersterer von einem pol aus gesehen zweiterer naehe aequator. planet pol planet aequator ich benutze diese funktionen um die uv's zu errechnen. Code: [AUSKLAPPEN] Function GetTextureU#(cx#,cy#,cz#,x#,y#,z#) ;c-xyz=centrum, xyz=vertexcoordinaten
tmp#=(ATan2(Abs(x#-cx#),Abs(y#-cy#))) Return tmp# End function Function GetTextureV#(cx#,cy#,cz#,x#,y#,z#) tmp#=(ATan2(Sqr(Abs(x#-cx#)+Abs(y#-cy#)),Abs(z#-cz))) Return tmp# End function wie man an den bildern sieht giebt es da noch so fehler wie zb das die texture "gekachelt" ist und gerade an den polen und "nahtstellen", so schein mir, stark verzogen. falls jemand eine idee hatt was in den funktionen geaendert werden muss bitte ich um seine meinung. gruesse euer anfaenger Haubitze ![]() ps: ich benutze eine geosphere aus 3dmax(3ds) welche ich dann subdividiere und "berge" setze. |
||
Haubitze |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
nun habe ich doch noch mal ne frage zu den texturcoordinaten.
kann aus einem minimalen mesh die uv nehmen und diese dann fuer einen subdividierten mesh interpolieren? naja eigendlich ne doofe frage aber ich hab da noch nich so den plan. danke schon mal fuer eure antworten. gruesse |
||
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Keine Doppelposts. Dafür gibt es einen Edit-Button. Mit 3dsMax kenne ich mich aber nicht aus ![]() |
||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, das kannst du durchaus.
Allerdings wäre es wohl um einiges einfacher, wenn du den Planeten direkt in B3D mittels CreateSphere ![]() Damit du das nicht hardcoden musst, erstellst du im vornherein eine Heightmap. Dann gehst du jeden Vertex der Kugel durch, bestimmst seine Texturkoordinaten durch VertexU ![]() ![]() Const HEIGHT_SCALE# = 0.1
Local Heightmap = LoadImage( "Heightmap.png" ) Local Planet = CreateSphere( 16 ) ;Oder 8, 32, etc. Local Surface = GetSurface( Planet, 1 ) Local VertexCount = CountVertices( Surface ) For I = 0 To VertexCount - 1 Local U# = VertexU( Surface, I ) Local V# = VertexV( Surface, I ) ;Im folgenden wird der Pixel ausgelesen und der Blauwert herausgefiltert Local Blue = ReadPixel( U#*ImageWidth( Heightmap ), V#*ImageWidth( Heightmap ), ImageBuffer( Heightmap ) ) And 255 ;Ich setze jetzt einfach mal voraus, dass ein Blauwert von 128 die Höhe 0 bedeutet Local Height# = HEIGHT_SCALE#*( Blue - 128 )/255. ;Ich berechne den Vektor von Kugelmittelpunkt (hier 0|0|0) zum Vertex und normalisiere ihn per TFormNormal ;TFormNormal ist eine schnellere und kürzere Variante, als einfach die Vektorkomponenten durch dessen Länge zu teilen TFormNormal VertexX( Surface, I ), VertexY( Surface, I ), VertexZ( Surface, I ), 0, 0 ;Den Vertex auf dem vorher normalisierten Vektor bewegen, und zwar um die berechnete Verschiebung Height# VertexCoords Surface, I, VertexX( Surface, I ) + TFormedX()*Height#, VertexY( Surface, I ) + TFormedY()*Height#, VertexZ( Surface, I ) + TFormedZ()*Height# Next Der Code ist weder direkt lauffähig noch ist er optimiert - er dient rein zur Illustration (bevor jemand kommt und schreibt "Mit LockBuffer geht das viel schneller blah!" ![]() Passende Heightmaps bekommst du überall im Internet - einfach mal googeln. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
Haubitze |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
oh man das ja komplizierter als ich dachte :/
naja werds mal probieren und danke fuer den "pseudo code" ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group