Zurück   Flashforum > Flash > Stuff

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 13-02-2006, 13:53   #1 (permalink)
[+]
 
Benutzerbild von André Michelle
 
Registriert seit: Dec 2002
Ort: cologne
Beiträge: 2.271
[STUFF] Perspective Texture Mapping

AS3 ist eigentlich auch schnell genug, um einen Software Renderer zu programmieren. Die Grenze setzt eigentlich nur die Geschwindigkeit von BitmapData.setPixel und BitmapData.getPixel, die das ganze erheblich verlangsamen. Ich habe eine Testszene mit Clipping und allem Drum und Dran mit über 1200 Polygonen. Die Translation und Projektion kostet mal locker gesagt nichts. Nur das Setzen der Pixel ist teuer. Vielleicht kann man die Routine noch beschleunigen, aber um das Auslesen und Setzen der Pixelwerte kommt man nicht drumherum.

Ich habe hier das Wichtigste extrahiert, damit man den Code besser nachvollziehen kann. Eine Camera, sowie das Clipping werden hier nur angedeutet, sind also nicht wirklich implementiert.

Im Prinzip habe ich nur einen C-Code von Mikael Kalms konvertiert. Als Bonus konnte ich mit ein paar Zeilen einen Z-Buffer integrieren. In einem weiteren BitmapData setze ich die Z-Werte zu jedem Pixel parallel, um beim nächsten Pixel nachschauen zu können, ob der Pixel vor oder hinter dem aktuellen Screenpixel liegt. Dadurch kann man das Z-Sorting sparen. Polygone, die sich schneiden werden also trotzdem richtig dargestellt (wie im Beispiel).

Screenshot: 4 sich schneidene texturierte Dreiecke



Zum Selberkompilieren:
Code:
-default-size 256 256 -default-frame-rate 50 -optimize
Angehängte Dateien
Dateityp: zip PerspectiveTextureMapping.zip (9,2 KB, 124x aufgerufen)
__________________
aM

blog | laboratory | tonfall | processing

Audiotool.com
André Michelle ist offline   Mit Zitat antworten
Alt 14-02-2006, 08:57   #2 (permalink)
[+]
 
Benutzerbild von André Michelle
 
Registriert seit: Dec 2002
Ort: cologne
Beiträge: 2.271
Man sieht bei einem Schachbrett sehr schön, wie die einzelnen Zeilen gerendert werden. Um das aber zu vermeiden kann man sogenanntes MidMapping einsetzen.

Code:
var original: BitmapData = BitmapData( new Texture().bitmapData );
			
var texture: BitmapData = new BitmapData( 512, 512, false, false );
			
texture.draw( original, new Matrix( 4, 0, 0, 4, 0, 0 ) );
texture.applyFilter( texture, texture.rectangle, ORIGIN, new BlurFilter() );
Dabei wird die Texture etwas geblurrt. Dadurch sieht das ganze aus, wie 'antialiased'. In 'echten' Engines werden solche MidMaps dynamisch verwaltet, je nach Abstand zum Betrachter.

Angehängte Dateien
Dateityp: zip PerspectiveTextureMapping.zip (4,0 KB, 86x aufgerufen)
__________________
aM

blog | laboratory | tonfall | processing

Audiotool.com

Geändert von André Michelle (14-02-2006 um 09:26 Uhr)
André Michelle ist offline   Mit Zitat antworten
Alt 14-02-2006, 12:19   #3 (permalink)
Trace it Baby
 
Benutzerbild von maddy
 
Registriert seit: Dec 2001
Beiträge: 416
Hey, das Ding ist fein! Auch wenn ich gestehen muss das ich wenig Ahnung vom Rendern habe. Aber nette arbeit die Du da Online stelltst!
__________________
------------------------------------------------
>>Es gibt zwei Dinge auf dieser Welt, die unendlich sind: Das Universum und die menschliche Dummheit.
Aber beim Universum bin ich mir nicht sicher...<<<Albert Einstein>>>


