"texturlöcher"

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

bjh

Betreff: "texturlöcher"

BeitragFr, Okt 11, 2013 15:10
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo community,

es geht darum, dass ich meinen figuren texturen zuweise, die die körperoberfläche zeigen, und darüber texturen lege, die dann die kleidung sind.
dort, wo die kleidung schwarz ist, soll man durch schauen können.

wenn ich die kleidung mit flag 4 und textureblend 1 lade, dann funktioniert das.
das problem ist jetzt aber, dass die kleidung nicht mehr auf beleuchtung reagiert.

wie kann ich dem entgegenwirken?

Abrexxes

BeitragFr, Okt 11, 2013 18:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Gar nicht. Das liegt daran das Moderne Grafikkarten zwar "perse" DX7 kompatibel sind, die Treiber das aber nicht mehr unterstützen. Es gibt bei blitzbasic.com diverse Threads wie man verschiedene Probleme umgehen kann, aber leider nicht alle. Teilweise können moderne Graka Treiber nicht mal mehr einen Alpha Kanal (directDraw,MaskImage) bei 2D erkennen wenn DX7 im Spiel ist.

Alternative = Blitzmax = DX9 DX10 und Beta DX11

cu
 

mpreu

BeitragFr, Okt 11, 2013 18:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Alternative = NuclearBasic = DX9 (DX11 in Arbeit)
sorry wegen der Werbung

AnniXa

BeitragFr, Okt 11, 2013 18:49
Antworten mit Zitat
Benutzer-Profile anzeigen
nun alternativen gibt es viele, selbst mit monkey geht inzwischen minib3d und openGL sowieso
|moonForge|
Ich bin Pokémon Meisterin seit 1998!

DAK

BeitragFr, Okt 11, 2013 21:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Und wenn man weiter denkt, dann gäbe es da noch Unity und JME3, sowie ganz viele andere tolle Sachen.

Auch wenn man es nicht war haben will, B3D ist so ziemlich tot. (Wäre mal ein interessantes Projekt, einen Compiler zu machen, der B3D-Code in eine andere Sprache & Engine übersetzt)
Gewinner der 6. und der 68. BlitzCodeCompo
 

Kruemelator

BeitragSa, Okt 12, 2013 1:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn man sich ein wenig einarbeitet könnte man die Beleuchtung mit in einem zweiten Render-Pass machen und dann mit dem vorherien multiplizieren. Wäre dann praktisch Deferred-Shading (einfach bei Google eingeben).
Funktioniert ungefähr so:
1. Rendern aber nur die Farben, kein Licht. Ergebnis in Textur kopieren.
2. Nochmal Rendern aber diesmal für Beleuchtung.
3. Beides kombinieren (multiplizieren)
 

bjh

BeitragSa, Okt 12, 2013 1:27
Antworten mit Zitat
Benutzer-Profile anzeigen
naja, ich denke, dann gerzichte ich einfach auf diese transparenz.
ich machs einfach so, dass die verschiedenen personen am gesicht unterschieden werden können, der rest is mir egal.
trotzdem vielen dank für die antworten Wink
 

Kruemelator

BeitragSa, Okt 12, 2013 1:48
Antworten mit Zitat
Benutzer-Profile anzeigen
So kompliziert ist meine Idee garnicht, ich schreibe dir mal ein Beispielprogramm.

Edit:
So hier habe ich jetzt ein Beispiel wo eine Holzkiste einen roten Text aufgedruckt hat. Der Text wäre bei dir also die Kleidung und die Kiste die Haut des Menschen.
Außerdem habe ich noch eine weitere Textur gemacht um Ambient Occlusion zu immitieren, diese kann aber komplett weggelassen werden.
Denk daran das alle Objekte 2mal (3mal da Rechteck auch nochmal gerendert werden muss) gerendert werden.
Wenn es fragen gibt einfach stellen.
BlitzBasic: [AUSKLAPPEN]
;Allgemein----------------------------------------
Global xfenster = 800
Global yfenster = 600

Global mx
Global my
Global mz
Global mxs
Global mys
Global mzs
Global mht1
Global mht2

Graphics3D xfenster,yfenster,32,2
SetBuffer BackBuffer()
ClsColor 127,127,127

MoveMouse xfenster/2,yfenster/2

;3D-----------------------------------------------
Global camera = CreateCamera()
CameraRange camera,0.1,1000
CameraClsColor camera,127,127,127
PositionEntity camera,0,0,-5
Global helligkeit = 50
AmbientLight helligkeit,helligkeit,helligkeit
Global light = CreateLight()
LightColor light,255,255,255


;Texturen-----------------------------------------
;Farbe (Holz)
Global cubetexcol = CreateTexture(128,128)
buf = TextureBuffer(cubetexcol)
SetBuffer buf
For i=0 To 7
Color 150+Rnd(-10,20),120+Rnd(-5,5),50
Rect i*16,0,128/8,128,1
Next
Color 150+Rnd(-10,20),100+Rnd(-5,5),50
Rect 0,0,128,128/8,1
Color 150+Rnd(-10,20),100+Rnd(-5,5),50
Rect 0,128-16,128,128/8,1
Color 150+Rnd(-10,20),100+Rnd(-5,5),50
Rect 0,0,128/8,128,1
Color 150+Rnd(-10,20),100+Rnd(-5,5),50
Rect 128-16,0,128/8,128,1
SetBuffer BackBuffer()


;Aufdruck
font = LoadFont("Arial Black",50)
SetFont(font)
font2 = LoadFont("Arial Black",20)
image = CreateImage(256,128)
SetBuffer ImageBuffer(image)
Color 240,0,0
Rect 0,0,256,128,1
Color 255,0,0
Text 128-StringWidth("Vorsicht!")/2,30,"Vorsicht!"
SetFont(font2)
Text 128-StringWidth("Zerbrechlicher Inhalt")/2,70,"Zerbrechlicher Inhalt"
SetBuffer BackBuffer()
RotateImage image,20
FreeFont font
FreeFont font2
Global printtexcol = CreateTexture(256,256,4)
buf = TextureBuffer(printtexcol)
CopyRect 0,0,256,256,27,20,ImageBuffer(image),buf
FreeImage image
;Transparenz hinzufuegen
LockBuffer(buf)
For y=0 To 255
For x=0 To 255
rgb = ReadPixelFast(x,y,buf)
rgb = (rgb And $FFFFFF) + $FF000000 * ((rgb And $FF0000)/$10000 >= 250 );farbe + durchsichtigmachen wenn rot >= 250 ist
WritePixelFast x,y,rgb,buf
Next
Next
UnlockBuffer(buf)
TextureBlend printtexcol,1


;Lightmap (schwarzweiss)
Global lighttex = CreateTexture(128,128)
buf = TextureBuffer(lighttex)
SetBuffer buf
tief = 127
hoch = 255
Color tief,tief,tief
Rect 0,0,128,128,1
Color hoch,hoch,hoch
For i=0 To 7
Rect i*16+1,0+1,128/8-2,128-2,1
Next
Color hoch,hoch,hoch
Rect 0,0,128,128/8,1
Color tief,tief,tief
Rect 0,0,128,128/8,0
Color hoch,hoch,hoch
Rect 0,128-16,128,128/8,1
Color tief,tief,tief
Rect 0,128-16,128,128/8,0
Color hoch,hoch,hoch
Rect 0,0,128/8,128,1
Color tief,tief,tief
Rect 0,0,128/8,128,0
Color hoch,hoch,hoch
Rect 128-16,0,128/8,128,1
Color tief,tief,tief
Rect 128-16,0,128/8,128,0
SetBuffer BackBuffer()
LockBuffer(buf)
For y=0 To 127
For x=0 To 127
rgb = ReadPixelFast(x,y,buf)
h = (rgb And $FF)
h = h + Rand(-30,0)
rgb = h*$10000 + h*$100 + h
WritePixelFast x,y,rgb,buf
Next
Next
UnlockBuffer(buf)
TextureBlend lighttex,2

;Weisse Texture
Global weisstex = CreateTexture(1,1)
WritePixel 0,0,$FFFFFF,TextureBuffer(weisstex)


;FarbeMerken--------------------------------------
Global farbemerkentex = CreateTexture(1024,1024,256)
Global lichtmerkentex = CreateTexture(1024,1024,256)
TextureBlend farbemerkentex,2
TextureBlend lichtmerkentex,2

Global farbemerkenrechteck = CreateMesh()
surface = CreateSurface(farbemerkenrechteck)
v0 = AddVertex(surface, -1,-1,0, 0.5/1024.0,1+0.5/1024.0)
v1 = AddVertex(surface, 1,-1,0, 1+0.5/1024.0,1+0.5/1024.0)
v2 = AddVertex(surface, 1, 1,0, 1+0.5/1024.0,0.5/1024.0)
v3 = AddVertex(surface, -1, 1,0, 0.5/1024.0,0.5/1024.0)
AddTriangle(surface,v0,v2,v1)
AddTriangle(surface,v0,v3,v2)
EntityColor farbemerkenrechteck,255,255,255
EntityFX farbemerkenrechteck,1
wert# = Float(xfenster)/Float(yfenster) * 0.96 * (800.0/Float(xfenster))^2 * Float(yfenster)/600.0;Warum 0.96 habe ich nicht die geringste Ahnung, ist aber der Wert wo es kein Verwischen gibt.
ScaleEntity farbemerkenrechteck,0.11*wert,0.11*wert,1
HideEntity farbemerkenrechteck

EntityTexture farbemerkenrechteck,farbemerkentex,0,0
EntityTexture farbemerkenrechteck,lichtmerkentex,0,1


;Start--------------------------------------------
Global cube = CreateCube()


;Hauptschleife------------------------------------
fps = CreateTimer(60)
While Not KeyHit(1)
WaitTimer(fps)
Cls
WireFrame KeyDown(57)
mx = MouseX()
my = MouseY()
mz = MouseZ()
mxs = MouseXSpeed()
mys = MouseYSpeed()
mzs = MouseZSpeed()
mht1 = MouseHit(1)
mht2 = MouseHit(2)
time = MilliSecs()


cammove()

RotateEntity light,0,MilliSecs()/10,0


UpdateWorld()
Rendern()

Color 255,255,255
If KeyDown(57) Then Text 10,10,MilliSecs()-time
Flip 0
Wend
End



;Funktionen---------------------------------------
Function Rendern()
zwischenschrittzeigen = 2;wert aendern um zwischenschritte zu zeigen
;Nur mit Farben rendern, mit maximaler Helligkeit
;allen Objekten die korrekten Texturen zuweisen
EntityTexture cube,cubetexcol,0,0
EntityTexture cube,printtexcol,0,1
AmbientLight 255,255,255
RenderWorld()
CopyRect 0,0,xfenster,yfenster,(1024-xfenster)/2,(1024-yfenster)/2,BackBuffer(),TextureBuffer(farbemerkentex)

;Licht rendern
;allen Objekten eine weisse Texture zuweisen (oder andere die das Licht aber nicht die Farbe beeinflussen)
EntityTexture cube,lighttex,0,0
EntityTexture cube,weisstex,0,1
AmbientLight helligkeit,helligkeit,helligkeit
If zwischenschrittzeigen >= 1 Then RenderWorld()
CopyRect 0,0,xfenster,yfenster,(1024-xfenster)/2,(1024-yfenster)/2,BackBuffer(),TextureBuffer(lichtmerkentex)

;Kombinieren
;es wird ein Rechteck direkt vor der Kamera gerendert
ShowEntity farbemerkenrechteck
PositionEntity farbemerkenrechteck,EntityX(camera),EntityY(camera),EntityZ(camera)
RotateEntity farbemerkenrechteck,EntityPitch(camera),EntityYaw(camera),EntityRoll(camera)
MoveEntity farbemerkenrechteck,0,0,0.11;0.11 weil 0.1 der naechste abstand zu Kamera, um rundungsfehler zu vermeiden um 0.01 weiter geschoben, als 0.11
If zwischenschrittzeigen >= 2 Then RenderWorld()
HideEntity farbemerkenrechteck
End Function


Function cammove()
If MouseDown(2) Then
RotateEntity camera,EntityPitch(camera)+mys/10.0,EntityYaw(camera)-mxs/10.0,0
speed# = 0.1
If KeyDown(17) Then MoveEntity camera,0,0,speed#
If KeyDown(31) Then MoveEntity camera,0,0,-speed#
If KeyDown(30) Then MoveEntity camera,-speed#,0,0
If KeyDown(32) Then MoveEntity camera,speed#,0,0
MoveEntity camera,0,speed#*mzs*5,0
MoveMouse xfenster/2,yfenster/2
EndIf
End Function
 

bjh

BeitragSa, Okt 12, 2013 10:07
Antworten mit Zitat
Benutzer-Profile anzeigen
vielen dank für dein beispiel Wink ,

aber ich muss dich leider enttäuschen:
mir ist das der aufwand nicht wert.
es geht vor allem darum, dass das spiel schön schnell bleibt und deshalb bleib ich lieber bei der einfachsten lösung.
und je kompakter, desto besser. Wink

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group