Farbe eines 3D-Objektes ermitteln
Übersicht

![]() |
Kernle 32DLLBetreff: Farbe eines 3D-Objektes ermitteln |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo ^^
Also,ich habe mal ne Frage. Undzwar bastle ich an nem Game,und da hat man als Spielfeld so ne Art Schachbrett.Also so Weiß,Schwarz,Weiß,Schwarz,ect. So,wenn man nun mit der Maus auf ein 3D-Objekt kommt,soll es aufleuchten.Soweit kein Problem (camerapick).Aber jetzt das Problem: Da ich den Farbwert des "gepickten" Objekts fest setzte... Zitat: ;---------------------------
If entity <> 0 EntityColor entity,400,400,400 EndIf ;--------------------------- ...habe ich ein problem mit den Schwarzen Flächen.Ich mache ja folgendes: Ist ein Objekt gewählt,wird das gewählte Objekt mit EntityColor entity,400,400,400 auf die "richtige" farbe gebracht, und nach Flip mit EntityColor entity,255,255,255 wieder zurück geändert (sonst wäre das Objekt immer aufgehellt).So, im Grunde Funktioniert dasauch gut,da alle Objekte standardmäsig die farbe 255,255,255 haben.Aber jetzt das Problem: Die Schwarzen Flächen sind ja 0,0,0 ! Und wenn ich dann den Courser vom Schwarzen Feld wegbewege,wird es halt 255,255,255 gemacht und sieht wie ein weißes Feld aus.Normalerweise könnte man dann ja einfach ne If Abfrage reinklatschen... ![]() Zitat: ;---------------------------
If entity <> (Der Wert der bei campick zurück geliefert wird) EntityColor entity,400,400,400 Else EntityColor entity,150,150,150 Endif ;--------------------------- Doch da gibt es einen haken: Ich habe insgesammt 49 Spielplatten.Die Graden Zahlen sind die Schwarzen, die Ungraden die Weißen.Und für ca. 24 Felder ne If-Abfrage zu machen ist etwas mühsehlich. ![]() Habt ihr ne idee was man machen kann ??? ic hatte die Idee das man evt. die Farbe des Objektes ermittelt, und dann gegebennermaßen handelt. Daher habe ich das versucht: Zitat: LOCKBUFFER FRONTBUFFER()
rgb=READPIXELFAST(MausX,MausY) r=(rgb AND $FF0000)/$10000 g=(rgb AND $FF00)/$100 b=rgb AND $FF UNLOCKBUFFER FRONTBUFFER() Das Problem ist nur,das natürlich auf der Spielfläche auch Figuren sind. Und die haben texturen,daher liefert den Code oben die farbe der Textur wieder,was mir erhebliche Grafikfehler einbrachte ![]() So,bevor ich tschüssi sage noch ein paar Infos zu den 3D-Objekten: Eine Feld Größe -> X= 30 Y= 0,3 Z= 30 Felder -> 49 Felder Variablen: Dim Field_NR$(49) Dim MovePlacePos(49,2) [die 2. zahl steht für die X und Y Cordinate des Feldes] Hoffe ihr könnt mir helfen ! Grüßle: Kernle 32DLL PS: Ja,ich habe selber etliche Sachen ausprobiert, und ja, ich habe auch die Suche benutzt ![]() |
||
Mein PC: "Bluelight" - Xtreme Gamer PC [Video]
Meine Projekte: Cube-Wars 2010 [Worklog] Anerkennungen: 1. Platz BCC #7 , 1. Platz BCC #22 , 3. Platz BAC #89 Ich war dabei: NRW Treff III, IV ; Frankfurter BB Treffen 2009 |
Klaas |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Benenne deine Objekte doch einfach "schwarz", "weiß" dann kannst du nach dem Pick einfach den Namen abfragen und die Frabe entsprechend wieder herstellen.
BTW: Color 400,400,400 ??? sone Farbe gibts nicht |
||
![]() |
Kernle 32DLL |
![]() Antworten mit Zitat ![]() |
---|---|---|
Klaas hat Folgendes geschrieben: Benenne deine Objekte doch einfach "schwarz", "weiß" dann kannst du nach dem Pick einfach den Namen abfragen und die Frabe entsprechend wieder herstellen.
Funktioniert das ??? Ich meine,beim "picken" wird eine Zahlenkette zurückgegeben.Also kein Name.Aber ich glaube ich habe da was mit EntityName oder so gelesen. *auf www.blitzbase.de naschau* Danke für die schnelle help ^^ Grüßle: kernle EDIT: Nein,das funzt auch nicht. Das problem ist,das ich ja gerne den gesammten Code posten würde, aber 1. ist der sehr lang, 2. würde den keiner außer mir verstehen,und 3. soll die von mir verwendete technik (falls möglich) geheim bleiben. Die Funktion die die Hauptschleife enthält: Zitat: Function call_DimTest ()
;================================= ;Dim Test ;Dim test weil ich dashier eigentlich zum test der Dimfelder eingerichtet hatte ;================================= ;--------------------------------------------- While Not KeyHit (5) ; siehe etwas weiter unten ;--------------------------------------------- Cls ;----- If KeyHit (1) Then Stop ; geändert da mir kein sinvoller anderer Tastertur Code einfiel. ;--------------------------- mx=MouseX() my=MouseY() entity=CameraPick(camera,mx,my) ; bei der Maus "picken" ;--------------------------- LockBuffer FrontBuffer() rgb = ReadPixelFast (mx,my) r= (rgb And $FF0000)/$10000 g= (rgb And $FF00)/$100 b= rgb And $FF UnlockBuffer FrontBuffer() ;--------------------------- If entity <> 0 ; Ist also was "gepickt" EntityColor entity,400,400,400 ; no comment OK ? ^^ EndIf ;--------------------------- If entity <> 0 Then test = EntityName (entity) ; test,der folgendes bewirken soll: ;Wenn was "gepickt" wurde, sollte in test der name des "gepickten" ;Objekts geschrieben werden - klappte aber natürlich net... ;---------- RenderWorld ;--- Oval mx-5,my-5,10,10,1 ; Malen wir uns ne Maus... ;--- Flip ;----- If entity <> 0 Then EntityColor entity,255,255,255 ; Am Ende die farbe wieder aufs "normale" setzten ;----- Wend ;--------------------------------------------- End Function |
||
Mein PC: "Bluelight" - Xtreme Gamer PC [Video]
Meine Projekte: Cube-Wars 2010 [Worklog] Anerkennungen: 1. Platz BCC #7 , 1. Platz BCC #22 , 3. Platz BAC #89 Ich war dabei: NRW Treff III, IV ; Frankfurter BB Treffen 2009 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group