Afugrnud enier Sduite ist es eagl, in wlehcer Rienhnelfoge die Bcuhtsbaen in eniem Wrot sethen, das wcihitge dbaei ist, dsas der estre und lzete Bcuhtsbae am rcihgiten Paltz snid. Wiel wir nchit Bcuhtsbae für Bcuhtsbae enizlen lseen, snodren Wröetr als Gnaezs.
maddy ist offline   Mit Zitat antworten
Alt 16-02-2006, 18:07   #4 (permalink)
[+]
 
Benutzerbild von André Michelle
 
Registriert seit: Dec 2002
Ort: cologne
Beiträge: 2.271
Man kann sogar Video auf die Textur packen :)

http://blog.andre-michelle.com/upload/as3/ptm.video (Blixa Bargeld)
__________________
aM

blog | laboratory | tonfall | processing

Audiotool.com
André Michelle ist offline   Mit Zitat antworten
Alt 16-02-2006, 19:35   #5 (permalink)
\x3a\x6f\x29
 
Benutzerbild von [je]
 
Registriert seit: Apr 2004
Ort: paris
Beiträge: 806
Was benutzt du zum clippen?
Ich kann mir vorstellen das reine 3DS ganz schön schwer sind, oder?

Benutzt du in der Max-Scene da auch z-sorting? Weil ich stehe vor einer Wand, die vor dem dicken Raum mit den Säulen ist und habe noch 350 Polygone.

Aber es ist einfach krass, was jetzt möglich ist
__________________
joa ebert
http://blog.joa-ebert.com/ - http://www.joa-ebert.com/
[je] ist offline   Mit Zitat antworten
Alt 16-02-2006, 21:53   #6 (permalink)
[+]
 
Benutzerbild von André Michelle
 
Registriert seit: Dec 2002
Ort: cologne
Beiträge: 2.271
Zitat:
Benutzt du in der Max-Scene da auch z-sorting? Weil ich stehe vor einer Wand, die vor dem dicken Raum mit den Säulen ist und habe noch 350 Polygone.
Ja, da ist noch Platz. Bis jetzt clippe ich nur an der FrontPlane und die 4 Pyramidenebenen des Frustums. Der nächste Schritt wäre Portal bzw. Sektoren Unterscheidung. Z-Sorting ist aufgrund des Z-Buffer nicht zwingend notwendig. Vor allem rendere ich sogar noch die Rückseiten :)
__________________
aM

blog | laboratory | tonfall | processing

Audiotool.com
André Michelle ist offline   Mit Zitat antworten
Alt 17-02-2006, 10:48   #7 (permalink)
\x3a\x6f\x29
 
Benutzerbild von [je]
 
Registriert seit: Apr 2004
Ort: paris
Beiträge: 806
Da du keine dynamischen Lichter hast, könntest du sogar nur das rendern, was man wirklich sieht.

Bei Spieleengines gibt es da so verschiedene Ansätze. Du arbeitest ja mit Max, vielleicht könnte man dafür einen schönen Exporter schreiben, der im Mapformat speichert, von welchem Raum aus man welche Räume überhaupt sehen kann. Dazu noch Frustum Culling und man hat ohne Optimierung (mit heutigen Rechnern) schon sehr hohe FPS. (ist zumindest mit OpenGL so)

Die meißten modernen spiele haben/hatten Probleme damit, wieviel gerendert wird. Angenommen du stehst in Raum A, welcher mit Raum B in Verbindung steht. Dann könntest du theoretisch in Raum B hinein gucken, auch wenn du nur einen Spalt von dem siehst, wenn du z.B. in einem scharfen Winkel zur Tür stehst.

Dann wird, vorallem wegen dynamischen Lichtquellen (etc. die neuen Späße kenn ich nicht) meißt der ganze Raum gerendert.

