Vertex Lighting

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Suco-X

Betreff: Vertex Lighting

BeitragFr, Feb 27, 2004 12:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Mfg Suco-X
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
  • Zuletzt bearbeitet von Suco-X am So, Feb 29, 2004 2:09, insgesamt einmal bearbeitet

Jan_

Ehemaliger Admin

BeitragFr, Feb 27, 2004 13:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Fein, aber macht das nicht BB auch, mit crete light in Live und schneller?

Aber, sweet! Weiter so!

[Edit="Editieren, weil code Archiev"]Oh, das mit der Light begrenzung auf 8 kenne ich noch garnicht Evil or Very Mad [/edit]
between angels and insects
  • Zuletzt bearbeitet von Jan_ am Fr, Feb 27, 2004 14:41, insgesamt einmal bearbeitet

Suco-X

Betreff: .....

BeitragFr, Feb 27, 2004 13:40
Antworten mit Zitat
Benutzer-Profile anzeigen
bye
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
  • Zuletzt bearbeitet von Suco-X am So, Feb 29, 2004 2:10, insgesamt einmal bearbeitet
 

lettorTrepuS

BeitragFr, Feb 27, 2004 18:11
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

Mr.Keks

BeitragFr, Feb 27, 2004 19:21
Antworten mit Zitat
Benutzer-Profile anzeigen
habe mal versucht, es auf normalrichtung umzustellen =)... und es läuft verdammt gut dafür, dass ich in der schule noch kein sin+cos hatte und ich auch noch nie etwas mit normals gemacht habe =)
Code: [AUSKLAPPEN]
Graphics3D 1024,768,16,2
SetBuffer BackBuffer()

SeedRnd(MilliSecs())


camera = CreateCamera()
PositionEntity camera,10,10,-1
CameraClsColor camera,255,255,255
TurnEntity camera,45,0,0

licht = CreateSphere()
ScaleEntity licht,.5,.5,.5
PositionEntity licht,10,6,10
EntityColor licht,255,255,0
EntityFX licht,1


boden = CreateBoden(20,20)
;PositionMesh boden, 10, 0, 10
PositionEntity boden, 10, 0, 10
EntityFX boden, 17+2


For i = 0 To 50
   cube = CreateCylinder(5)
   ScaleMesh cube,.8,Rnd(.6,1),.8
   PositionMesh cube,Rnd(2,18)-10,.5,Rnd(2,18)-10
   AddMesh(cube, boden)
   FreeEntity cube
Next



MoveEntity licht, -10, -1, -10
PositionMesh licht, 20, 0, 20
EntityPickMode boden, 2
Repeat
surface = GetSurface(boden,1)

tlx# = EntityX(licht)
tly# = EntityY(licht)
tlz# = EntityZ(licht)
   
For i = 0 To  CountTriangles(surface)
   For i2 = 0 To 2
      vert1 = TriangleVertex(surface,i,i2)
      vertx# = VertexX(surface, vert1)
      verty# = VertexY(surface, vert1)
      vertz# = VertexZ(surface, vert1)
      
      akat# = vertx-tlx
      gkat# = verty-tly
      nkat# = vertz-tlz
      
      hyp1# = CoordinateDistance2d(vertx, verty, tlx, tly)
      hyp2# = CoordinateDistance2d(vertx, vertz, tlx, tlz)
      
      co#   = akat#/hyp1
      si#   = gkat#/hyp1
      nco#  = nkat#/hyp2
      
      farbe1 = 255-CoordinateDistance(co#, si#, nco#, -VertexNX(surface, vert1), -VertexNY(surface, vert1), -VertexNX(surface, vert1))*180
      
      VertexColor(surface,vert1, farbe1, farbe1,farbe1)
   Next
Next

MoveEntity licht, (Cos(vv#)*.16+Cos(bb#)*.16)/2, Sin(vv#)*.12, (Cos(bb#)*.16+Cos(vv#)*.16)/2

vv# = vv# + 4
bb# = bb# + 2

RotateMesh boden, 0, .1, 0

RenderWorld


Color 0,0,0
Text 0,0,"Gerenderte Dreiecke: "+TrisRendered()


Flip
Until KeyHit(1)

ClearWorld()
End

Function CoordinateDistance#(x1#,y1#,z1#,x2#,y2#,z2#)
Local abstand#

   abstand = Sqr(((x1-x2)^2)+((y1-y2)^2)+((z1-z2)^2))
   
Return abstand
End Function

Function CoordinateDistance2d#(x1#,y1#,x2#,y2#)
Local abstand#

   abstand = Sqr(((x1-x2)^2)+((y1-y2)^2))
   
Return abstand
End Function


Function CreateBoden(xstep = 20, zStep = 20)
Local final_mesh = CreateMesh()
Local final_surface = CreateSurface(final_mesh)
Local vertex[5]


For x = 0 To xstep-1
   For z = 0 To zStep-1
   
   vertex[0] = AddVertex(final_surface,x-xstep/2,0,z-zStep/2,0,0)
   vertex[1] = AddVertex(final_surface,x-xstep/2,0,z-zStep/2-1,0,1)
   vertex[2] = AddVertex(final_surface,x-xstep/2+1,0,z-zStep/2-1,1,1)
   
   vertex[3] = AddVertex(final_surface,x-xstep/2,0,z-zStep/2,0,0)
   vertex[4] = AddVertex(final_surface,x-xstep/2+1,0,z-zStep/2,1,0)
   vertex[5] = AddVertex(final_surface,x-xstep/2+1,0,z-zStep/2-1,1,1)
   
   AddTriangle(final_surface, vertex[0], vertex[1], vertex[2])
   AddTriangle(final_surface, vertex[3], vertex[4], vertex[5])
   
   UpdateNormals(final_mesh)
   Next
Next

Return final_mesh
End Function


edit: scheint vielleicht doch noch ein bug drin zu sein Smile
edit2: hrm, habe den fehler kaum mehr sichtbar gemacht, doch ich habe das gefühl, er ist immernoch da Wink
edit3: mensch, bei meinen fehlerkorrekturversuchen stoße ich wirklich auf die interessantesten effekte ===)
MrKeks.net

Suco-X

Betreff: ....

BeitragFr, Feb 27, 2004 19:55
Antworten mit Zitat
Benutzer-Profile anzeigen
bye
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
  • Zuletzt bearbeitet von Suco-X am So, Feb 29, 2004 2:10, insgesamt einmal bearbeitet

Mr.Keks

BeitragFr, Feb 27, 2004 20:02
Antworten mit Zitat
Benutzer-Profile anzeigen
klar ist das lahm... winkelähnlichkeit ist imho auch etwas komplexer zu berechnen als abstand Wink

und, nunja, es ist ja auch nur eine spielerei =)
MrKeks.net

Suco-X

Betreff: ......

BeitragFr, Feb 27, 2004 20:15
Antworten mit Zitat
Benutzer-Profile anzeigen
bye
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
  • Zuletzt bearbeitet von Suco-X am So, Feb 29, 2004 2:10, insgesamt einmal bearbeitet

Mr.Keks

BeitragSa, Feb 28, 2004 8:40
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm, ich rieche ein missverständnis. =)

ansonsten verstehe ich nicht, wie du zu dieser antwort kamst ^^

du sagst, meins sei lahm. ich bestätige und weise darauf hin, dass winkelberechnungen immer etwas lahmer sind als bloße abstände. du bist plötzlich sauer und erzählst etwas davon, dass du erst seit gestern programmieren würdest und ich dir weiterhelfen solle, statt zu sagen, dass es lahm ist. außerdem sagst du noch für mich gerade zusammenhangloses von trashen und modrechten.

fehler scheint größtenteils behoben... außerdem habe ich jetzt eine kombination aus normalrichtung und abstand zur farbermittlung.

der fehler lag übrigens teilweise daran, dass im alten code scheinbar nicht die relativen werte von vertexx,y und z nicht beachtet wurden...
Code: [AUSKLAPPEN]
Graphics3D 1024,768,16,2
SetBuffer BackBuffer()

SeedRnd(MilliSecs())


camera = CreateCamera()
PositionEntity camera,10,10,-1
CameraClsColor camera,255,255,255
TurnEntity camera,45,0,0

licht = CreateSphere(4)
ScaleEntity licht,.5,.5,.5
PositionEntity licht,10,6,10
EntityColor licht,255,255,0
EntityFX licht,1


boden = CreateBoden(20,20)
PositionEntity boden, 10, 0, 10
EntityFX boden, 17+2


For i = 0 To 50
   cube = CreateCylinder(5)
   ScaleMesh cube,.8,Rnd(.6,1),.8
   PositionMesh cube,Rnd(2,18)-10,.5,Rnd(2,18)-10
   AddMesh(cube, boden)
   FreeEntity cube
Next



MoveEntity licht, 0, -5, 0
EntityPickMode boden, 2

Repeat
surface = GetSurface(boden,1)

tlx# = EntityX(licht)-EntityX(boden)
tly# = EntityY(licht)-EntityY(boden)
tlz# = EntityZ(licht)-EntityZ(boden)
   
For i = 0 To  CountTriangles(surface)
   For i2 = 0 To 2
      vert1 = TriangleVertex(surface,i,i2)
      vertx# = VertexX(surface, vert1)
      verty# = VertexY(surface, vert1)
      vertz# = VertexZ(surface, vert1)
      
      akat# = vertx-tlx
      gkat# = verty-tly
      nkat# = vertz-tlz
      
      dist# = CoordinateDistance(vertx, verty, vertz, tlx, tly, tlz)

      co#   = akat#/dist
      si#   = gkat#/dist
      nco#  = nkat#/dist
      
      winkc = 255-CoordinateDistance(co#, si#, nco#, -VertexNX(surface, vert1), -VertexNY(surface, vert1), -VertexNX(surface, vert1))*140
      distc = 255-dist#*40
      
      farbe1 = (winkc+distc) Sar 1
      
      VertexColor(surface,vert1, farbe1, farbe1,farbe1)
   Next
Next

MoveEntity licht, (Cos(vv#)*.16+Cos(bb#)*.16)/2, Sin(vv#)*.22, (Cos(bb#+vv#)*.16+Cos(vv#)*.16)/2

vv# = vv# + 4
bb# = bb# + 2

RotateMesh boden, 0, .1, 0

RenderWorld


Color 0,0,0
Text 0,0,"Gerenderte Dreiecke: "+TrisRendered()

Flip
Until KeyHit(1)

ClearWorld()
End

Function CoordinateDistance#(x1#,y1#,z1#,x2#,y2#,z2#)
Local abstand#

   abstand = Sqr(((x1-x2)^2)+((y1-y2)^2)+((z1-z2)^2))
   
Return abstand
End Function

Function CoordinateDistance2d#(x1#,y1#,x2#,y2#)
Local abstand#

   abstand = Sqr(((x1-x2)^2)+((y1-y2)^2))
   
Return abstand
End Function


Function CreateBoden(xstep = 20, zStep = 20)
Local final_mesh = CreateMesh()
Local final_surface = CreateSurface(final_mesh)
Local vertex[5]


For x = 0 To xstep-1
   For z = 0 To zStep-1
   
   vertex[0] = AddVertex(final_surface,x-xstep/2,0,z-zStep/2,0,0)
   vertex[1] = AddVertex(final_surface,x-xstep/2,0,z-zStep/2-1,0,1)
   vertex[2] = AddVertex(final_surface,x-xstep/2+1,0,z-zStep/2-1,1,1)
   
   vertex[3] = AddVertex(final_surface,x-xstep/2,0,z-zStep/2,0,0)
   vertex[4] = AddVertex(final_surface,x-xstep/2+1,0,z-zStep/2,1,0)
   vertex[5] = AddVertex(final_surface,x-xstep/2+1,0,z-zStep/2-1,1,1)
   
   AddTriangle(final_surface, vertex[0], vertex[1], vertex[2])
   AddTriangle(final_surface, vertex[3], vertex[4], vertex[5])
   
   Next
Next

For i = 0 To CountTriangles (final_mesh)
   For i2 = 0 To 2
      vert = TriangleVertex(final_surface,i,i2)
      nx#=VertexNX(final_surface,vert)
      ny#=-VertexNY(final_surface,vert)
      nz#=VertexNZ(final_surface,vert)
      VertexNormal final_surface,vert,0,1,0
   Next
Next

Return final_mesh
End Function


EDIT vom 06.03.04: ich brauchte eben eine codepassage und während ich diese herausnahm und modifizierte, fielen mir zwei entscheidende fehler auf. ich habe sie mal beseitigt und bin jetzt richtig zufrieden ^^.

Code: [AUSKLAPPEN]
Graphics3D 1024,768,16,2
SetBuffer BackBuffer()

SeedRnd(MilliSecs())


camera = CreateCamera()
PositionEntity camera,10,10,-1
CameraClsColor camera,255,255,255
TurnEntity camera,45,0,0

licht = CreateSphere(4)
ScaleEntity licht,.5,.5,.5
PositionEntity licht,10,6,10
EntityColor licht,255,255,0
EntityFX licht,1


boden = CreateBoden(20,20)
PositionEntity boden, 10, 0, 10
EntityFX boden, 1+2


For i = 0 To 50
   cube = CreateCylinder(5)
   ScaleMesh cube,.8,Rnd(.6,1),.8
   PositionMesh cube,Rnd(2,18)-10,.5,Rnd(2,18)-10
   AddMesh(cube, boden)
   FreeEntity cube
Next



MoveEntity licht, 0, -5, 0
EntityPickMode boden, 2

Repeat
surface = GetSurface(boden,1)

tlx# = EntityX(licht)-EntityX(boden)
tly# = EntityY(licht)-EntityY(boden)
tlz# = EntityZ(licht)-EntityZ(boden)
   
For i = 0 To  CountTriangles(surface)
   For i2 = 0 To 2
      vert1 = TriangleVertex(surface,i,i2)
      vertx# = VertexX(surface, vert1)
      verty# = VertexY(surface, vert1)
      vertz# = VertexZ(surface, vert1)
      
      akat# = vertx-tlx
      gkat# = verty-tly
      nkat# = vertz-tlz
      
      dist# = CoordinateDistance(vertx, verty, vertz, tlx, tly, tlz)

      co#   = akat#/dist
      si#   = gkat#/dist
      nco#  = nkat#/dist
      
      winkc = 255-CoordinateDistance(co#, si#, nco#, -VertexNX(surface, vert1), -VertexNY(surface, vert1), -VertexNZ(surface, vert1))*140
      distc = 255-dist#*40
      
      farbe1 = (winkc+distc) Sar 1
      
      VertexColor(surface,vert1, farbe1, farbe1,farbe1)
   Next
Next

MoveEntity licht, (Cos(vv#)*.16+Cos(bb#)*.16)/2, Sin(vv#)*.22, (Cos(bb#+vv#)*.16+Cos(vv#)*.16)/2

vv# = vv# + 4
bb# = bb# + 2

RotateMesh boden, 0, .1, 0

RenderWorld


Color 0,0,0
Text 0,0,"Gerenderte Dreiecke: "+TrisRendered()

Flip
Until KeyHit(1)

ClearWorld()
End

Function CoordinateDistance#(x1#,y1#,z1#,x2#,y2#,z2#)
Local abstand#

   abstand = Sqr(((x1-x2)^2)+((y1-y2)^2)+((z1-z2)^2))
   
Return abstand
End Function

Function CoordinateDistance2d#(x1#,y1#,x2#,y2#)
Local abstand#

   abstand = Sqr(((x1-x2)^2)+((y1-y2)^2))
   
Return abstand
End Function


Function CreateBoden(xstep = 20, zStep = 20)
Local final_mesh = CreateMesh()
Local final_surface = CreateSurface(final_mesh)
Local vertex[5]


For x = 0 To xstep-1
   For z = 0 To zStep-1
   
   vertex[0] = AddVertex(final_surface,x-xstep/2,0,z-zStep/2,0,0)
   vertex[1] = AddVertex(final_surface,x-xstep/2,0,z-zStep/2-1,0,1)
   vertex[2] = AddVertex(final_surface,x-xstep/2+1,0,z-zStep/2-1,1,1)
   
   vertex[3] = AddVertex(final_surface,x-xstep/2,0,z-zStep/2,0,0)
   vertex[4] = AddVertex(final_surface,x-xstep/2+1,0,z-zStep/2,1,0)
   vertex[5] = AddVertex(final_surface,x-xstep/2+1,0,z-zStep/2-1,1,1)
   
   AddTriangle(final_surface, vertex[2], vertex[1], vertex[0])
   AddTriangle(final_surface, vertex[3], vertex[4], vertex[5])
   
   Next
Next

For i = 0 To CountTriangles (final_mesh)
   For i2 = 0 To 2
      vert = TriangleVertex(final_surface,i,i2)
      nx#=VertexNX(final_surface,vert)
      ny#=-VertexNY(final_surface,vert)
      nz#=VertexNZ(final_surface,vert)
      VertexNormal final_surface,vert,0,1,0
   Next
Next

Return final_mesh
End Function
MrKeks.net

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group