Frage zur Vertex und Triangle Verbindung und Multitexturing
Übersicht

BB_FreakBetreff: Frage zur Vertex und Triangle Verbindung und Multitexturing |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi meine erste Frage bezieht sich auf ein bestimmtes Vertex Triangle Schema.
Und zwar zerbreche ich mir gerade den Kopf darüber wie ich diese Art von Vertex und Triangle Verbindung in einem Algo verschmelze so das ich einfach nur die anzahl der Vertex von X und Y angeben muss und dann eine art Gitter erstellt wird. Die Vertex müssten so wie in meiner Zeichnung verteilt werden und auch in dieser Reihenfolge da ich sie später in einem anderen Algo dadurch exakt ansprechen kann. ![]() Die Vertex Dot's zu verteilen ist ja mit 2 For Schleifen schnell erledigt. Nur wie verbinde ich dann die Einzelnen Punkte ? Der Algo dahinter ist bestimmt so leicht das ich mal wieder nicht drauf komme *gggrrrr* ![]() Zur zweiten Frage ich wollte 2 Texturen miteinander mixen. Die eine Ist zb eine Mauer Texture und die 2. zb ein Text wie kann ich die beiden übereinander setzen so das am ende nur der Text mit der Mauer Texture herraus kommt und drumherum alles nicht sichbar bzw Transparent? Wie hier: ![]() Danke euch schonmal im voraus ![]() |
||
Kruemelator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also erstmal das mit der Fläche:
Die Fläche steht einem gegenüber und ist immer, egal wieviele Teile es sind, zwei breite und zwei hoch (wie ein platt gedrückter Würfel von CreateCube()) Verändern kann man das mit ScaleMesh,PositionMesh,RotateMesh. Wichtig: br=4 bedeuten 4 Triangle breite, aber es sind 5 Vertices enthalten pro Zeile. BlitzBasic: [AUSKLAPPEN] flaeche = CreateMesh() Edit: Texture ist auf dem Kopf(Vorzeichen wurde geändert) Das mit der Textur ist auch nicht schwer schreibe ich gleich. |
||
Kruemelator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So hier die Lösung zu deinem Textur Problem:
BlitzBasic: [AUSKLAPPEN] textx = CreateTexture(256,256,4);Flag(3.Paramater), 4 muss enthalten sein |
||
BB_Freak |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Big Thx Kruemelator ![]() Hast mir damit sehr geholfen! Da ich ja mit Minib3d arbeite klappte es mit deinem Flaechenalgo irgentwie nicht. Ich habe darauf hin durch deine Inspiration dann einen eigenen Algo geschrieben. Code: [AUSKLAPPEN] Dim flaeche As Any Ptr = CreateMesh()
Dim sur As Any Ptr = CreateSurface(flaeche) Dim br As integer = 5 Dim ho As Integer = 5 Dim vertex_index_array(br,ho) As Integer For y As Integer = 0 To ho For x As Integer = 0 To br vertex_index_array(x, y) = AddVertex(sur,x,y,0) Next Next For y As Integer = 0 To ho - 1 For x As Integer = 0 To br - 1 AddTriangle(sur,vertex_index_array(x, y),vertex_index_array(x, y + 1),vertex_index_array(x + 1, y)) AddTriangle(sur,vertex_index_array(x, y + 1),vertex_index_array(x + 1, y + 1),vertex_index_array(x + 1, y)) Next Next 'entitytexture flaeche,texture2 updatenormals (flaeche) Das klappt auch alles ganz gut. Nur jetzt stehe ich vor den Problem mit den VertexTexCoords. Muss ich jetzt jedem Vertex Texturen Koordinaten verpassen? Oder nur Pro Quat und das Mittig? Stehe im moment voll auf den Schlauch und komme nicht weiter ![]() |
||
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die koords sind ganz einfach.
x=x y=y also, einfach x und y mit angeben und dann passt das |
||
between angels and insects |
Kruemelator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Texturkoordinaten sind immer in den Vertex gespeichert, Triangle oder Quads können keine Informationen enthalten, außer welche Vertices benutzt werden.
Wenn jedes Quad/Triangle eigene Texturkoordinaten unabhängig vom Nachbar haben soll, dann müssen sie ihre eigene Vertices haben. Texturkoordinaten gehen von 0 bis 1, von 0 bis 2 würde die Textur 2mal darstellen, entsprechend würde von 0 bis 0.1 nur ein 10tel gezeigt. |
||
BB_Freak |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich danke euch für die Tips , werde mir das nach Feierabend mal anschauen. | ||
BB_Freak |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi hätte da noch eine Frage.
Wenn ich jetzt sagen wir mal eine meshplane von 2*2 habe. Dort jetzt eine Text texture platzieren würde die aber einen langen Text enthält der aber nicht komplett sichtbar ist und von rechts nach links geschoben werden soll wie eine Art Textscroller wäre dies machbar? Also ohne den Texture inhalt neu mit Pixeln zu füllen und ohne einen erneuten draw string Befehl nur mit Positiontexture? |
||
![]() |
Tennisball |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, das ist möglich.
Gib einfach für die UV-Koordinaten deiner Vertices nicht 0.0 und 1.0 (für je U und V) an, sondern z.B. 0.0 und 0.5. Das würde nun bewirken dass du nur die Hälfte der Textur siehst. Danach verschiebst du wie du schon vermutest hast mit PositionTexture ![]() Gruß, Tennisball |
||
BB_Freak |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wie Krieg ich es hin das ein langer Text als texture über das mesh in scroller Form darüber läuft. Weil so ne 256 Texture bietet ja wenig Zeilen Raum. | ||
Kruemelator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Entweder eine andere Texturgröße, es müssten auch Texturen wie 1024*256 gehen, oder aber den Text jeden Durchgang in die Textur schreiben, also die Textur jedesmal erneuern. Die Befehle die man dazu benutzen kann sind:
BlitzBasic: [AUSKLAPPEN] SetBuffer TextureBuffer() |
||
![]() |
Tennisball |
![]() Antworten mit Zitat ![]() |
---|---|---|
Von letzterem würde ich abraten, Kruemelator.
Stattdessen versuche ich nochmal die andere Idee genauer zu erklären. Nehmen wir mal an du hast ein quadratisches Mesh und eine Textur von 1024*256px (Verhältnis 4:1) Du müsstest nun die UV-Koordinaten wie folgt setzen, damit immer ein quadratischer Ausschnitt der Textur auf dem Mesh angezeigt wird: ![]() U ist bei den linken Vertices 0 und bei den rechten Vertices 0.25 (Ein Viertel, damit's quadratisch wird.) V ist bei den oberen Vertices 0 und bei den unteren Vertices 1. Damit dein Text jetzt scrollt müsstest du mit PositionTexture ![]() Ich hoffe, das hilft. Gruß, Tennisball |
||
Kruemelator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Der erste Ansatz ist wahrscheinlich hier die bessere Entscheidung. Man muss aber beachten das die Textur 4mal soviel Speicher benötigt und sollte die Breite immer noch nicht reichen müsste man 2048*256 nehmen das wäre sogar 8mal soviel!
Sich stetig verändernde Texturen sind heutzutage in Spielen nix seltendes (Shadowmap,Reflection). Es ist die Entscheidung ob man Rechenleistung oder Speicherplatz abgibt/nutzt. |
||
![]() |
Tennisball |
![]() Antworten mit Zitat ![]() |
---|---|---|
Moin,
Hab das mal ausgetestet. Ausgehend von einer FPS von 60. BlitzBasic: [AUSKLAPPEN] Graphics3D 800, 600 Das benötigt bei mir (auf einer GTX560Ti und i5-2500) ~125ms. Und es wurde nur die Textur (60 mal) geändert. Das finde ich jetzt etwas übertrieben. Wohingegen der Speicherverbrauch bei einer Textur von 256*256px bei 256*256*4 Byte = 262144 Byte = ~262KB wäre. Der Speicherverbrauch einer 2048*256px-Textur wäre dementsprechend 2097152 Byte = ~2,1MB. So viel Speicher sollten halbwegs moderne Rechner noch mitbringen. Auch wenn's nur für eine Textur ist. Edit: Alternativ könntest du deiner Textur noch Frames geben. Das würde aber höchstwahrscheinlich noch viel mehr Speicher verbrauchen. Gruß, Tennisball |
||
Kruemelator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Man muss ja auch ein wenig anpassen:
BlitzBasic: [AUSKLAPPEN] Graphics3D 800, 600, 32, 2 Bei mir um 15 Millisekunden, für 600 Updates was bei 60 Fps 10 Sekunden wären. Wichtig ist Textur nur im Vram. |
||
![]() |
Tennisball |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, das stimmt natürlich, habe ich übersehen. | ||
BB_Freak |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So das mit dem Scrolling der Texture habe ich hinbekommen.
So nun mein neues Problem ![]() Wenn ich ein Quat erstelle mit den Viertel Texture Koordinaten Code: [AUSKLAPPEN] v(0) = addvertex(quat_sur,0,0,0) v(1) = addvertex(quat_sur,0,1,0) v(2) = addvertex(quat_sur,1,1,0) v(3) = addvertex(quat_sur,1,0,0) VertexTexCoords (quat_sur,v(0),0,0) VertexTexCoords (quat_sur,v(1),0,1) VertexTexCoords (quat_sur,v(2),0.25,1) VertexTexCoords (quat_sur,v(3),0.25,0) Ist das ja kein Problem. Doch wenn ich ja meine Plane erstelle mit ca 11 Quats in X-Richtung und 11 in Y-Richtung Kleiner Code ausschnitt: Code: [AUSKLAPPEN] For x As Integer = 0 To br For y As Integer = 0 To ho vertex_array_buffer(x, y) = addvertex(plane_surf, x, y, 0) VertexTexCoords(plane_surf, vertex_array_buffer(x, y), x, y) Next Next Müsste ich doch irgendeinen Algo schreiben der die TextureCoords so aufteilt das am ende die 0.25 rauskommt bei der UV. Sonnst Splittet er die komplette Plane ja nicht als eine Viertel Texture auf ![]() |
||
![]() |
Lobby |
![]() Antworten mit Zitat ![]() |
---|---|---|
Meinst du vielleicht sowas?
BlitzBasic: [AUSKLAPPEN] For x As Integer = 0 To br Der Vertex (br, ho) soll als UV-Koordinaten ja (0.25, 1.0) haben, und da das Ganze linear ist ergibt sich die obige Formel (denn etwa x / br ist ja genau bei x = br 1 und bei br / 2 genau halb so groß, also 0.5). |
||
BB_Freak |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So jetzt klappt durch eure Hilfe alles so wie ich es mir vorgestellt habe.
Big thx euch allen! ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group