3d game mit 3d brille /°°\
3d game mit 3d brille /°°\
hiho! ich möchte gerne ein 3d spiel mir egal was programmieren. jetzt mache ich da 2 kameras nebeneinander und möchte die aufm bildschirm anzeigen.
1.
ich habe mir überlegt das die eine kamera nur grün und die andere nur rot anzeigt. jetzt habe ich allerdings texturen auf den wänden. wie kann ich eine texture einlesen, das die im sprite nur rot ist also hell und dunkelrot (damit man noch die texture hat) , also nur rottöne.
das ganze auch mit blau oder grün.
2.
Ein normaler bildschirm hat ja auf jeden pixel 3lampen rotgrün und blau. da ich 2bilder haben , die nur rot und nur blau oder grün sind müssen die sich ja von den lampen nicht ändern.
wie mache ich das jetzt, das ich ein sprite aufm bildschirm setze und der nur die rot werte aufm bildschirm ändert. also grün und blau sollen so bleiben.
jaja ich weiß ich kann nicht gut erklären aber ich hoffe ihr habt verstanden was ich meine ^^
thx!!
1.
ich habe mir überlegt das die eine kamera nur grün und die andere nur rot anzeigt. jetzt habe ich allerdings texturen auf den wänden. wie kann ich eine texture einlesen, das die im sprite nur rot ist also hell und dunkelrot (damit man noch die texture hat) , also nur rottöne.
das ganze auch mit blau oder grün.
2.
Ein normaler bildschirm hat ja auf jeden pixel 3lampen rotgrün und blau. da ich 2bilder haben , die nur rot und nur blau oder grün sind müssen die sich ja von den lampen nicht ändern.
wie mache ich das jetzt, das ich ein sprite aufm bildschirm setze und der nur die rot werte aufm bildschirm ändert. also grün und blau sollen so bleiben.
jaja ich weiß ich kann nicht gut erklären aber ich hoffe ihr habt verstanden was ich meine ^^
thx!!
Zuletzt geändert von Brügge am 02.12.2006 14:26, insgesamt 1-mal geändert.
einfach die einzelnen Farbkanäle ändern, z.B. wenn du mehr Rot willst:
Code: Alles auswählen
;- Farbkanäle extrahieren
r = Red(color)
g = Green(color)
b = Blue(color)
;- nach Belieben ändern
newr = r * 2
newg = g / 2
newb = b / 2
;- zu große Werte "zurechtstutzen"
If newr > 255
newr = 255
EndIf
If newg > 255
newg = 255
EndIf
If newb > 255
newb = 255
EndIf
;- neue Farbe mixen
newcolor = RGB(newr,newg,newb)
thx aber ich glaube ich habe mich falsch ausgedrückt. also: ich habe einen sprite. der nur aus rot werten besteht. also blau und grün sind immer auf 0.
und ich habe ein sprite was nur grün ist also blau und rot sind immer auf 0.
um jetzt das rote bild anzeigen zu lassen, benötige ich also nur die roten lampen aufm bildschirm. allerdings setzt der dann blau und grün auf 0.
sogesehen habe ich in einem bildschirm ja 3 bildschirme rgb aber wenn ich sage pixel (300,300) soll rot sein dann ist der zwar rot aber der alte blauwert ist weg und der grünwert auch.
ich hoffe ihr versteht was ich meine ^^
und ich habe ein sprite was nur grün ist also blau und rot sind immer auf 0.
um jetzt das rote bild anzeigen zu lassen, benötige ich also nur die roten lampen aufm bildschirm. allerdings setzt der dann blau und grün auf 0.
sogesehen habe ich in einem bildschirm ja 3 bildschirme rgb aber wenn ich sage pixel (300,300) soll rot sein dann ist der zwar rot aber der alte blauwert ist weg und der grünwert auch.
ich hoffe ihr versteht was ich meine ^^
nichts leichter als das, hehe
Code: Alles auswählen
v = 50 ;- Verhältnis, in % von 0 bis 100
;- color1 = Farbe, die schon auf dem Screen ist
;- color2 = Farbe, die du drauf gemixt haben willst
;- Farbkanäle extrahieren
r1 = Red(color1)
g1 = Green(color1)
b1 = Blue(color1)
r2 = Red(color2)
g2 = Green(color2)
b2 = Blue(color2)
;- Mixen
newr = ((r1 * v) / 100) + ((r2 * (100 - v)) / 100)
newg = ((g1 * v) / 100) + ((g2 * (100 - v)) / 100)
newb = ((b1 * v) / 100) + ((b2 * (100 - v)) / 100)
;- neue Farbe mixen
newcolor = RGB(newr,newg,newb) ;- diese Farbe kannste dann auf den Screen geben[quote][/quote]
ähm das programm tutzt hilft mir allerdings nicht viel weiter: (soviel habe ich auch alleine hinbekommen)
Der witz bei der sache ist, ich habe einen sprite und nicht nur 1 pixel. also müsste ich das ganze sprite einscannen und jeden pixel immerwieder anzeigen.(dauert halt zu lange) und weil das eine bilde nur rot ist und das andere nur blau muss ich das doch mit einen ode 2 befehlen so hinbekommen oder? der muss ja nicht rechnen sondern nur auf den rotanteil malen und den blau und grünanteil beibehalten.
Der witz bei der sache ist, ich habe einen sprite und nicht nur 1 pixel. also müsste ich das ganze sprite einscannen und jeden pixel immerwieder anzeigen.(dauert halt zu lange) und weil das eine bilde nur rot ist und das andere nur blau muss ich das doch mit einen ode 2 befehlen so hinbekommen oder? der muss ja nicht rechnen sondern nur auf den rotanteil malen und den blau und grünanteil beibehalten.
Mit Sprite3D könnte man die Sache etwas beschleunigen:
Das Mixen geht dann "automatisch".
Edit: transparency=0 abfragen
Code: Alles auswählen
InitSprite()
InitSprite3D()
InitKeyboard()
OpenScreen(1280, 1024, 32, "screen")
;- ein rotes Sprite
CreateSprite(0, 128, 128, #PB_Sprite_Texture)
StartDrawing(SpriteOutput(0))
Box(0, 0, 128, 128, $00FF00)
StopDrawing()
CreateSprite3D(0, 0)
;- ein gruenes Sprite
CreateSprite(1, 128, 128, #PB_Sprite_Texture)
StartDrawing(SpriteOutput(1))
Box(0, 0, 128, 128, $0000FF)
StopDrawing()
CreateSprite3D(1, 1)
;- Transparenz (0 - vollkommen durchsichtig, 100 - undurchsichtig)
transparency = 50
Repeat
Delay(1)
ClearScreen($000000)
Start3D()
DisplaySprite3D(1, 64, 64)
If transparency > 0
DisplaySprite3D(0, 128, 128, 255 / (100/transparency))
Else
DisplaySprite3D(0, 128, 128, 0)
EndIf
Stop3D()
FlipBuffers()
ExamineKeyboard()
Until KeyboardReleased(#PB_Key_Escape)
Edit: transparency=0 abfragen
