Texturen auf Dreiecksfächer (Triangle Fan)
-
Original erstellt von Creon:
wenn ich eine Textur auf als Triangle Fan gezeichnete Punkte lege, wird das letzte Dreieck nicht mit der Textur belegt. Das ist eigentlich auch logisch, weil der Textur beim letzten Dreieck ein dritter Punkt fehlt, wodurch sie sich nicht zeichnen kann. Nun hab ich einfach noch einen Zusatzpunkt zeichnen lassen, dem ich dem Dreieck quasi noch 'unterschieben' wollte, aber trotzdem wird nicht die Textur gezeichnet.Hört sich nach ziemlichem Unsinn an. Entweder wird das Dreieck gezeichnet, dann auch mit Textur oder es wird nicht gezeichnet. Es ist nicht möglich, das ein Teil der Dreiecke, die man _auf einmal_ zur Karte schickt eine Textur haben, und der zweite Teil eine andere oder auch gar keine. Dreiecke aus 2 Punkten gibt es auch nicht und können deswegen weder mit noch ohne Textur gezeichnet werden.
-
Die Texture benötigt doch mindestens 3 Punkte um sich zu zeichnen. In einem Triangle Fan ist ja ein Punkt immer vorgegeben, nämlich der Mittelpunkt. Um ein Dreieck in einem TriangleFan hinzuzufügen brauch ich also immer nur 2 weitere Punkte, und er zeichnet trotzdem noch den Mittelpunkt dazu, wodurch auch die Textur gezeichnet werden kann.
Nur wird bei dem letzten Dreieck, da es an das erste angeschlossen wird, nur 1 Punkt benötigt, wodurch die Textur auch nur 2 Punkte sieht (diesen und den Mittelpunkt) und sich nicht zeichnen kann, weil sie ja 3 benötigt.[ Dieser Beitrag wurde am 11.03.2003 um 14:09 Uhr von Creon editiert. ]
-
Original erstellt von Creon:
Die Texture benötigt doch mindestens 3 Punkte um sich zu zeichnen. In einem Triangle Fan ist ja ein Punkt immer vorgegeben, nämlich der Mittelpunkt. Um ein Dreieck in einem TriangleFan hinzuzufügen brauch ich also immer nur 2 weitere Punkte, und er zeichnet trotzdem noch den Mittelpunkt dazu, wodurch auch die Textur gezeichnet werden kann.
Nur wird bei dem letzten Dreieck, da es an das erste angeschlossen wird, nur 1 Punkt benötigt, wodurch die Textur auch nur 2 Punkte sieht (diesen und den Mittelpunkt) und sich nicht zeichnen kann, weil sie ja 3 benötigt.Hört sich immer noch sehr unsinnig an. Textur kann grundsätzlich auf jedes dargestellte Dreieck gezeichnet werden, mehr noch, ist sie aktiviert muss sie es sogar. Um ein Dereieck eine TriFan zuzufügen muss man nur einen Punkt angeben. Die Anzahl der Dreiecke ist Vertexzahl - 2, da aus den ersten beiden Punkten (logischerweise!) kein Dreieck gezeichnet werden kann.
-
Naja, ich versteh das glaub ich schon mehr oder weniger.
Du scheinst dich ja damit auszukennen, also sag mir doch bitte einfach mal, was man hieran umschreiben muss, damit das letzte Dreieck auch noch die Textur erhält.// Vierseitige Pyramide { 0.0f, 1.0f, 0.0f, 0x00000000, 0.5f, 3.0f }, // Oben mitte { 1.0f, -1.0f,-1.0f, 0xFFF00000, 1.0f, 0.0f }, // Rechts vorn { -1.0f, -1.0f,-1.0f, 0xCCC00000, 0.0f, 0.0f }, // Links vorn { -1.0f, -1.0f, 1.0f, 0xCCC00000, 0.f, 0.0f }, // Hinten links { 1.0f, -1.0f, 1.0f, 0xFFF00000, 1.0f, 0.0f }, // Hinten rechts { 1.0f, -1.0f,-1.0f, 0xFFF00000, 0.0f, 0.0f }, // Und noch mal rechts vorn ( benötigt zum schließen )
... Render Funktion:
lpd3ddevice->SetTexture(0,Dach); lpd3ddevice->DrawPrimitive(D3DPT_TRIANGLEFAN,0,4);
Nachvollziehen kann ich das ja dann später noch
Auf jeden Fall jetzt schonmal vielen Dank für die Tips
-
Original erstellt von Creon:
was man hieran umschreiben muss, damit das letzte Dreieck auch noch die Textur erhält.Ein letztes Mal zum mitmeisseln: Alle gezeichneten Dreiecke bekommen die Textur, es ist technisch nicht möglich, das das letzte Dreieck keine hat, folglich ist die Frage wie man das erreicht _unsinng_.
Original erstellt von Creon:
Nachvollziehen kann ich das ja dann später nochÄhhhmm, ja...
-
ES IST ABER SO! Man ich würd ich doch nicht so eine Frage in dieses Forum stellen, wenn bei diesem Code den ich da gepostet habe, nicht das letzte Dreieck keine Textur bekäm. Du kannst mir ja 100 ma erklären, warum das nicht sein kann, aber ich sehe mit meinen Augen doch, dass es so ist und suche daher den Fehler, der in einem der beiden Codeabschnitte oben sein muss.
Hat vielleicht jemand anders eine Idee?
-
mal so ne blöde frage zwischendurch, wo gibst du das zentrums-vertex an? ich sehe da nur die von der umrandung.. oder ist das in d3d anders als in ogl?
rapso->greets();
-
ups, hab mich verlesen
also du hast da meiner ansicht nach fehler drinne
// Vierseitige Pyramide { 0.0f, 1.0f, 0.0f, 0x00000000, 0.5f, /*0.5f*/ }, // Oben mitte { 1.0f, -1.0f,-1.0f, 0xFFF00000, 1.0f, 0.0f }, // Rechts vorn { -1.0f, -1.0f,-1.0f, 0xCCC00000, 0.0f, 0.0f }, // Links vorn { -1.0f, -1.0f, 1.0f, 0xCCC00000, 0.f, 0.0f }, // Hinten links { 1.0f, -1.0f, 1.0f, 0xFFF00000, 1.0f, 0.0f }, // Hinten rechts { 1.0f, -1.0f,-1.0f, 0xFFF00000, /*1.0f*/, 0.0f }, // Und noch mal rechts vorn ( benötigt zum schließen )
ich hab es dir ma markiert wie ich das machen würd.. versuch doch bitte ma
rapso->greetS();
-
Leider war es das nicht. Bei der oberen Verbesserung handelt es sich ja nur um die vertikale Streckung der Textur, da das der mittelpunkt meines Fächers ist und höher liegt, als die anderen Punkte.
Wenn ich das 2. ausbesser, wird das letzte Dreieck mit der Textur versehn, aber das 2. Dreieck nicht.Aber dennoch danke für de Hilfe
-
benutzt du indices? falls ja, könntest du die mal posten.
rapso->greets();
-
zweiter versuch
// Vierseitige Pyramide { 0.0f, 1.0f, 0.0f, 0x00000000, 0.5f, 0.5f }, // Oben mitte { 1.0f, -1.0f,-1.0f, 0xFFF00000, 1.0f, 0.0f }, // Rechts vorn { -1.0f, -1.0f,-1.0f, 0xCCC00000, 0.0f, 0.0f }, // Links vorn { -1.0f, -1.0f, 1.0f, 0xCCC00000, 0.f, 1.0f }, // Hinten links { 1.0f, -1.0f, 1.0f, 0xFFF00000, 1.0f, 1.0f }, // Hinten rechts { 1.0f, -1.0f,-1.0f, 0xFFF00000, 1.0f, 0.0f }, // Und noch mal rechts vorn ( benötigt zum schließen )
-
Jo in dem Sinne klappt es so.
Nur bildet dieser Fächer das Dach eines Hauses, und die Textur sind längliche Hozlatten. Wenn ich nun die Textur ein einziges mal komplett da drüberlege, ist diese nur auf 2 Seiten richtig ausgerichtet.Naja, aber vielen Dank!
-
kannst du mir das irgendwie zeigen? (screenshot)
rapso->greets();
-
[url] www.c-creon.de/screenshot.jpg [/url]
Wie du sehen kannst, wird auf der Vorderseite des Hauses die Textur richtig und auf den Nebenseiten um 90° verdreht angezeigt.
-
Es ist nicht möglich, das ein Teil der Dreiecke, die man _auf einmal_ zur Karte schickt eine Textur haben, und der zweite Teil eine andere oder auch gar keine.
Wohl auch keine um 90° gedrehte, wa?
edit: oke sry war nur geraten.
[ Dieser Beitrag wurde am 11.03.2003 um 20:12 Uhr von Saugie editiert. ]
-
dritter versuch:
{ 0.0f, 1.0f, 0.0f, 0x00000000, 0.5f, 0.5f }, // Oben mitte { 1.0f, -1.0f,-1.0f, 0xFFF00000, 1.0f, 0.0f }, // Rechts vorn { -1.0f, -1.0f,-1.0f, 0xCCC00000, 0.0f, 0.0f }, // Links vorn { -1.0f, -1.0f, 1.0f, 0xCCC00000, 0.f, 1.0f }, // Hinten links { 1.0f, -1.0f, 1.0f, 0xFFF00000, 0.0f, 0.0f }, // Hinten rechts { 1.0f, -1.0f,-1.0f, 0xFFF00000, 1.0f, 0.0f }, // Und noch mal rechts vorn ( benötigt zum schließen )
ich würde das nicht als bug bezeichnen, schau dir das haus von oben an, da ist die textur planar drauf.. aber nun könnte es mit dem dritten versuch hier so sein wie du möchtest...
sagma, wat machst du eigentlich? ein spiel?
*neugieriegesschweinist*
rapso->greets();
-
Original erstellt von Saugie:
Wohl auch keine um 90° gedrehte, wa?Doch, das geht. Per Texturkoordinaten kann die Textur beliebig platziert werden. Einschränkungen gibt es höchstens durch shared vertexes.
-
Jetzt sind die ersten beiden Dreiecke richtig und die letzten beiden verdreht.
Ich bin ganz neu in DX und habe ein Tutorial gemacht, bei dem man am Ende eine 4 seitige Pyramide und einen Würfel hatte. Dann hab ich einfach, damit ich da auch etwas reinkomme und Verständnis dafür gewinne, das zu einem Haus erweitert.
[ Dieser Beitrag wurde am 11.03.2003 um 20:30 Uhr von Creon editiert. ]
-
wenn du coder sein möchtest, dann generiere niemals grafik/models, auch nicht im code, es kann zwar sein dass es aus irgendeinem grund cool ist, aber meißt ist coder-art nur peinlich.
lad lieber ne datei und zeig an was du geladen hast, das milkshape3d dateiformant ist wirklich einfach, den editor kann man sich downloaden, und das was du gemodelt hast, kannst du im idealfall auch sehen.
rapso->greets();
-
Ich habe mir schon fast gedacht, dass diese Methode bei wirklichen Spielen viel zu unübersichtlich wäre, kenne aber nur diese, da ich wie gesagt erst 1 Tutorial gemacht habe.
Werde mich mal mit diesem 'MilkShape' auseinandersetzen.Danke für die Tipps