Gamestudio Links
Zorro Links
Newest Posts
Data from CSV not parsed correctly
by jcl. 04/26/24 11:18
M1 Oversampling
by jcl. 04/26/24 11:12
Why Zorro supports up to 72 cores?
by jcl. 04/26/24 11:09
Eigenwerbung
by jcl. 04/26/24 11:08
MT5 bridge not working on MT5 v. 5 build 4160
by EternallyCurious. 04/25/24 20:49
Trading Journey
by howardR. 04/24/24 20:04
Zorro FIX plugin - Experimental
by flink. 04/21/24 07:12
Scripts not found
by juergen_wue. 04/20/24 18:51
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
5 registered members (howardR, AndrewAMD, EternallyCurious, Petra, 1 invisible), 791 guests, and 4 spiders.
Key: Admin, Global Mod, Mod
Newest Members
Mega_Rod, EternallyCurious, howardR, 11honza11, ccorrea
19048 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Page 1 of 2 1 2
Rendern an dll leiten / void Render() #96066
10/26/06 07:31
10/26/06 07:31
Joined: Aug 2006
Posts: 9
Willich
M
marcellus Offline OP
Newbie
marcellus  Offline OP
Newbie
M

Joined: Aug 2006
Posts: 9
Willich
Hallo,

ich muss für die VisionStation, ist ein Projektionssystem, welches mehr räumliche Tiefe vermitteln soll, die Engine der A6 mit Hilfe des SDK und einer API der Herstellerfirma anpassen. Vereinfacht stellt sich der neue Vorgang des Renderns so dar:

Code:

SPIPreRender(..); // API für VisionStation rendert
AppRender(); // A6 rendert
SPIPostRender(); // API rendert noch einmal



Dieser Code muss in der Direct3D Funktion void Render() stehen.

Nun meine Fragen:

Wie lautet der Code der Engine?

Ist dies vielleicht dieser?

Code:
  
DLLFUNC int Render(void)
{
ENTITY* pEntity = (ENTITY*)ev->me;
BMAP* pSkin = (BMAP*)ev->render_map[0];
LPD3DXMESH pMesh = (LPD3DXMESH)ev->render_mesh;
LPD3DMATERIAL9 pMaterial = (LPD3DMATERIAL9)ev->render_d3dmaterial;
LPD3DXEFFECT pEffect = (LPD3DXEFFECT)ev->render_d3dxeffect;
IDirect3DDevice* pD3dDev = (IDirect3DDevice*)ev->pd3ddev;
Ogre_Render(pD3dDev,pMesh,pSkin,pMaterial,pEffect); // your own render function
return 1; // tell A6 not to render this entity
}



Code stammt von diesem Thread:

http://www.coniserver.net/ubbthreads/sho...true#Post697135

Wie implementiere ich dies in WDL, d.h. wie leite ich den Rendervorgang um?

Besten Dank schon mal im voraus.

Gruß,

marcellus

Re: Rendern an dll leiten / void Render() [Re: marcellus] #96067
10/26/06 07:38
10/26/06 07:38
Joined: Sep 2003
Posts: 9,859
F
FBL Offline
Senior Expert
FBL  Offline
Senior Expert
F

Joined: Sep 2003
Posts: 9,859
in WDL bzw C-Script? Garnicht. Das mußt du per DLL machen.
Mit dem obigen Code, kannst du ein Entity mit einem anderen Renderer wie Ogre, Irrlicht, Torque darstellen.

Re: Rendern an dll leiten / void Render() [Re: FBL] #96068
10/26/06 08:20
10/26/06 08:20
Joined: Aug 2006
Posts: 9
Willich
M
marcellus Offline OP
Newbie
marcellus  Offline OP
Newbie
M

Joined: Aug 2006
Posts: 9
Willich
Ich habe anscheinend meine Lösung gefunden. Ich werde es mal mit den Befehlen render_sky und render_world ausprobieren. Somit benötige ich den Code der Engine gar nicht. Mal schauen ob es funktioniert, sonst melde ich mich noch einmal.

Dass ich die Render-Funktionen in der dll schreibe war mir schon klar.