Also wenn es statisch ist, müsste ja über Frustum und Sektoren schon viel möglich sein. Ich bin gespannt

EDIT: Was mir grade noch einfällt: Octree. Google mal
__________________
joa ebert
http://blog.joa-ebert.com/ - http://www.joa-ebert.com/

Geändert von [je] (17-02-2006 um 10:50 Uhr)
[je] ist offline   Mit Zitat antworten
Alt 17-02-2006, 11:11   #8 (permalink)
[+]
 
Benutzerbild von André Michelle
 
Registriert seit: Dec 2002
Ort: cologne
Beiträge: 2.271
Frustum Clipping ist schon drin. Das macht auch extrem viel aus. Aber wenn ich in den Raum schaue, dann sind da nunmal viele Polygone.

Man kann auch pretesten, ob Polygone völlig hinter anderen Polygone versteckt sind. Eben mit Octatree oder BinaryTrees, etc. Wenn du dann vor der beschriebenen Wand stehst, sieht du auch nur die 2,3 Polygone.

Ja, das ist ein endloses Feld, aber in AS3 macht es Sinn, diese ganzen Pretests einzubauen, weil das Rechnen wirklich schnell genug ist. Der ZBuffer wäre auf Dauer alleine zu langsam.

Ein Plugin mit MAXScript schenke ich mir. MAXScript ist furchtbar. Ich könnte mir vorstellen, dass man bei geschickter Benennung der Objekte alle diese Features einbauen kann. Die Namen stehen auch im 3ds File.
__________________
aM

blog | laboratory | tonfall | processing

Audiotool.com
André Michelle ist offline   Mit Zitat antworten
Alt 17-02-2006, 11:25   #9 (permalink)
\x3a\x6f\x29
 
Benutzerbild von [je]
 
Registriert seit: Apr 2004
Ort: paris
Beiträge: 806
MAXScript?

Geht doch auch mit C, oder nicht?
Ich würde sogar sagen, ich habe es zwar selbst noch nie gemacht, aber ich bin mir sehr sicher, dass es geht.
__________________
joa ebert
http://blog.joa-ebert.com/ - http://www.joa-ebert.com/
[je] ist offline   Mit Zitat antworten
Alt 17-02-2006, 11:41   #10 (permalink)
[+]
 
Benutzerbild von André Michelle
 
Registriert seit: Dec 2002
Ort: cologne
Beiträge: 2.271
Zitat:
Ich würde sogar sagen, ich habe es zwar selbst noch nie gemacht, aber ich bin mir sehr sicher, dass es geht.
Das steht ausser Frage

Aber wenn der Aufwand zu hoch ist, dann lasse ich es lieber. MAXScript ist die Scriptsprache von 3dmax und die ist der Grusel schlechthin. Richtige Plugins lassen sich bestimmt auch in C programmieren, aber ich bin mir auch sicher, dass es gute Leveldesign-Plugins bereits gibt, deren Output man in AS3 auch parsen kann. Ich habe mal gehört, dass 3dmax von Spieleentwicklern gerne benutzt wird, während zB. Maja wirklich für Animationen im Filmbereich eingesetzt wird.

Ich frage mal die Jungs in meinem GameDeveloper Kurs nächste Woche. Die arbeiten mit 3dmax und der Unrealengine.
__________________
aM

blog | laboratory | tonfall | processing

Audiotool.com
André Michelle ist offline   Mit Zitat antworten
Alt 21-02-2006, 13:59   #11 (permalink)
www.kruesch.de
 
Benutzerbild von flory
 
Registriert seit: Feb 2002
Beiträge: 1.057
Sehr schön das
Ich habe für meine 3D Sachen immer Cinema4D benutzt. Ich finde das für solche Zwecke
wesentlich besser als 3D MAX. Es gibt da eine nette Scripting Sprache und man kann Objekte
in einer hierarchischen Struktur verwalten und mit eigenen Datentags versehen.

