Rot-Anteil eines Pixels auslesen für Heightmap
Übersicht

![]() |
CrowSmithehemals "Fleisch"Betreff: Rot-Anteil eines Pixels auslesen für Heightmap |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo.
Habe da ein Problem mit dem Auslesen des Rot-Anteils den ich für eine Heightmap benötige. Mein Ansatz: LockBuffer ImageBuffer (Heightmap) rgb = ReadPixelFast(X,Y,ImageBuffer(Heightmap)) r = (rgb And $FF0000) / $10000 UnlockBuffer ImageBuffer(Heightmap) . . . Höhe = r Ich weiss nicht, ob es daran liegt bzw. ob das der einzige Fehler ist, aber in r steht kein Wert... Weiss jemand weiter? Danke |
||
Worklogs: TotalWar2D
Wbsites: Privat / Entwicklerstudio / Gewerbe (Folgen bald) Smartphones: Samsung Galaxy S I9000 / Samsung Galaxy S2 I9100 / Samsung Galaxy S3 (Kommt 2012) Notebook 1: HP Pavillion DV6700 (AMD 64 X2 TL-60 @ 2.00GHz, 4GB DDR3 1333MHz, Nvidia GeFroce 8400M GS, Win Vista Home Premium 32Bit) Notebook 2: HP Pavillion DV6t Quad Edition (KOMMT BALD =] ) Notebook 3: Clevo X7200 (KOMMT BALD =] ) Desktop: (KOMMT BALD =] ) |
- Zuletzt bearbeitet von CrowSmith am Sa, Nov 12, 2011 16:21, insgesamt einmal bearbeitet
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
"Imigebuffer"? Fehlende Schleifen?
Poste bitte den richtigen Code (ausschnittsweise, am besten in einer Code/Syntaxbox), sonst können wir lange raten. Und warum willst du das per Hand machen? LoadTerrain ![]() |
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
CrowSmithehemals "Fleisch" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sorry, das "imigebuffer" habe ich in ImageBuffer umgeändert, war ein Schreibfehler (Nicht im Code, nur beim Verfassen des Themas passiert.)
Code: [AUSKLAPPEN] brush = CreateBrush(255,255,255) mesh = CreateMesh() surface = CreateSurface(mesh, brush) Dim Border_Vertexes(Width,Height) Dim Border_Vertexes_X#(Width,Height) Dim Border_Vertexes_Z#(Width,Height) Dim Border_Vertexes_Y#(Width,Height) Dim Middle_Vertexes(Width-1,Height-1) Dim Middle_Vertexes_X#(Width-1,Height-1) Dim Middle_Vertexes_Z#(Width-1,Height-1) Dim Middle_Vertexes_Y#(Width-1,Height-1) Dim Border_Spheres(Width,Height) Dim Middle_Spheres(Width-1,Height-1) Feldgroesse = 16 For I1=0 To Width-1 For I2=0 To Height-1 Border_Vertexes_X(I1,I2)=I1*Feldgroesse-(Float(Width-1)*Feldgroesse/2) Border_Vertexes_Z(I1,I2)=I2*Feldgroesse-(Float(Height-1)*Feldgroesse/2) LockBuffer ImageBuffer(Heightmap) rgb=ReadPixelFast(I1,I2,ImageBuffer(Heightmap)) r=(rgb And $FF0000)/$10000 ;in r steht kein wert UnlockBuffer ImageBuffer(Heightmap) Select r Case r = 255 H# = 0.0 Case r >= 225 H# = 0.5 Case r >= 200 H# = 1.5 Case r >= 175 H# = 2.0 Case r >= 150 H# = 2.5 Case r >= 125 H# = 3.0 Case r >= 100 H# = 3.5 Case r >= 75 H# = 4.0 Case r >= 50 H# = 4.5 Case r >= 25 H# = 5.0 Case r = 0 H# = 5.5 End Select ;H#=(255.0/r)/255.0*5.5 Border_Vertexes_Y(I1,I2)=H Border_Vertexes(I1,I2)=AddVertex(surface,Border_Vertexes_X(I1,I2),Border_Vertexes_Y(I1,I2),Border_Vertexes_Z(I1,I2)) Border_Spheres(I1,I2)=CreateSphere() PositionEntity(Border_Spheres(I1,I2),Border_Vertexes_X(I1,I2),Border_Vertexes_Y(I1,I2),Border_Vertexes_Z(I1,I2)) EntityColor Border_Spheres(I1,I2),0,0,255 EntityAlpha Border_Spheres(I1,I2),1.0 Next Next Das ist DER Teil des Codes, in dem ich versuche, den Rot-Anteil des jeweiligen Pixels zum Einstellen der Höhe des jeweiligen Vertexes zu verwenden. Der restliche Code dürfte nicht relevant sein. |
||
Worklogs: TotalWar2D
Wbsites: Privat / Entwicklerstudio / Gewerbe (Folgen bald) Smartphones: Samsung Galaxy S I9000 / Samsung Galaxy S2 I9100 / Samsung Galaxy S3 (Kommt 2012) Notebook 1: HP Pavillion DV6700 (AMD 64 X2 TL-60 @ 2.00GHz, 4GB DDR3 1333MHz, Nvidia GeFroce 8400M GS, Win Vista Home Premium 32Bit) Notebook 2: HP Pavillion DV6t Quad Edition (KOMMT BALD =] ) Notebook 3: Clevo X7200 (KOMMT BALD =] ) Desktop: (KOMMT BALD =] ) |
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das Sperren des Buffers benötigt seine Zeit. Wieso sperrst du ihn nicht einmal vor der Schleife und entsperrst ihn wieder hinterher? Das geht wesentlich schneller.
Schau dir soch bitte einmal die Dokumentation zu Select ![]() ![]() ZEVS |
||
![]() |
Lobby |
![]() Antworten mit Zitat ![]() |
---|---|---|
Alternativ könnte man was die 'Cases' betrifft, auch einfach 'Select true' anstatt 'Select r' verwenden. Das hätte den Vorteil, dass Du die bisherige Codestruktur beibehalten könntest.
Da Du dein ursprüngliches Problem als 'r hat keinen Wert' beschreibst, würde ich dir raten, in Zukunft deinen Code selbst besser zu debuggen (der Code den Du für r nämlich verwendest funktioniert bei mir ohne Probleme). |
||
TheoTown - Eine Stadtaufbausimulation für Android, iOS, Windows, Mac OS und Linux |
![]() |
CrowSmithehemals "Fleisch" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok danke, das mit "in r steht kein Wert" war ein Fehler meinerseits...
Habe die Case-Anweisung nach endlosem Herumprobieren einfach rausgenommen und die Höhe der Vertexes = r/HoehenFaktor gesetzt, wobei mein Hoehenfaktor momentan auf 5 steht. Werde das in Zukunft noch enorm ausbauen müssen! Aber danke für euere Hilfe! Gruß, der CrowSmith |
||
Worklogs: TotalWar2D
Wbsites: Privat / Entwicklerstudio / Gewerbe (Folgen bald) Smartphones: Samsung Galaxy S I9000 / Samsung Galaxy S2 I9100 / Samsung Galaxy S3 (Kommt 2012) Notebook 1: HP Pavillion DV6700 (AMD 64 X2 TL-60 @ 2.00GHz, 4GB DDR3 1333MHz, Nvidia GeFroce 8400M GS, Win Vista Home Premium 32Bit) Notebook 2: HP Pavillion DV6t Quad Edition (KOMMT BALD =] ) Notebook 3: Clevo X7200 (KOMMT BALD =] ) Desktop: (KOMMT BALD =] ) |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group