| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen | 
	
	
		| Autor | Nachricht | 
	
		| Fallen JLI MVP
 
  
  
 Alter: 41
 Anmeldedatum: 08.03.2003
 Beiträge: 2860
 Wohnort: Münster
 Medaillen: 1 (mehr...)
 
 
 | 
			
				|  Verfasst am: 24.11.2003, 10:09    Titel: Normalen,Tangenten,Binormalen |   |  
				| 
 |  
				| Hallo kann mir jemand sagen wie ich aus einem Normalenvector einen Tangenten und Binormalenvector erstellen kann ? 
 Zur Erklärung:
 
 Angenommen der Normalenvector zeigt in die Y-Richtung (0,1,0) dann müsste die Tangente in die X-Richtung (1,0,0) und die Binormale in die Z-Richtung (0,0,1) zeigen.
 
 Ich brauche das fürs DP3-Bumpmapping.
 
 Danke schon mal.
 _________________
 "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| robx Mini JLI'ler
 
 
 
 Anmeldedatum: 02.12.2003
 Beiträge: 7
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 02.12.2003, 21:55    Titel: |   |  
				| 
 |  
				| rein theorethisch geht das garnicht. du brauchst imho schon einen texture space, also die uv koordinaten - daraus kannst mit jede menge mathe binormale und tangente bestimmen.. 
 aber es gibt da einen trick
   
 du nimmst die einen beliebigen vector 'dummy', z.b. (0,1,0). dann kannst du binormale und tangente folgendermaßen berechnen:
 
 tangente   = normale x dummy
 binormale = normale x tangente
 (x ist cross-product)
 
 normale und dummy sollten vorher normalisiert sein, sonst gibts fehler.
 
 der haken ist, dass es nicht funktioniert, wenn normale==dummy ist, kann unter umständen da unschön aussehen.
 
 ob das ganze fürs bump-mapping funzt und sinn macht weiß ich nicht, es ist halt nur fake.
 _________________
 just my two cents.
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| Fallen JLI MVP
 
  
  
 Alter: 41
 Anmeldedatum: 08.03.2003
 Beiträge: 2860
 Wohnort: Münster
 Medaillen: 1 (mehr...)
 
 
 | 
			
				|  Verfasst am: 03.12.2003, 11:36    Titel: |   |  
				| 
 |  
				| Bei Landschaften hab ich das so ähnlich gemacht wie du. Da sieht das ganze noch recht spitze aus. Ich brauche das aber noch für Modelle da man das dort nicht so sehr effektiv anwenden kann wie hier. _________________
 "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| robx Mini JLI'ler
 
 
 
 Anmeldedatum: 02.12.2003
 Beiträge: 7
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 03.12.2003, 12:30    Titel: |   |  
				| 
 |  
				| ok, dann brauchst du irgendeinen space aus dem du tangente und binormale berechnen kannst, ich glaube das kann man aus den u,v koordinaten ableiten. hab ich aber noch nie gemacht. 
 am besten google fragen.
 _________________
 just my two cents.
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| Fallen JLI MVP
 
  
  
 Alter: 41
 Anmeldedatum: 08.03.2003
 Beiträge: 2860
 Wohnort: Münster
 Medaillen: 1 (mehr...)
 
 
 | 
			
				|  Verfasst am: 04.12.2003, 10:26    Titel: |   |  
				| 
 |  
				| Was willst du überhaupt mit den UV-Koordinaten ? _________________
 "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| robx Mini JLI'ler
 
 
 
 Anmeldedatum: 02.12.2003
 Beiträge: 7
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 04.12.2003, 10:43    Titel: |   |  
				| 
 |  
				| na ermitteln, wie die texture auf das modell gemapped ist. und daraus kannst du dann den tangent-space ableiten.  oder nicht ? hm..
 _________________
 just my two cents.
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| Fallen JLI MVP
 
  
  
 Alter: 41
 Anmeldedatum: 08.03.2003
 Beiträge: 2860
 Wohnort: Münster
 Medaillen: 1 (mehr...)
 
 
 | 
			
				|  Verfasst am: 04.12.2003, 10:49    Titel: |   |  
				| 
 |  
				| Die UV-Koordinaten brauche ich aber erst im Pixelshader wo ich die ganzen Vektoren schon haben müsste. Das klappt ja auch alles schon. 
 (Muss wohl bald mal meinen Quellcode hochladen)
 _________________
 "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| MadMax82 Mini JLI'ler
 
 
 
 Anmeldedatum: 31.12.2003
 Beiträge: 9
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 31.12.2003, 13:34    Titel: |   |  
				| 
 |  
				| So also das mit den Uv Kordinaten stimmt. Du must erstmal für jedes Dreieck eine Tangnetspace erstellen so bekommst du die benötigten Kordinaten. Hier mal der Code zur erstellung des TangentVectors: 
  	  | Code: |  	  | Dim i, u As Integer Dim fu21, fv21, fu31, fv31 As Single
 Dim vc, vcA, vcB, vcC As Vector3
 Dim tangent As Vector3
 Dim v As VERTEX_NORMAL() = CType(vb.Lock(0, 0), VERTEX_NORMAL())
 For i = 0 To v.GetUpperBound(0) - 1
 u = u + 1
 If u = 3 Then
 fu21 = v(i - 1).tex0.X - v(i - 2).tex0.X
 fv21 = v(i - 1).tex0.Y - v(i - 2).tex0.Y
 fu31 = v(i).tex0.X - v(i - 2).tex0.X
 fv31 = v(i).tex0.Y - v(i - 2).tex0.Y
 
 vcA = MakeVec3(v(i - 1).pos.X - v(i - 2).pos.X, fu21, fv21)
 vcB = MakeVec3(v(i).pos.X - v(i - 2).pos.X, fu31, fv31)
 vc = Vector3.Cross(vcA, vcB)
 If vc.X <> 0 Then
 v(i - 2).Custom1v3.X = -vc.Y / vc.X
 v(i - 2).Custom2v3.X = -vc.Z / vc.X
 End If
 
 vcA = MakeVec3(v(i - 1).pos.Y - v(i - 2).pos.Y, fu21, fv21)
 vcB = MakeVec3(v(i).pos.Y - v(i - 2).pos.Y, fu31, fv31)
 vc = Vector3.Cross(vcA, vcB)
 If vc.X <> 0 Then
 v(i - 2).Custom1v3.Y = -vc.Y / vc.X
 v(i - 2).Custom2v3.Y = -vc.Z / vc.X
 End If
 
 vcA = MakeVec3(v(i - 1).pos.Z - v(i - 2).pos.Z, fu21, fv21)
 vcB = MakeVec3(v(i).pos.Z - v(i - 2).pos.Z, fu31, fv31)
 vc = Vector3.Cross(vcA, vcB)
 If vc.X <> 0 Then
 v(i - 2).Custom1v3.Z = -vc.Y / vc.X
 v(i - 2).Custom2v3.Z = -vc.Z / vc.X
 End If
 
 v(i - 2).Custom1v3.Normalize()
 v(i - 2).Custom2v3.Normalize()
 
 v(i - 1).Custom1v3 = v(i - 2).Custom1v3
 v(i - 1).Custom2v3 = v(i - 2).Custom2v3
 v(i).Custom1v3 = v(i - 2).Custom1v3
 v(i).Custom2v3 = v(i - 2).Custom2v3
 
 v(i - 2).Custom3v3 = Vector3.Cross(v(i - 2).Custom1v3, v(i - 2).Custom2v3)
 v(i - 2).Custom3v3.Normalize()
 If (Vector3.Dot(v(i - 2).Custom3v3, v(i - 2).normal) < 0) Then
 v(i - 2).Custom3v3.Scale(-1)
 End If
 
 v(i - 1).Custom3v3 = Vector3.Cross(v(i - 1).Custom1v3, v(i - 1).Custom2v3)
 v(i - 1).Custom3v3.Normalize()
 If (Vector3.Dot(v(i - 1).Custom3v3, v(i - 1).normal) < 0) Then
 v(i - 1).Custom3v3.Scale(-1)
 End If
 
 v(i).Custom3v3 = Vector3.Cross(v(i).Custom1v3, v(i).Custom2v3)
 v(i).Custom3v3.Normalize()
 If (Vector3.Dot(v(i).Custom3v3, v(i).normal) < 0) Then
 v(i).Custom3v3.Scale(-1)
 End If
 
 u = 0
 End If
 Next
 vb.Unlock()
 
 | 
 So dieser Code berechnet für jedes Dreieck den Tangentenvector. Das gibt eine etwas unschönen Flat Effect du must also noch wie beim GroudShading statt der Face Tangenten die Edge Tangenten berechnen.
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| Fallen JLI MVP
 
  
  
 Alter: 41
 Anmeldedatum: 08.03.2003
 Beiträge: 2860
 Wohnort: Münster
 Medaillen: 1 (mehr...)
 
 
 | 
			
				|  Verfasst am: 31.12.2003, 14:40    Titel: |   |  
				| 
 |  
				| Gibts da denn keine einfachere Möglichkeit ? Die von robx fand ich da ein wenig einfacher (auch wenn sie nicht immer funzt). _________________
 "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| Fallen JLI MVP
 
  
  
 Alter: 41
 Anmeldedatum: 08.03.2003
 Beiträge: 2860
 Wohnort: Münster
 Medaillen: 1 (mehr...)
 
 
 | 
			
				|  Verfasst am: 31.12.2003, 17:42    Titel: |   |  
				| 
 |  
				| Und ich brauche ja die Tangenten... Vectoren für jeden Vertex und nicht nur für jedes Polygon. _________________
 "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
 |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		| MadMax82 Mini JLI'ler
 
 
 
 Anmeldedatum: 31.12.2003
 Beiträge: 9
 
 Medaillen: Keine
 
 
 | 
			
				|  Verfasst am: 01.01.2004, 15:01    Titel: |   |  
				| 
 |  
				| Habe ich doch schon gesagt du must danach einfach über alle Vertexe drübergehen und die die sich eine Ecke Teilen aufsummieren und dan den Mittelwert bilden. |  | 
	
		| Nach oben |  | 
	
		|  | 
	
		|  |