Sprites, Vertexe und Licht

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

EPS

Betreff: Sprites, Vertexe und Licht

BeitragMi, Dez 28, 2005 17:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi zusammen, ich hab da ein kleines Problem.

Ich nutze ein paar Vertex Funktionen die ich von BlitzBasic.com habe um 2D Grafiken in 3D darzustellen. Das ganze dient dazu auch Alpha Möglichkeiten zu nutzen.

Mit den Funktionen selbst hab ich kein Problem, klappt alles wie am Schnürchen, jedoch hab ich ein kleines Problem was das Licht angeht.

Wenn ich nämlich zusätzlich zu den "Sprites" ein 3D Modell einbaue, kann ich dieses ja beleuchten indem ich ein Licht erstelle, dieses coloriere usw. Das 3D Modell wird dann entsprechend angeleuchtet.

Der 2D "Sprite" hingegen ändert sich gar nicht. Wieso ist das so? Ist das denn nicht auch ein 3D Objekt welches nur eine Textur hat? Sollte es dann nicht auch sein erscheinen etwas ändern z.B. wenn ich ein rotes Licht nehme?

Zum besseren Verständnis hier einmal die "Sprite" Routinen:

BlitzBasic: [AUSKLAPPEN]

Global cam
Global spritecontrol

Function graphic(width, height, depth, display)
;==============================================================================================================
; Erstelle virtuellen 2D Screen
;==============================================================================================================
Graphics3D Width,Height,Depth,Display

Local aspect#, scale#

cam = CreateCamera()
CameraClsColor cam,80,80,80
CameraRange cam, .1, 1000
CameraClsMode cam, 1, 1

spritecontrol = CreatePivot()

aspect = Float(height) / width
PositionEntity spritecontrol, -1, aspect, 1
scale = 2.0 / width

light = CreateLight(1)
PositionEntity light, -1, aspect, 1
TurnEntity light,90,0,45

ScaleEntity spritecontrol, scale, -scale, -scale
End Function

Function load3dimage(file$, alpha#=1,mode=2)
;==============================================================================================================
; Lädt Image für 3D Darstellung
;==============================================================================================================
Local tempmesh = CreateMesh()
Local tempsurfaceace = CreateSurface(tempmesh)

AddVertex tempsurfaceace,-1,1,0 ,0,0 : AddVertex tempsurfaceace,1,1,0 , 1,0
AddVertex tempsurfaceace,-1,-1,0 ,0,1 : AddVertex tempsurfaceace,1,-1,0 , 1,1
AddTriangle tempsurfaceace,0,1,3
AddTriangle tempsurfaceace,0,3,2

Local temptexture = LoadTexture(file$,mode)
Local size = TextureWidth(temptexture)
EntityTexture tempmesh, temptexture
EntityFX tempmesh,1
EntityParent tempmesh, spritecontrol
ScaleEntity tempmesh, size/2, size/2,1
EntityAlpha tempmesh, alpha

handle3dimage(tempmesh,-1,-1)

Return tempmesh
End Function

Function handle3dimage(Image,HandleX,HandleY)
;==============================================================================================================
; Setze Koordinate des 3D Image auf -1, -1
;==============================================================================================================
Local Surf = GetSurface(Image,1)
VertexCoords Surf,0, VertexX(Surf,0)-HandleX, VertexY(Surf,0)+HandleY, VertexZ(Surf,0)
VertexCoords Surf,1, VertexX(Surf,1)-HandleX, VertexY(Surf,1)+HandleY, VertexZ(Surf,1)
VertexCoords Surf,2, VertexX(Surf,2)-HandleX, VertexY(Surf,2)+HandleY, VertexZ(Surf,2)
VertexCoords Surf,3, VertexX(Surf,3)-HandleX, VertexY(Surf,3)+HandleY, VertexZ(Surf,3)
End Function

Function draw3dimage(image, x, y, frame=0)
;==============================================================================================================
; Zeichnet 3D Image
;==============================================================================================================
Local brush = GetEntityBrush(image)
Local tex = GetBrushTexture(brush)

EntityTexture image, tex, frame

PositionEntity image, x-.5, y-.5, 0

End Function
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier

Man kann sich öfter als zweimal im Leben halb tot lachen.

Mr.Keks

BeitragMi, Dez 28, 2005 19:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Das liegt an der Zeile:
BlitzBasic: [AUSKLAPPEN]
EntityFX tempmesh,1 


Da einfach ne 0 statt der 1 hin und die Sprites werden auch beleuchtet. Allerdings sieht das nicht unbedingt hübsch aus... An deiner Stelle würde ich die Sprites lieber manuell mit ql:entitycolor einfärben. Wenns auch so mit Licht gut aussieht, dann is ok.
MrKeks.net

EPS

BeitragMi, Dez 28, 2005 20:00
Antworten mit Zitat
Benutzer-Profile anzeigen
EntityColor bringt den erwünschten Effekt...und wieder was gelernt - DANKE
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier

Man kann sich öfter als zweimal im Leben halb tot lachen.

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group