Schwarz und Farbe
Übersicht

![]() |
MegamagBetreff: Schwarz und Farbe |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi, Community!
Wir hatten uns ein kleines Projekt vorgenommen. Es soll z.B. Eine grün-gelb gestreifte Fläche sein, auf der man rumlaufen kann. Diese Fläche soll aber schwarz-weiß (mit Graustufen) sein. Und wenn man eine Taste drückt (z.B. "D") soll ein Tropfen fallen, da, wo der Player steht, und da, wo der Tropfen auf die Grau-schwarz-weiße Fläche trifft, soll wieder die eigentliche Farbe sein. Also ein Tropfen, der die Farbe auf seinem Aufschlagspunkt wieder herstellt. Wie macht man das? Mit Alpha-Textur, mit Brushes, mit Multitextur? Kann mir das bitte jemand erklären? Danke! EDIT: Etwa so: ![]() |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Über 3D würde ich es wie folgt machen:
- Zwei Texturen erstellen. Einmal Schwarz/Weiß und einmal Farbig - Die Farbige Textur bekommt allerdings Alpha komplett 0 ausgelegt - Die Farbige Textur wird über der Schwarz/Weiß -Textur gezeichnet - An gewünschten Stellen einfach die Alpha auf Maxmimum oder Wunsch einstellen. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
Megamag |
![]() Antworten mit Zitat ![]() |
---|---|---|
Und wie kann man ALpha an bestimmten stellen einstellen? | ||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Alpha ist ein teil des farbwertes -> farbe bei den entsprechenden Pixeln ändern. | ||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Megamag |
![]() Antworten mit Zitat ![]() |
---|---|---|
Okay, aber wie?
Oder mit welchem Befehl? |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Siehe dazu:
ql:WritePixelFast ql:TextureBuffer |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
Megamag |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ähm, dann muss ich der Textur einen Buffer zuweisen
und die Pixel ändern? Ich versteh' aber immer noch nicht, wie, denn bei WritePixel fehlt die Z-Koordinate... |
||
![]() |
kriD |
![]() Antworten mit Zitat ![]() |
---|---|---|
is doch nich schlimm, oder?
es gibt ja nich NUR 3D ![]() ich würds wie folgt machen (2D): -du hast 2 Bilder:eins mit Farbe und eins mit Graustufen -du malst erst das bunte Bild und darüber das Graustufenbild -nun sieht man das bunte Bild nichtmehr -überall dort, wo man es sehen soll zeichnest du im Imagebuffer des grauen Bildes die Tranzparenzfarbe ein (mit writepixel,oder rect oder oval ....) -an den transparenten Stellen scheint das bunte Bild nun durch Nachteil:es sind keine Alphawerte möglich, also ganz oder garnicht durchscheinend MfG kriD |
||
Wenn ich du wäre, wäre ich lieber ich! |
![]() |
Megamag |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: es gibt ja nich NUR 3D
Es ist aber für ein 3D Spiel. ![]() |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wieso solltest du genau eine z koordinate brauchen?
Texturen sind 2D nicht 3D, insofern brauchst du nur X und Y und setzt dort den 4 Farben (ARGB) wert. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Megamag |
![]() Antworten mit Zitat ![]() |
---|---|---|
Warum geht dieser Code nicht?
Es wird nur ein weißer Kreis gezeichnet. Wie kriege ich den jetzt transparent? Code: [AUSKLAPPEN] Graphics3D 640,480,0,2
SetBuffer BackBuffer() camera=CreateCamera() light=CreateLight(1) RotateEntity light,90,0,0 cube=CreateCube() PositionEntity cube,0,0,5 RotateEntity cube,30,30,30 texture1=LoadTexture("texturbunt.bmp") texture2=LoadTexture("textur.bmp") SetBuffer TextureBuffer(texture2) Oval 30,30,200,200 SetBuffer BackBuffer() EntityTexture cube,texture1,0,0 EntityTexture cube,texture2,0,0 While Not KeyHit(1) TurnEntity cube,1,1,1 RenderWorld Flip Wend End |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
garnicht.
Du kannst nicht die Draw Befehle nutzen. Wurde oben doch gesagt -> WritePixel(Fast), SetBuffer und LockBuffer |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
weil du ja mit oval nur einen weißen kreis zeichnest^^
Schrittweise zum abhacken: 1) Die Schwarz-Weiß-Textur liegt unten, die bunte via Multitexturing drüber. 2) Die bunte Textur, die Alpha Informationen haben soll, muss ins PNG-Format (BMP kennt kein Alpha und JPG verursacht Pixelfehler). Zusätzlich machst du mit 'nem "gescheiten" Grafikprogramm (zB GIMP) einen Alphakanal auf(damit Alpha-Werte gespeichert werden können) und danach alles markieren und Deck-Kraft auf 0%. Dann sind die Farben zwar alle da, aber unsichtbar. 3) Nun erst gehts an den Code. Da muss bei LoadTexture der Alpha-wird-beachtet-Flag an (ich glaube das war 2). Und nun kannst du dir die Werte pixelweise aus der Bunten immer mit ReadPixelFast auslesen und sie mit nem Alpha wert von $FF000000 wieder WritePixelFast-mäßig reinmalen. Die Zeile geb ich dir mal Code: [AUSKLAPPEN] WritePixelFast x,y,$FF000000 OR ReadPixelFast(x,y);Das OR überschreibt Werte auf True, wo True steht und lässt werte wie sie sind bei False. FF am Anfang überschreibt den Alpha-Wert auf 100% die anderen 00en belassen die rgb-Werte wie sie sind.
Nicht vergessen: Buffer Locken ( ![]() 2late -.- |
||
![]() |
Megamag |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das geht aber immer noch nicht.
Ich habe keine Ahnung, wie das gehen soll. ![]() Code: [AUSKLAPPEN] Graphics3D 640,480,0,2
SetBuffer BackBuffer() camera=CreateCamera() light=CreateLight(1) RotateEntity light,90,0,0 cube=CreateCube() PositionEntity cube,0,0,5 RotateEntity cube,30,30,30 texture1=LoadTexture("texturbunt.png") texture2=LoadTexture("textur.bmp") SetBuffer TextureBuffer(texture2) LockBuffer TextureBuffer(texture2) WritePixelFast x,y,$FF000000 Or ReadPixelFast(x,y) UnlockBuffer TextureBuffer(texture2) SetBuffer BackBuffer() EntityTexture cube,texture1,0,0 EntityTexture cube,texture2,0,0 While Not KeyHit(1) TurnEntity cube,1,1,1 RenderWorld Flip Wend End |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Und was geht nicht? du zeichnest da nur einen pixel, könnte also schwer sein irgendwas zu sehen ![]() aber was das "or readpixelfast" soll rall ich net, das ist totaller blödsinn. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Megamag |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kannst du den Code richtig machen?
Ich habe keine Ahnung, wie. |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Code funktioniert soweit, den Rest solltest du schon hingriegen:
Code: [AUSKLAPPEN] Graphics3D 512,512,0,2
SetBuffer BackBuffer() Local Timer=CreateTimer(100) Local Camera=CreateCamera() Local TextureSW=LoadTexture("imageSW.png",1) Local TextureFarbe=LoadTexture("imageFa.png",2) Local Sprite=CreateSprite() Local TX=TextureWidth(TextureSW) Local TY=TextureHeight(TextureSW) Local X,Y,ARGB,MX,MY EntityTexture Sprite,TextureSW PositionEntity Camera,0,0,-1 SpriteViewMode Sprite,2 EntityFX Sprite,1+2+8 CameraClsColor Camera,96,64,64 While Not KeyHit(1) MX=MouseX() MY=MouseY() If MouseDown(1) Then For Y=-19 To 19 For X=-19 To 19 ARGB=ReadPixel(MX+X,MY+Y,TextureBuffer(TextureFarbe)) WritePixel MX+X,MY+Y,$FF000000+(ARGB And $00FFFFFF),TextureBuffer(TextureSW) Next Next End If WaitTimer(Timer) RenderWorld Flip 0 Wend End edit1: Der Ansatz ist im übrigen aus dem Gespräch vorher etwas verändert wordn. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
Megamag |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke, Hectic!
Dann gibt's da noch was. Kann man WritePixelFast auch mit Alpha-Wert verwenden? |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Da sind automatisch immer alphawerte drin.
Der Int der da geschrieben wird, enthält ARGB -> Alpha Rot Grün Blau |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Megamag |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, aber ich meine so halbtransparent. Aber
ich glaube, dass das nicht geht... Ach so, es gibt noch ein großes Problem: Ich habe euch ja erzählt, dass man auf einer (3D) Fläche herumlaufen kann, und bei Tastendruck Farbe gemacht wird. Tja, eine große Fläche (oder auch Terrains) kann man nicht mit einer Mega-Textur belegen. Da müssen kleine Texturen immer wieder wiederholt werden. Aber der Code von Hectic zeichnet auf EINER Textur, was auch richtig wäre, aber da es auf einem Terrain ja immer dieselbe Textur ist, wird Farbe auch auf jeder einzelnen Textur gezeichnet, und nicht nur da, wo der Player steht. Wie macht man denn das? |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group