Vertex eines Terrains verfärben
Übersicht

![]() |
GoldiniBetreff: Vertex eines Terrains verfärben |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
Ich wollt mal wissen wie ich die einzelnen Vertex eines Terrains verfärben kann. mfg[/code] |
||
Mit diesen Zeilen danke ich einer Person, die mich für so wichtig hält, dass sie sogar einen Club nach mir benannt hat!
Danke! ![]() |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Erstell eine Textur und ziehe diese über das ganze Terrain einmal über. Dabei muss die Auflösung dieser Textur nicht unbedingt größer sein als die Highmap selber. Um denoch Struckturen auf das Terrain zu bekommen, sollte das ganze über verschiedene Texturlayer (Multitexturing) gemacht werden. Dabei hast du sogar verschiedene Texturfilter die aufeinander angewendet werden können. | ||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich denke, er meint eher, wie man die einzelnen Vertices eines Terrains ohne Textur einfärben kann.
Dafür gibts, oh Wunder, den Befehl VertexColor, dessen Wirkung du jedoch nur sehen kannst, wenn du das zugehörige Mesh mit Flag 2 versiehst. Willst du auch noch Alpha auf die Vertices anwenden, so musst du zusätzlich noch Flag 32 hinufügen. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, bei einem selbstgebasteltem Meshterrain hat man auch zugriff auf die einzelnen Vertices. Jedoch nicht auf einem Blitzterrain mit LOD-Technik, denn da sind ja nichtmal alle Vertices zur Laufzeit verfügbar (werden ja zum Teil jedes Frame neu erstellt und gelöscht). Es entstehen also Lücken wo garkeine Vertices existent sind.
Bei der Textur könnte man u.a. auch genau auf einzelne Vertices zugreifen (via WritePixelFast), wenn diese die gleiche größe wie die Highmap selbst hat. Alles andere müsste erst umgerechnet werden. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du hast vollkommen Recht, an das Blitzterrain dachte ich gar nicht, da ich selbst nur noch mit Meshterrains arbeite.
Dort ist die Methode mit der Textur natürlich die beste, aber da Goldini von einem Vertex sprach und nicht einem Punkt auf dem Terrain, lag mir VertexColor näher. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
Goldini |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist mein Code: [AUSKLAPPEN] ter = LoadTerrain("gfx/hmap01.bmp") surf=GetSurface(ter,1) For i=1 To CountTriangles(surf) v0=TriangleVertex(surf,i,0) v1=TriangleVertex(surf,i,1) v2=TriangleVertex(surf,i,2) VertexColor surf,v0,Rnd(100,200),Rnd(100,200),Rnd(100,200) VertexColor surf,v1,Rnd(100,200),Rnd(100,200),Rnd(100,200) VertexColor surf,v2,Rnd(100,200),Rnd(100,200),Rnd(100,200) Next Doch leider sagt er nun immer, dass der Terrain kein Mesh ist. Aber ich brauch unbedingt die Funktion TerrainY(), denn sonst würd ich den Terrain sofort als Mesh nehmen. Mfg |
||
Mit diesen Zeilen danke ich einer Person, die mich für so wichtig hält, dass sie sogar einen Club nach mir benannt hat!
Danke! ![]() |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nochmal: Terrains haben keine Vertices.
Terrains als auch animierte Meshes haben KEINEN Surface, denn ihre Vertexdaten existieren aus Performancegründen nicht im RAM wo du darauf zugreifen könntest. Entweder du nimmst das terrain und den Texturtrick der oben erwähnt wird oder du nimmst ein Mesh basierendes Terrain System (gibts verschiedene oder kannst dir ein eigenes schreiben) wo du auf die Surface zugreifen kannst. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Goldini |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das hier ist leider total langsam und mit Read- und WritePixelFast krieg ich's nicht zum laufen...
Code: [AUSKLAPPEN] Const hmap$="gfx/hmap01.bmp"
Dim red(255) Dim green(255) Dim blue(255) cmap=LoadImage("gfx/landcolors.bmp") For x=0 To 255 ;LockBuffer FrontBuffer() rgb=ReadPixel(x,5,ImageBuffer(cmap)) red(x)=(rgb And $FF0000)/$10000 green(x)=(rgb And $FF00)/$100 blue(x)=rgb And $FF ;UnlockBuffer FrontBuffer() Next img=LoadImage(hmap$) iwidth=ImageWidth(img) iheight=ImageHeight(img) tex=CreateTexture(iwidth,iheight) SetBuffer TextureBuffer(tex) For x=0 To 512;iwidth For y=0 To 512;iheight ;LockBuffer FrontBuffer() rgb=ReadPixel(x,y,ImageBuffer(img)) r=(rgb And $FF0000)/$10000 ;UnlockBuffer FrontBuffer() Color red(r),green(r),blue(r) Plot x,y Next Next mfg |
||
Mit diesen Zeilen danke ich einer Person, die mich für so wichtig hält, dass sie sogar einen Club nach mir benannt hat!
Danke! ![]() |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
den frontbuffer DARF man auch nicht locken!
Der wird durchgehend gewechselst, wenn du den lockst, steht alles. ähnlich siehts beim backbuffer aus. lockbuffer is nett für images und texturen, aber nicht für die front / backbuffer und mit 512x512 kannst du es böse gesagt gleich vergessen versuchs ma mit copyrect |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Goldini |
![]() Antworten mit Zitat ![]() |
---|---|---|
öhhh.... ![]() |
||
Mit diesen Zeilen danke ich einer Person, die mich für so wichtig hält, dass sie sogar einen Club nach mir benannt hat!
Danke! ![]() |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ausprobieren.
Aber solange du den Frontbuffer nutzt wird das nichts, unabhängig davon wie du es machst, das gleiche wenn du 512x512 Pixeln jedes frame rumholzen willst. Schau dir die dokumentation von CopyRect an |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
- Zuletzt bearbeitet von Dreamora am Sa, März 08, 2008 23:00, insgesamt einmal bearbeitet
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
- CreateTexture solltest du (nun leider grundsätzlich) vermeiden, da bestimmte nVidia-Treiber diese nicht mehr oder falsch unterstützen. Lade also die Textur per LoadTexture.
- Benutze bei solchen Sachen immer Read/WritePixelFast, da dieses doch emens schneller ist. Ausser du änderst jedes Frame nur 1 bis ~50 Pixel, da (Un)LockBuffer auch Recourcen benötigt. - Die beiden Schleifen (For X=0 To 512 und For Y=0 To 512) sollten nur bis Breite/Höhe -1 gehen. In diesem Fall also bis 511, sonst gibt es Ärger. - Genau kann ich es nun nicht sagen, da der Code etwa unvollständig ist, aber ich denke dass eventuell SetBuffer falsch gesetzt wird. Eventuell hilft dir auch ql:CopyPixelFast weiter. edit1: ...Oder ql:CopyRect wie Dreamora gesagt hat. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Um hectic zu korrigieren: CreateTexture macht KEINE Probleme!
CreateTexture mit flag Alpha/Masked macht Probleme. Da du aber weder alpha noch masked hast wenn du buffers kopierst, wird das kein Problem. Wär supi wenn du hören könntest das auch weiterhin immer weiter zu behaupten, hatte es bereits das letzte Mal aufgeklärt. Abrexxes hats im Unterschied zu dir als Problem immerhin präzise formuliert! Denn es kommt ganz klar von den alpha / mask flags und der Art wie B3D die Textur erzeugt mit den beiden Flags. Deine inkorrekte Panikmache hilft niemandem. Sie sorgt nur für Probleme. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
- Zuletzt bearbeitet von Dreamora am Sa, März 08, 2008 23:09, insgesamt einmal bearbeitet
![]() |
Goldini |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich verwende CreateTexture damit man jeden belibigen Terrain texturieren lassen kann. Ich hab gerade fesgestellt, dass es auch reicht jeden vierten Pixel auszulesen.
Mfg |
||
Mit diesen Zeilen danke ich einer Person, die mich für so wichtig hält, dass sie sogar einen Club nach mir benannt hat!
Danke! ![]() |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group