Farbe eines 3D-Objektes ermitteln

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Kernle 32DLL

Betreff: Farbe eines 3D-Objektes ermitteln

BeitragMo, Jun 27, 2005 15:23
Antworten mit Zitat
Benutzer-Profile anzeigen
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... Razz

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. Crying or Very sad

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 Confused

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 Wink
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

BeitragMo, Jun 27, 2005 15:41
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jun 27, 2005 18:58
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group