Last edited by marcellus; 10/26/06 08:21.
Re: Rendern an dll leiten / void Render() [Re: marcellus] #96069
10/26/06 09:33
10/26/06 09:33
Joined: Jul 2000
Posts: 27,986
Frankfurt
jcl Offline

Chief Engineer
jcl  Offline

Chief Engineer

Joined: Jul 2000
Posts: 27,986
Frankfurt
Korrekt. Wenn Sie nicht einzelne Entities, sondern unabhaengige Szenerien rendern, brauchen Sie nicht den obigen Code, sondern die Render-Events der Engine.

Re: Rendern an dll leiten / void Render() [Re: jcl] #96070
10/26/06 12:49
10/26/06 12:49
Joined: Aug 2006
Posts: 9
Willich
M
marcellus Offline OP
Newbie
marcellus  Offline OP
Newbie
M

Joined: Aug 2006
Posts: 9
Willich
Danke für die Antworten.

Nach genauerer Studie der API von Elumens (VisionStation) habe ich festgestellt, dass ich das doch nicht über die Events realisieren kann. Denn es gibt da ein paar Besonderheiten (Siehe fettgeschriebenen Code).

//Methode in der dll (Direct3D)

void Render()
{
// Setup the world, view, and projection matrices
SetupMatrices();

if( gDome )
{
gDome->SPIBegin();

gDome->SPIPreRender( SPI_3C_LEFT );
AppRender(); //Render der A6
gDome->SPIPostRender();

gDome->SPIPreRender( SPI_3C_RIGHT );
AppRender();
gDome->SPIPostRender();

gDome->SPIPreRender( SPI_3C_TOP );
AppRender();
gDome->SPIPostRender();

gDome->SPIEnd();

gDome->SPIFlush( SPI_3_CHANNEL, SPI_RENDER_NORMAL );
}

else
{
AppRender();
}

// Present the backbuffer contents to the display
g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
}

Mit AppRender ist die Routine der A6 gemeint. Nun gibt es folgende Fussangeln:


  • Das ganze gerender findet zwischen SPIBegin() und SPIEnd() statt.
  • In der AppRender() darf kein Present() vorkommen. Da wird in der API ausdrücklich darauf hingewiesen. Ich gehe mal davon aus, dass die Engine dies aber macht.


Nun müsste ich also die Rendermethode der A6 Engine in die Methode AppRender() ohne Present() abbilden und im C-Script A6 mitteilen, dass alles über die dll gerendert werden muss. Ist dies so möglich und wie teile ich dies im C-Script mit? render_sky?

Schönen Gruß,

Marcel

Re: Rendern an dll leiten / void Render() [Re: marcellus] #96071
10/26/06 13:53
10/26/06 13:53
Joined: Jul 2000
Posts: 27,986
Frankfurt
jcl Offline

Chief Engineer
jcl  Offline

Chief Engineer

Joined: Jul 2000
Posts: 27,986
Frankfurt
Ja, es gibt keine AppRender Funktion, die A6 externen APIs zur Verfuegung stellt. Diese Aufgabenstellung hat sich bisher noch nicht ergeben, ansonsten waere es kein Problem, eine solche Funktion zu implementieren.

Ich nehme an, dass Ihre Applikation den View auf 3 verschiedene Beamer rendert. Machen Sie folgendes:

- Definieren Sie sich 3 Views. Setzen Sie diese auf die Parameter Ihrer 3 Beamer. Ihr SetupMatrices() kann die Engine nicht verwenden.
- Benutzen Sie RenderSky fuer gDome->SPIPreRender und RenderEntities fuer gDome->SPIPostRender. Diese Events werden jetzt pro Frame 3x aufgerufen.
- Werfen Sie den Present() aus Ihrem Code heraus. Present() wird von A6 automatisch nach dem letzten RenderEntities aufgerufen.

Re: Rendern an dll leiten / void Render() [Re: jcl] #96072
10/26/06 18:00
10/26/06 18:00
Joined: Aug 2006
Posts: 9
Willich
M
marcellus Offline OP
Newbie
marcellus  Offline OP
Newbie
M

Joined: Aug 2006
Posts: 9
Willich
Das interessante ist ja, dass die 3 Views alle an einen Beamer mit einer Speziallinse geschickt werden. Das Bild von dem Beamer wird in eine Halbkugel projiziert.

Quote:

Ja, es gibt keine AppRender Funktion, die A6 externen APIs zur Verfuegung stellt.




Diese AppRender Funktion müsste ich in die dll implementieren, dass wäre quasi Ihr Code.

Quote:

- Werfen Sie den Present() aus Ihrem Code heraus. Present() wird von A6 automatisch nach dem letzten RenderEntities aufgerufen.




Das ist ja gut, na dann werde ich dass mal mit den Events ausprobieren. Ich melde mich dann ob es funktionier hat.

Viele Grüße,

Marcel

Re: Rendern an dll leiten / void Render() [Re: marcellus] #96073
10/28/06 05:29
10/28/06 05:29
Joined: Mar 2006
Posts: 237
Deutschland, NRW, Recklinghaus...
TSG_Christof Offline
Member
TSG_Christof  Offline
Member

Joined: Mar 2006
Posts: 237
Deutschland, NRW, Recklinghaus...
Oh mann respekt also euer fachwissen möchte mann haben lol

Re: Rendern an dll leiten / void Render() [Re: TSG_Christof] #96074
10/29/06 21:25
10/29/06 21:25
Joined: Aug 2006
Posts: 9
Willich
M
marcellus Offline OP
Newbie
marcellus  Offline OP
Newbie
M

Joined: Aug 2006
Posts: 9
Willich
Ich bin es wieder. Ich habe mir jetzt mal eine dll gebacken. Die wird auch brav von der Engine akzeptiert, jedoch sitzte ich vor einem schwarzen Bildschirm und mein Rechner spricht auch nicht mehr mit mir. Er ist aber nicht abgestürzt, sondern er hört die Tastatur nicht mehr so gut, er ist also quasi etwas taub. Nun vermute ich, dass es mehrere verschiedene Bauststellen gibt, denn es werden verschiedene dll's benutzt. Aber nun zu meinen Fragen:

Wie oft und wo kann ich meine Render Events setzten? Ich habe den Code in der main() Funktion geschrieben, siehe hier:

dllfunction initDOME();
dllfunction initSPI();
dllfunction closeSPI();
dllfunction preRenderLEFT();
dllfunction preRenderRIGHT();
dllfunction preRenderTOP();
dllfunction postRender();

....

function main()
{
appdll_handle = dll_open("visionStation.dll");
MAX_PARTICLES = 10000;
if (curlevel==1){ level_load(welt);}
else{ level_load(welt);}
initDome();
while(1){
initSPI();
render_sky = preRenderLEFT();
render_entities = postRender();
render_sky = preRenderRIGHT();
render_entities = postRender();
render_sky = preRenderTOP();
closeSPI();
}
//init_rand();
wait(2);
}

Muss ich dass in eine while(1) Schleife packen? Ich möchte gerne, dass pro Frame 9 mal (unterschiedliche Blickwinkel) gerendert wird.

Für Antworten bin ich dankbar. Falls noch Infos fehlen, einfach melden.

Gruß,

marcellus

Re: Rendern an dll leiten / void Render() [Re: marcellus] #96075
10/30/06 05:04
10/30/06 05:04
Joined: Jan 2006
Posts: 1,829
Neustadt, Germany
T
TWO Offline

Serious User
TWO  Offline

Serious User
T

Joined: Jan 2006
Posts: 1,829
Neustadt, Germany
So weit ich mich erinnern kann sollte das Event auserhalb einer Funktion gesetzt werden, und ohne Klammern

function main()
{
initSPI();
closeSPI();
}

render_sky = preRenderLEFT;
render_entities = postRender;
render_sky = preRenderRIGHT;
render_entities = postRender;
render_sky = preRenderTOP;

Das Event sollte überprüfen ob die API am Laufn is. Und wenn du ein Event zweifach setzt überschreibt AFAIK das Zweite das Erste.

Versuch mal eine Wrapperfunktion die je nach view eine andere Funktion aufruft, bzw die camera jeden frame während des zeichnens mehr fach versetzt.

Page 1 of 2 1 2

Moderated by  old_bill, Tobias 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1