2 registered members (Akow, tomaslolo),
1,536
guests, and 12
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
Rendern an dll leiten / void Render()
#96066
10/26/06 07:31
10/26/06 07:31
|
Joined: Aug 2006
Posts: 9 Willich
marcellus
OP
Newbie
|
OP
Newbie
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#Post697135Wie 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: FBL]
#96068
10/26/06 08:20
10/26/06 08:20
|
Joined: Aug 2006
Posts: 9 Willich
marcellus
OP
Newbie
|
OP
Newbie
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: jcl]
#96070
10/26/06 12:49
10/26/06 12:49
|
Joined: Aug 2006
Posts: 9 Willich
marcellus
OP
Newbie
|
OP
Newbie
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
|
|
|
|