Mit AS3 lässt sich sicherlich eine ziemlich gute 3D Engine bauen. Ich hatte da vor einem Jahr
mal ein bischen experimentiert und war ziemlich überrascht von der Performance.

Gruss,
Florian
__________________
www.planet-xaml.net
flory ist offline   Mit Zitat antworten
Alt 21-02-2006, 14:59   #12 (permalink)
[+]
 
Benutzerbild von André Michelle
 
Registriert seit: Dec 2002
Ort: cologne
Beiträge: 2.271
Zitat:
Ich habe für meine 3D Sachen immer Cinema4D benutzt. Ich finde das für solche Zwecke wesentlich besser als 3D MAX. Es gibt da eine nette Scripting Sprache und man kann Objekte in einer hierarchischen Struktur verwalten und mit eigenen Datentags versehen.
Ich erinnere mich an dein C4d Plugin, was du auf der flashconference in Stuttgart beschrieben hast. Ich kann weder 3dmax noch c4d. Für 3dmax finde ich wahrscheinlich Leute, die mir etwas helfen können.

Ich könnte mir vorstellen, dass ich anhand der Namensgebung der Objekte die Portals definieren kann. Jeder Raum, Portal wäre dann ein eigenes Objekt, was ich im 3ds File mit Namen wiederfinden kann und entsprechend in die Datenstruktur einbette.
__________________
aM

blog | laboratory | tonfall | processing

Audiotool.com
André Michelle ist offline   Mit Zitat antworten
Alt 21-02-2006, 16:04   #13 (permalink)
Knopfmaler
 
Benutzerbild von Aerks
 
Registriert seit: Nov 2004
Ort: Essen
Beiträge: 227
Blender lässt sich ganz prima mit Python anscripten. Wäre vielleicht eine Alternative für denjenigen der

a.) sich ein wenig mit dem etwas exotischen Interface von Blender beschäftigt
b.) sich an die formatierten Codeblöcke in Python gewöhnt

OK... ohne Flax.. Blender entwickelt sich rasant weiter, kann eine Menge ist scriptfähig und Open-Source. Was will man mehr.

Viele Gruesse
=:] Aerks
__________________
______________________________________________
www.rgblaster.de
Aerks ist offline   Mit Zitat antworten
Alt 21-02-2006, 16:35   #14 (permalink)
www.kruesch.de
 
Benutzerbild von flory
 
Registriert seit: Feb 2002
Beiträge: 1.057
Stimmt. Ich hatte damals für mx3d.com auch anfangs mit Blender gearbeitet. Allerdings gabs
damals (2003) noch keine Möglichkeit, an Splines ranzukommen.
Bei C4D hat mich aber auch der Objekt-Explorer überzeugt, mit dem man ganz wunderbar
eine SceneGraph modellieren kann.

Gruss
Florian
__________________
www.planet-xaml.net
flory ist offline   Mit Zitat antworten
Alt 21-02-2006, 17:44   #15 (permalink)
Knopfmaler
 
Benutzerbild von Aerks
 
Registriert seit: Nov 2004
Ort: Essen
Beiträge: 227
@flory
Die fehlende Visualisierung vom Scene-Graphen hat mich u.a. auch immer von Blender abgehalten.

Hat sich allerdings vor einiger Zeit erledigt.

http://www.blender.org/cms/Outliner.437.0.html

Der C4D-Outliner ist zwar immer noch um Klassen besser, aber es ist schonmal ein Anfang.

Es lohnt sich wirklich die ganzen ReleaseInfos zu überfliegen, weil man hier den besten Überblick bekommt, was Blender kann und was nicht. Ich war echt überrascht, was sich alles getan hat.

Die Entwickler dort coden echt was das Zeug hält.

Viele Gruesse
=:] Aerks
__________________
______________________________________________
www.rgblaster.de
Aerks ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

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



Alle Zeitangaben in WEZ +1. Es ist jetzt 18:36 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele