DrawTexturedPoly? Vertexalpha? Mit Max2D?
Übersicht

![]() |
FetzeBetreff: DrawTexturedPoly? Vertexalpha? Mit Max2D? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi
Sorry, dass ich schon wieder ein Topic wegen einer Frage meinerseits eröffne, aber ich weis mir mal wieder keinen Rat. Diesmal geht es um das Zeichnen von texturierten Polygonen inklusive Vertexalpha und Vertexcolor wenn möglich mit Max2D. Ansonsten sollte es trotzdem sowohl mit DirectX als auch OpenGL funktionieren. Ich mache mir gerade Gedanken bzgl. eines Partikelsystems für StarTrade (*schleichwerbung*). Unter anderem würde ich auch gerne "Strahlen" unterstützen, wie man sie an den Antrieben der Raumschiffe auf dem folgenden Bild sehen kann. ![]() Ich dachte mir, ich lasse den partikelemitter einfach so funktionieren, wie sonst auch, die Partikel aber anders zeichnen also sonst. Und zwar erstelle ich ein Polygon anhand der Positionen der Partikel, das die Textur des (Antriebs-)Strahls haben wird. Jedem Partikel ordne ich 2 Vertexpunkte zu, die Färbung und Alpha des Partikels übernehmen und lasse das ganze Polygon dann noch zeichnen. Hier, ich habe zur Vorgehensweise eine kleine Skizze angefertigt: ![]() Leider gibt es in Max2D weder einen Befehl namens "DrawTexturedPoly" noch VertexColor oder VertexAlpha und in Sachen DirectX/OpenGL-Programmierung werde ich wohl ohne tagelange Einarbeitungszeit nicht sehr weit kommen. Nun meine Frage: Gibt es Alternativen, das ganze hinzubekommen, die vielleicht auch allein mit Max2D funktionieren? Wenn nicht: Gibt es bereits Funktionen/Module, mit denen ich das realisieren kann? Sollte auch das nicht der Fall sein, bitte ich DirectX oder OpenGL-Kenner, mir ein kurzes Codebeispiel zu zeigen und mir zu erkläutern, wie die ganze Sache funktioniert. |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vertexalpha: SetAlpha + Setblend
Vertexcolor: SetColor Alle danach ausgeführten Befehle nutzen dann die jeweilige Farbe. Gibt es einen zwingenden Grund, nicht richtige Partikel nutzen zu können, die zeitlich transparenter werden und anderweitig ihre Farbe ändern, anstelle des TriangleStrips? Mit Max2D befehle geht ein trianglestrip nicht. Indiespath hatte eine modul dafür, aber die gibts net für BM 1.18. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Fetze |
![]() Antworten mit Zitat ![]() |
---|---|---|
Anstatt eines TriangleStrips doch eher ein Quadstrip, falls es sowas gibt.
Und - auch, wenn es bei einer konkreten Fragestellung nichts zur Sache tut, ob das anders geht oder nicht - ja, es gibt einen zwingenden Grund, nämlich das Aussehen des ganzen und nicht zuletzt die Performance. Es ist ein ziemlicher optischer Unterschied, ob ich nun eine Menge Quads verwende oder einen langkettiges Quadpolygon. Indiepaths Modul hab ich mittlerweile gefunden, sogar den Thread, in dem er zuvor den für mein Vorhaben relevanten Code gepostet hat. Von daher dürfte die Version keine Rolle spielen. Jetzt habe ich allerdings eine Frage zum DrawTexturedPoly. Hier erstmal der Code: Code: [AUSKLAPPEN] # # # # # # [DIRECTX] # # # # # # Method DrawTexturedPoly( frame:TDX7ImageFrame,xyuv#[],handlex#,handley#,tx#,ty# ) If islost Return If xyuv.length<6 Or (xyuv.length&1) Return Local segs=xyuv.length/2 Local uv#[] = New Float[segs*10] '10 Local ii:Int = 0 For Local i=0 Until Len(xyuv) Step 4 Local x# = xyuv[i+0]+handlex Local y# = xyuv[i+1]+handley uv[ii+0] = x*ix+y*iy+tx uv[ii+1] = x*jx+y*jy+ty uv[ii+2] = 0 ' *********** THIS IS THE Z-COORDINATE uv[ii+3] = xyuv[i+2] uv[ii+4] = xyuv[i+3] ii:+5 Next SetActiveFrame frame device.DrawPrimitive(D3DPT_TRIANGLEFAN,D3DFVF_XYZ|D3DFVF_TEX1,uv,segs,0) End Method # # # # # # [OPENGL] # # # # # # Method DrawTexturedPoly (xy#[],handle_x#,handle_y#,origin_x#,origin_y#) If xy.length<6 Or (xy.length&1) Return Assert seq=_max2dGfxSeq Else "Image does not exist" EnableTex name glBegin GL_POLYGON For Local i=0 Until Len xy Step 4 Local x#=xy[i+0]+handle_x Local y#=xy[i+1]+handle_y Local u#=xy[i+2] Local v#=xy[i+3] glTexCoord2f u,v glVertex2f x*ix+y*iy+origin_x,x*jx+y*jy+origin_y Next glEnd End Method Da die Vertices - zumindest im DirectX-Beispiel - offenbar nicht einzeln gesetzt werden, wird es schwierig, das ganze mit SetAlpha und SetColor zu lösen. Und abgesehen davon... kann ich das ausserhalb von Max2D überhaupt? Was nun? |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
QuadStrips gibts leider nicht. Es gibt genau genommen garkeine Quads in 3D sondern nur Triangles (auch wenn viele Modeller mit Quads arbeiten)
Ohne in Max2D reinzuhacken kannst du so etwas leider nicht machen. Einzelne Vertices setzen ist als solches nicht wirklich von nutzen, aber du kannst jedem einzelnen eine eigene Farbe verpassen. Dazu müsstest du jedoch die aktuelle Implementation ein wenig erweitern für deinen eigenen Zweck. D3DFVF_DIFFUSE wäre die Flag die du brauchst um VertexFarben in das Vertexformat zu packen. Die Farbe wird dabei als eine Int angenommen. Habe auf die schnelle ein Delpi Beispiel gefunden (denke einfacher verständlich als C++), welches die Farbe setzt. http://www.ieap.uni-kiel.de/su...tion2.html http://www.ieap.uni-kiel.de/su...tion3.html Vielleicht hilft dir das ja. BM selbst besitzt die nötigen Konstanten etc alle schon (pub.directx - d3d.bmx) |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Fetze |
![]() Antworten mit Zitat ![]() |
---|---|---|
Okay, danke, ich denke, das wird mir helfen. Kann mir jetzt noch jemand erklären, wie das mit OpenGL funktioniert? Gibt's da vielleicht auch ein Tutorial zu? | ||
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
In OpenGl, gibt es Quads,
http://nehe.gamedev.net/ kleine werbung für meins: http://jankuhnert.blogspot.com...layer.html Achtung, meins ist ohne Stripe Quad. zu bemerken ist, das die Quads nur 2 Dreiecke sind. WEnn du deine Routine sehr optimiert hast, bist du mit 3ecken bei derGleichen Polyzahl shcneller als Quad, und falls du dieses Jahrtausend fertigwerden willst, nimm einfach quads. |
||
between angels and insects |
![]() |
Fetze |
![]() Antworten mit Zitat ![]() |
---|---|---|
Okay, danke. Ich denke, jetzt hab ich alles, was ic hbrauche, um mir selbst eine DrawTexturedPoly-Function zu schreiben ![]() |
||
![]() |
SonGoku |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sorry, das ich jetzt einfach so reinplatze...
Ich wollt mal nur sagen, dass du dir mal vielleicht "Space Fight" anschauen solltest (siehe offizielle BM Seite). Das Spiel ist jetzt OpenSource und beinhaltet genau das, was du suchst (siehe Screens). Naja, ich hoffe, dass ich dir damit weiterhelfen konnte. MfG Goku |
||
Projekt "BlitzPong" --> 100%
BRL Account mit Blitz3D und BlitzMax für nur 67€!!! Das Buch "Spiele programmieren mit Blitz Basic" für nur 15€!!! |
![]() |
Fetze |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also wenn ich mich nicht vergucke, bestehen die Antriebe in SpaceFight aus sehr vielen einzelpartikeln und nicht aus je einem Partikelstrang. Trotzdem danke für den Tip ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group