vertexnormal

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

bjh

Betreff: vertexnormal

BeitragSa, Apr 13, 2013 11:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

wie kann ich die Vertexnormalen einer Map ganz einfach berechnen?

Das Updatenormals ist mir zu langsam und alles was ich selbst ausprobiert hab, funktioniert nicht.
Und weil ich genau weis, wo die einzelnen Vertices liegen, sollte das doch kein großes Problem sein.

Wie kann ich zum Beispiel bei einem 3*3 Feld das mittlere Vertex berechnen?

0 0 0
0 ? 0
0 0 0

Die 0-en stehen für zufällige Werte.

Xeres

Moderator

BeitragSa, Apr 13, 2013 12:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Du möchtest etwas selbst schreiben, was schneller ist als Updatenormals? Der Befehl müsste schon signifikant schlecht implementiert worden sein.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

bjh

BeitragSa, Apr 13, 2013 12:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Updatenormals muss erst noch die Flächen zusammensuchen oder so.
Updatenormals ist nicht für mein Problem optimiert.
 

bjh

BeitragSo, Apr 14, 2013 11:07
Antworten mit Zitat
Benutzer-Profile anzeigen
so jetzt hab ich selbst geschafft und meine lösung ist doppelt so schnell wie updatenormals Exclamation Exclamation Exclamation

BladeRunner

Moderator

BeitragSo, Apr 14, 2013 12:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Na dann teile sie doch mit uns...
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

bjh

BeitragSo, Apr 14, 2013 13:04
Antworten mit Zitat
Benutzer-Profile anzeigen
erstmal errechnet man sich den höhenunterschied der x- und z- richtung.
also das vorherige vertexy minus das nächste vertexy in x- und z- richtung.

dann zieht man die wurzel (aus der addition der unterschiede und dem horizontalen abstand der punkte).

dann teilt man das ergebnis der x-richtung durch das ergebnis der wurzel und hat vertexnx
dann teilt man den horizontalen abstand durch das ergebnis der wurzel und hat vertexny
dann teilt man das ergebnis der z-richtung durch das ergebnis der wurzel und hat vertexnz

BlitzBasic: [AUSKLAPPEN]
	s=CreateSurface(map_m)
For x=0 To 64
For y=0 To 64
AddVertex(s,x*10-320,map_i(x+224,y+224),y*10-320,x+224,y+224)
AddVertex(s,x*20-640,map_i(x*2+192,y*2+192),y*20-640,x*2+192,y*2+192)
AddVertex(s,x*40-1280,map_i(x*4+128,y*4+128),y*40-1280,x*4+128,y*4+128)
AddVertex(s,x*80-2560,map_i(x*8,y*8),y*80-2560,x*8,y*8)
Next
Next

For x=0 To 64
For y=0 To 64
For z=0 To 3
e=2^z
c#=map_i((x*e-e+(8-e)*32+512)Mod 512,y*e+(8-e)*32)-map_i((x*e+e+(8-e)*32+512)Mod 512,y*e+(8-e)*32)
d#=map_i(x*e+(8-e)*32,(y*e-e+(8-e)*32+512)Mod 512)-map_i(x*e+(8-e)*32,(y*e+e+(8-e)*32+512)Mod 512)
h#=Sqr(c*c+d*d+e^2*400)
VertexNormal s,(y+x*65)*4+z,c/h,20*e/h,d/h
Next
Next
Next

For x=0 To 63
For y=0 To 63
AddTriangle s,(x+y*65)*4,(x+y*65+1)*4,(x+y*65+65)*4
AddTriangle s,(x+y*65+1)*4,(x+y*65+66)*4,(x+y*65+65)*4
If (x<16 Or x>47)Or(y<16 Or y>47)
For z=1 To 3
AddTriangle s,(x+y*65)*4+z,(x+y*65+1)*4+z,(x+y*65+65)*4+z
AddTriangle s,(x+y*65+1)*4+z,(x+y*65+66)*4+z,(x+y*65+65)*4+z
Next
EndIf
Next
Next


ich hab keine lust das genauer zu erklären.

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group