3d game mit 3d brille /°°\

Anfängerfragen zum Programmieren mit PureBasic.
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

3d game mit 3d brille /°°\

Beitrag von Brügge »

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!!
Zuletzt geändert von Brügge am 02.12.2006 14:26, insgesamt 1-mal geändert.
Benutzeravatar
AndyX
Beiträge: 1272
Registriert: 17.12.2004 20:10
Wohnort: Niederösterreich
Kontaktdaten:

Beitrag von AndyX »

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)
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Beitrag von Brügge »

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 ^^
Benutzeravatar
AndyX
Beiträge: 1272
Registriert: 17.12.2004 20:10
Wohnort: Niederösterreich
Kontaktdaten:

Beitrag von AndyX »

soll das heißen du willst zwei Farbwerte überblenden? :?
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Beitrag von Brügge »

sogesehen ja

also wenn ich ein bild nur rotwerte habe und ein anderes nur blauwerte dann geht das ja

aber wie?
Benutzeravatar
AndyX
Beiträge: 1272
Registriert: 17.12.2004 20:10
Wohnort: Niederösterreich
Kontaktdaten:

Beitrag von AndyX »

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]
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Beitrag von Brügge »

ä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.
Benutzeravatar
AndyX
Beiträge: 1272
Registriert: 17.12.2004 20:10
Wohnort: Niederösterreich
Kontaktdaten:

Beitrag von AndyX »

die PB-Sprite-Befehle bieten sowas eben nicht an, also musstes dir selber proggen. Wenn du das direkt über den Memory machst, kannste sicher auch Zeit einsparen.
Benutzeravatar
Bax
Beiträge: 20
Registriert: 16.08.2005 21:45
Wohnort: Erlensee

Beitrag von Bax »

Mit Sprite3D könnte man die Sache etwas beschleunigen:

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)
Das Mixen geht dann "automatisch".

Edit: transparency=0 abfragen :oops:
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Beitrag von Brügge »

das ist schon fast perfekt aber, jetzt ist die scheisse durchsichtig heißt die wände, die dahintersind sollen ja nicht angezeigt werden, also die anderen roten wände

das darf also nicht transparent sein...
Antworten