| Eternal_pain 
 
  
 Anmeldungsdatum: 08.08.2006
 Beiträge: 1783
 Wohnort: BW/KA
 
 | 
			
				|  Verfasst am: 29.01.2014, 17:29    Titel: OpenGL Point'n'Light |   |  
				| 
 |  
				| Hab schon wieder ein weilchen nichts gemacht, und wollte einen einfachen Versuch starten... 
 Vorweg mal als Frage ob es so überhaupt machbar ist:
 Ich möchte per OpenGL im Orthogonalen modus Points zeichnen, was auch gut klappt, nun würde ich zusätzlich noch Licht hinzufügen die ensprechend von Position des Lichts und Tiefe der Points auf der Z Achse (wo man im 2D modus sonst ja nichts sieht) einen Beleuchtungseffekt hinbekommen...
 Also die 'Pixel' die weiter oben bzw direkt angetrahlt werden sollen heller sein und jene die von den anderen verdeckt sind dunkler... das ganze soll dann also einen 3D Effekt im 2D modus vermitteln...
 
 Wollte das ganze gern zu einen Bmp/Image Filter/Effekt ausbauen...
 
 mein Versuch:
 
  	  | Code: |  	  | Randomize Timer
 
 #include "GL/gl.bi"
 #include "GL/glu.bi"
 
 Const ScrWidth  as Integer = 640
 Const ScrHeight as Integer = 480
 
 '-------------------------
 ' das Fenster öffnen
 '-------------------------
 Screenres ScrWidth, ScrHeight, 32, , 2
 
 
 '-------------------------
 ' Open-GL Init
 '-------------------------
 glMatrixMode(GL_PROJECTION)
 glLoadIdentity()
 glViewport(0,0,ScrWidth,ScrHeight)
 glOrtho(0, ScrWidth+1, ScrHeight+1, 0, -528, 528)
 'gluPerspective 45.0, ScrWidth/ScrHeight, -128f, 128f
 
 glMatrixMode (GL_MODELVIEW)
 glLoadIdentity()
 'glEnable(GL_CULL_FACE)
 'glCullFace(GL_BACK)
 glClearColor(0.0,0.0,0.3,0.0)
 glClearDepth 1.0
 glEnable GL_DEPTH_TEST
 glClear GL_COLOR_BUFFER_BIT Or GL_DEPTH_BUFFER_BIT
 
 '' Point-Size
 'glShadeModel (GL_SMOOTH)
 glPointSize(1.0f)
 
 '' Light
 glEnable(GL_LIGHTING)
 glEnable(GL_LIGHT0)
 glEnable(GL_COLOR_MATERIAL)
 
 Dim as GLfloat light_ambient(0 to 3) = { 0.0, 0.0, 0.0, 1.0 }
 Dim as GLfloat light_diffuse(0 to 3) = { 1.0, 1.0, 1.0, 1.0 }
 Dim as GLfloat light_specular(0 to 3) = { 1.0, 1.0, 1.0, 1.0 }
 Dim as GLfloat light_position(0 to 3) = { 320.0, 240.0, 527.0, 1.0 }
 'Dim as GLfloat light_position(0 to 3) = { 0.0, 0.0, 527.0, 1.0 }
 
 glLightfv(GL_LIGHT0, GL_AMBIENT, @light_ambient(0))
 glLightfv(GL_LIGHT0, GL_DIFFUSE, @light_diffuse(0))
 glLightfv(GL_LIGHT0, GL_SPECULAR, @light_specular(0))
 glLightfv(GL_LIGHT0, GL_POSITION, @light_position(0))
 
 'glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 0.1)
 
 glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 45.0)
 Dim as GLfloat spot_direction(0 to 2) = { 0.0, 0.0, -1.0 }
 glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, @spot_direction(0))
 
 Dim as Integer D
 
 Do
 glLoadIdentity()
 glClear GL_COLOR_BUFFER_BIT Or GL_DEPTH_BUFFER_BIT
 
 glBegin GL_POINTS
 
 glColor3ub 255,255,255
 
 For x as Integer = 0 to 639
 For y as Integer = 0 to 479
 D = int(rnd*205)
 
 'glColor3ub 255-y/3,255-y/3,255-y/3
 
 glVertex3i  x, y, 527-x'-227 + D'(y/2)
 
 Next y
 Next x
 
 glEnd
 
 glFlush
 flip
 
 sleep 1
 Loop until Multikey(&h01)
 
 
 
 | 
 
 Jedoch sieht man hier nur Beleuchtet/Unbeleuchtet... also weiß/grau ohne Schattierung oder dergleichen... könnte evtl mit der einfachheit des Beispiels zusammenhängen aber auch der Möglichkeit das es so gar nicht funktioniert...
 Hab mit Licht noch nicht sehr viel gearbeitet und hoffe das einer noch ein paar Ideen dazu hat...
 _________________
 
  |  |