GLBasic Benutzerhandbuch

Main sections

X_SPOT_LT

X_SPOT_LT num#, col#, x#, y#, z#, dirx#, diry#, dirz#, cutoff#



Schaltet ein Spotlicht ein.

num# ist die Nummer des Lichts (0-7 erlaubt)
col# ist die Farbe. Siehe RGB()
x#, y#, z# sind die Koordinaten der Lichtposition
dirx#, diry#, dirz# spezifizieren einen Vektor, der die Richtung des Lichts angibt.
cutoff# ist der Winkel der Abblende des Lichts. Bei 180 wird ein paralleles Licht erzeugt.
Wird ein Winkel von 0 eingegeben, ist das Licht abgeschalten.

Spezialitäten


Mit X_SPOT_LT erzeugt man Lichtquellen für Spezialeffekte. Dabei ist num# entscheidend für den Effekt.
<B>Achtung</B>
Dabei muss der CULLMODE auf -1 oder 1 stehen!

num# = -1: Bump Mapping


Die 2. Textur wird als "Beulen" Textur verwendet. Dabei sind dunkle Pixel auf der Bump-Textur eine Senke und helle eine Erhebung.
Es werden nur die Koordinaten x#, y#, z# ausgewertet. Man müssen vorher mit LOADBUMPTEXTURE und LOADSPRITE 2 Texturen geladen worden sein und mit X_SETTEXTURE angegeben. Für ein Beispiel siehe LOADBUMPTEXTURE

num# = -2 : Toon Shading


Auch Cel-Shading order Cartoon Rendering genannt. Hier wird eine Lichtberechnung durchgeführt, die nicht linear, sondern in 2 Helligkeitsstufen geschieht. Dadurch wird ein Effekt erzielt, der einem Comic sehr ähnlich ist. Wenn man mit X_SETTEXTURE eine Texut angibt, so wird diese darübergelegt. Somit kann man z.B. Gesichter oder andere Details auf die Figur bringen. Es wird nur die Position des Lichts berücksichtigt: x#, y#, z#.

num# = -3: Schatten


Echtzeit Schatten mit Stencil Buffer. Funktioniert so:
- die ganze Szene zeichnen
- X_SPOT_LT -3, 0, x,y,z, 0,0,0, 360
dieses Licht ist die Lichtquelle und Schattenrichtung
- X_DRAWOBJ für alle schattenwerfende Objekte
- X_MAKE2D/SHOWSCREEN/X_MAKE3D
Das zeichnet die Schatten letztendlich.
- die Farbe wird zum färben des Schattenbereichs verwendet.

// --------------------------------- //
// Project: ToonShading
// Start: Wednesday, October 07, 2004
// IDE Version: 2.41007

CreateTorus(1, 5, 10, 24, 24, 2, 2)
// Bild-Daten / Image data
// LOADSPRITE "image.bmp", 0
DRAWRECT 0,0,64,64,RGB(0xff,0xff,0xff)
DRAWRECT 0,28,64,9,RGB(0,0,0xff)
PRINT "GLBASIC", 0,24
GRABSPRITE 0, 0,0, 64,64

// Hauptschleife / main loop
WHILE TRUE
DRAWRECT 0,0,640,480,RGB(0,0,200)
phi=phi+GETTIMER()/30
X_MAKE3D 1, 250, 45
X_CAMERA 0, 10, 100, 0,0,0
// Licht Nr. -2 is Cel-Shading Postition / Light no -1 is cel shading position
X_SPOT_LT -2, 0, 0,0,100, 0,0,0,90
X_SETTEXTURE 0, -1 // 0=Tex
X_ROTATION 90, 1,0,0
X_ROTATION phi, 0, 1, 0.1
X_DRAWOBJ 1, 0
SHOWSCREEN
WEND

// ------------------------------------------------------------- //
// -=# CREATETORUS #=-
// Donut Objekt machen / Make a donut object
//
// By Samuel R. Buss
// http://math.ucsd.edu/~sbuss/MathCG
// ------------------------------------------------------------- //
FUNCTION CreateTorus: num, MinorRadius, MajorRadius, NumWraps, NumPerWrap, TextureWrapVert, TextureWrapHoriz
LOCAL i, di, j, wrapFrac, wrapFracTex, phi, thetaFrac, thetaFracTex, theta
LOCAL x, y, z, r

X_AUTONORMALS 2 // smooth
X_OBJSTART num
FOR di=0 TO NumWraps-1
FOR j=0 TO NumPerWrap
FOR i=di+1 TO di STEP -1
wrapFrac = MOD(j, NumPerWrap)/NumPerWrap
wrapFracTex = j/NumPerWrap
phi = 360*wrapFrac
thetaFrac = (MOD(i, NumWraps + wrapFracTex)/NumWraps
thetaFracTex = (i+wrapFracTex)/NumWraps
theta = 360*thetaFrac
r = MajorRadius + MinorRadius*COS(phi)
x = SIN(theta)*r
z = COS(theta)*r
y = MinorRadius*SIN(phi)
X_OBJADDVERTEX x,y,z, thetaFracTex*TextureWrapVert, 1-wrapFracTex*TextureWrapHoriz, _
RGB(0xff,0xff,0xff)
NEXT
NEXT
X_OBJNEWGROUP
NEXT
X_OBJEND
ENDFUNCTION // y

See also...