AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Prism Texturierung ohne OpenGl/DirectX
Thema durchsuchen
Ansicht
Themen-Optionen

Texturierung ohne OpenGl/DirectX

Ein Thema von simlei · begonnen am 14. Mär 2006 · letzter Beitrag vom 14. Mär 2006
Antwort Antwort
simlei

Registriert seit: 23. Nov 2005
119 Beiträge
 
Delphi 7 Professional
 
#1

Texturierung ohne OpenGl/DirectX

  Alt 14. Mär 2006, 15:13
Hallo! Ich hab mir so ein kleines 3d-prog gebastelt
( http://simlei3.si.funpic.de/projects.html - Ansicht oder http://simlei3.si.funpic.de/Programm...jekt_beta2.rar - Download)
und da will ich Flächen darstellen - texturiert. wie man vielleicht sieht, ist dies alles "per Hand" berechnet, also nicht OpenGL oder sonst Renderer/3dBibliotheken/Beschleuniger genutzt. Und so such ich nach einer Funktion, die ein Bild - Bitmap - auf eine bestimmte Fläche staucht, sodass sozusagen ein Vieleck (ich sag jetzt mal nicht Polygon da das viele als Körper auffassen) mit einem Bild ausgefüllt ist, das wie alle Bilder rechteckig vorliegt, im Programm aber nicht über das Polygon hinausgeht, sondern auf es gestreckt ist.
Ich wär sehr dankbar wenn jemand eine Möglichkeit weiß, ich hab bisher versucht das Mathematisch zu lösen - hat nicht geklappt .
Danke schonmal!
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#2

Re: Texturierung ohne OpenGl/DirectX

  Alt 14. Mär 2006, 15:40
Du kannst ein Image in .NET ohne Probleme vergrößern und verkleinern. Diese gedreht darzustellen wird allerdings sehr problematisch. In dem Fall hast du 2 möglichkeiten:
1. Du greifst auf eine API zurück (entweder n OpenGL-Header für .NET oder Managed DirectX (zweiteres kann ich nur empfehlen)) Nachdem du davon absehn willst gibts noch die 2. Möglichkeit:
2. Du programmierst dir selbst sozusagen eine RenderingPipeline. Das wird allerdings sehr aufwändig, das kann ich dir versichern

Wenn du dir eine Rendering Pipeline anguckst wirst du sehn, dass du da relativ viel zu tun ham wirst. Und nachdem du das alles auf der CPU machst (zumindest geh ich mal davon aus) kannst du dir auch sicher sein, dass das ganze ziemlich langsam wird
Um aber auch etwas konstruktivität in meinen Beitrag zu bringen: Guck dir ne Rendering Pipeline an (auf MSDN.com gibts dazu relativ interessante Dinge) und schau, was du alles benötigst. Da siehst du dann auch, wie du das ganze Aufbauen kannst, und was alles erledigt werden muss, um ein texturiertes, gedrehtes Dreieck auf den Bildschirm zu rendern.

greetz
Mike
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
simlei

Registriert seit: 23. Nov 2005
119 Beiträge
 
Delphi 7 Professional
 
#3

Re: Texturierung ohne OpenGl/DirectX

  Alt 14. Mär 2006, 16:55
Zitat:
Du kannst ein Image in .NET ohne Probleme vergrößern und verkleinern. Diese gedreht darzustellen wird allerdings sehr problematisch.
Ist schon erledigt das mit dem Drehen wie gesagt ist das alles schon berechnet - sieht man in dem Programm. Mein einziges Problem ist eben, auf ein definiertes Polygon (nämlich das schon gedrehte Dreieck/Viereck usw.) Ein viereckiges Bild so aufzubringen, dass es derartig linear gestreckt/gestaucht ... ist (aber nicht überall gleich, ich will also nicht dass wieder ein Rechteck entsteht sondern dass das gestauchte eben kongruent zu dem zu texturierenden Polygon ist).
Unter MSDN hab ich ehrlich gesagt nicht viel sinnvolles gefunden... ( )
Also wer noch Ideen, Gedankenanstöße o.a (Funktionen sind natürlich am besten) hat - her damit! Ich will sie ja auch selber schreiben und wie gesagt nicht OpenGL oder DX nutzen.
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Texturierung ohne OpenGl/DirectX

  Alt 14. Mär 2006, 16:58
da würd ich die bounding box von dem polygon berechnen, rundrum clippen und dann da rein stretchen... geht mit .Net ja ganz easy, denke ich.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
simlei

Registriert seit: 23. Nov 2005
119 Beiträge
 
Delphi 7 Professional
 
#5

Re: Texturierung ohne OpenGl/DirectX

  Alt 14. Mär 2006, 17:38
bounding box = klar
clippen - wie genau meinst du das? ich will es nicht wegschneiden
und reinstretchen? wenn es zB ein Dreieck ist, wie will ich das machen? kannst du mir da die Funktion(en) nennen? danke
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#6

Re: Texturierung ohne OpenGl/DirectX

  Alt 14. Mär 2006, 18:07
Zitat von simlei:
Unter MSDN hab ich ehrlich gesagt nicht viel sinnvolles gefunden... ( )
Sry, ich hab da mit der Genauigkeit wohl etwas gegeizt Was ich meinte war der beschriebene Ablauf, der Durchlaufen wird, wenn man ein Dreieck texturiert und gedreht darstellen will. Der is in den DirectX-Docus zu finden, wenn man nach Fixed Function Pipeline oder Rendering Pipeline sucht.
Ich glaube nicht, dass das .NET-Framework hier von sich aus Funktionen zum Texturieren von gedrehten Polygonen mitsich bringt. Deswegen: du hast n bisschen Arbeit vor dir.
Ich versuch mal etwas genauer zu erklären, was ich mit "Arbeit" meine:
Du hast bspw. ein Dreieck. Das simpelste (und afaik einzigste) geometrische Gebilde, mit dem man jegliche gemoetrische Form zusammensetzen kann.
Dieses Dreieck hat 3 Koordinaten. Diese entsprechen den 3 Eckpunkten, wo sie sich im 3Dimensionalen Raum befinden. Nun rechnest du diese Koordinaten in Abhängigkeit der Rotation des 3Ecks in 2D-Koordinaten um, damit du sie auf dem Bildschirm darstellen kannst. Das hast du ja schon geschafft
Jetzt kommt der Teil, der dir Schwierigkeiten Macht. Die Farbe von jedem Pixel, das sich innerhalb des 3Ecks befindet, muss nun berechnet werden. D.h. du musst erstmal rausfinden: Welche Pixel befinden sich innerhalb des 3ecks, und welche tun das nicht? Das wird wohl in einer Schleife geschehen müssen, in der du Pixel für Pixel abfragst. Performance-Schub wär dann zu erreichen, wenn du die zu überprüfenden Pixels optimierst, und bspw. nur von der "linkesten" Ecke des Dreiecks bis zur Ecke ganz rechts überprüfst, und nicht alle Pixel der Zeichenfläche. Wahrscheinlich gibts dafür noch ne performantere Möglichkeit, wüsste jetzt aber nicht, welche.
So, für jedes Pixel, das sich im 3eck befindet musst du rausfinden, an welcher Position im 3Eck es sich befindet. Anhand dieser Position kannst du dann ausrechnen, welcher Teil der Textur jetzt da gezeichnet werden muss. Um das rauszukriegen, brauchst du aber noch eins: Texturkoordinaten. Du musst logisch wissen, welche Ecke der Textur an welches Eck des Dreiecks kommt. Anhand der damit nun errechneten Position nimmst du das Bitmap und holst dir die Farbe an dieser Position. Damit weißt du dann, welche Farbe das Pixel hat und kannst es zeichnen.
Wie du siehst, es ist nicht gerade einfach, und absolut nicht performant. Aber ich hoffe trotzdem, dass dus hinkriegst, bin auf dein Ergebnis gespannt

greetz
Mike
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz