Vertex Farben bestimmen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Dottakopf

Betreff: Vertex Farben bestimmen

BeitragMi, Feb 17, 2010 14:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Blitzer!

irgendwie stell ich mich gerade ziemlich doof an... Ich möchte die Farbe eines Vertexpunktes eines gepickten Triangles ermitteln.

Das ganze ist ein Mesh level mit einer Lightmapp. Nun versuche ich mittels vertexRed/vertexGreen/VertexBlue die Farbe eines Vertexpunktes unter dem Spieler zu ermitteln. Dies dient dazu das spieler mesh abhängig von der Bodenhelligkeit/umgebungslicht neu einzufärben.


hier der Code der das können sollte:
Code: [AUSKLAPPEN]

      If EntityPick(checkbox,2) <>0 Then
      
         triangle = PickedTriangle()
         surface = GetSurface(msh_level,1)
         vertex = TriangleVertex(surface,triangle,1)
      
            color_r = VertexRed(surface,vertex)
            color_g = VertexGreen(surface,vertex)
            color_b = VertexBlue(surface,vertex)
   
      
      End If
      


dem levelmesh wurde bereit "EntityFX 2" zugewiesen.
Ich bekomme immer nur für rot grün blau den wert 255(standart wert).

Was mache ich falsch ?



Gruß
Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!
  • Zuletzt bearbeitet von Dottakopf am Mi, Feb 17, 2010 15:02, insgesamt einmal bearbeitet
 

mDave

BeitragMi, Feb 17, 2010 14:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Genau dasselbe versuchte ich einst auch.
Aber leider, gibt er nicht die Farbe der Textur auf dem das Vertex liegt, sondern nur die Farbe, die man mit VertexColor festgelegt hat.
Allerdings kannst du mal mit TextureBuffer herumspielen.

Dottakopf

BeitragMi, Feb 17, 2010 14:35
Antworten mit Zitat
Benutzer-Profile anzeigen
och ne etz Sad

wird das dann nicht etwas arg langsam ?

~Edit~

also könnte man rein theoretisch sowas machen :
Code: [AUSKLAPPEN]

color = ReadPixel(VertexU(surface , vertex ) , VertexV(surface , vertex )


das wäre dann aber nicht echtzeittauglich(denke ich), also müsste man es irgendwie mit einem Tool vorberechnen lassen und dann im Spiel mit vertexcolor den vertexen zuweisen.

Irgendwie so ... Confused

Xaymar

ehemals "Cgamer"

BeitragMi, Feb 17, 2010 15:16
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
Einzelner Aufruf dauert ~2msec(lock/Unlock), also besser bei vielem benutzen vorher Locken, danach unlocken.
;Rückgabewert ist ein ARGB wert.
Function GetVertexTexel(Surf,Vertex,Tex)
Local X = VertexU(Surf,Vertex) * TextureWidth(Tex), Y = VertexV(Surf,Vertex)*TextureHeight(Tex)
LockBuffer TextureBuffer(Tex)
RGB = ReadPixelFast(X,Y,TextureBuffer(Tex))
UnlockBuffer TextureBuffer(Tex)
Return RGB
End Function


Das sollte Echtzeit tauglich sein. (ReadPixelFast ist schneller als ReadPixel. Nur Lock/Unlockbuffer ist langsam Wink )
Warbseite

Dottakopf

BeitragMi, Feb 17, 2010 15:20
Antworten mit Zitat
Benutzer-Profile anzeigen
wow danke !

ich doktor mir mal das mal zusammen, und meld mich dann nochmal !! Surprised


Gruß
Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!
 

BIG BUG

BeitragMi, Feb 17, 2010 16:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn nur ein einzelnes Pixel ausgelesen wird, benutze einfach ReadPixel, ohne den Buffer zu locken.

Locken & ReadPixelFast ist nur sinnvoll, wenn viele Pixel ausgelesen werden.

Das dürfte interessant für Dich sein:
http://www.blitzbasic.com/code...p?code=515
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)

Dottakopf

BeitragMi, Feb 17, 2010 16:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm ich bekomme einen MAV, scheinbar hat er probleme mit dem Texture handle.
Mein Implementationsversuch:
Code: [AUSKLAPPEN]

   If EntityPick(checkbox,4)<>0 Then
      
               surf=GetSurface(msh_level,1)
               vertex=TriangleVertex(surf,PickedTriangle(),1)   ;gepicktes Vertex
            
   
               sb=GetSurfaceBrush(surf)
               tex=GetBrushTexture(sb,1)                        ;texturehandle ermitteln

               
               v_color = GetVertexTexel(surf,vertex,tex)
         
      
      End If




Für mich sieht das so richtig aus, wo ist der Fehler ?
Muss man evt. die Lightmapp "wirklich" laden und als Handle angeben ?

@Big Bug, das sieht sehr gut aus! ich arbeite das gleich mal druch

Gruß
Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!
 

BIG BUG

BeitragMi, Feb 17, 2010 17:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Abschnitt mit dem TextureHandle ermitteln sieht auf den ersten Blick eigentlich ganz gut aus. Vielleicht hast Du das falsche Surface erwischt?
Der unterste Texturlayer hat übrigens den Index 0, vielleicht ist ja auch das das Problem.
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)

Dottakopf

BeitragMi, Feb 17, 2010 17:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich mir den namen mit Texturename des surfaces(brush) ausgeben lasse, bekomme ich die light map raus. Müsste somit auch richtig sein.

Das Level bestitz nur 1 Surface. Ist ja nur 1 Raum(1 Texture) mit 1 lichtquelle
Ich lasse mir die Varraible tex welche den TextureBrush ermittelt mit text ausgeben, warum steigt dieser wert kontinuierlich an ??

Gruß
Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!

Xeres

Moderator

BeitragMi, Feb 17, 2010 17:21
Antworten mit Zitat
Benutzer-Profile anzeigen
GetBrushTexture
Zitat:
Nach Benutzung sollte diese Textur wieder mit FreeTexture gelöscht werden, um MemoryLeaks zu verhindern!
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group