Gamestudio Links
Zorro Links
Newest Posts
Data from CSV not parsed correctly
by dr_panther. 05/06/24 18:50
Help with plotting multiple ZigZag
by degenerate_762. 04/30/24 23:23
M1 Oversampling
by 11honza11. 04/30/24 08:16
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
2 registered members (AndrewAMD, ChrstphFr), 864 guests, and 5 spiders.
Key: Admin, Global Mod, Mod
Newest Members
firatv, wandaluciaia, Mega_Rod, EternallyCurious, howardR
19050 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Page 2 of 2 1 2
Re: Rendern an dll leiten / void Render() [Re: TWO] #96076
10/30/06 09:34
10/30/06 09:34
Joined: Jul 2000
Posts: 27,986
Frankfurt
jcl Offline

Chief Engineer
jcl  Offline

Chief Engineer

Joined: Jul 2000
Posts: 27,986
Frankfurt
Oje, da sehe ich gleich eine ganze Menge von Fehlern.

dll_open brauchen Sie nicht. Kopieren Sie Ihre DLL in den acknex_plugins ordner.

Ihre while-Schleife ist eine klassische Endlosschleife und laesst Ihrem PC ertauben. Setzen Sie Ihre Events nur einmal und nicht in einer Schleife. Ich weiss zwar nicht, was initSPI(); und closeSPI(); machen, vermute aber stark, dass sie keinesfalls in die main-Funktion gehoeren, sondern eher an den Anfang des ersten und an den Schluss des letzten Render-Event.

Die Render-Events dagegen duerfen Sie zwar in der Main-Funktion setzen, jedoch keinesfalls - so wie Sie's getan haben - dort aufrufen. Denn auch das fuehrt sicherlich zum Absturz. Und da es nur zwei Events gibt und nicht fuenf, muessen Sie in Ihrem Event selbst unterscheiden, welcher View gerade gerendert wird - fragen Sie dazu ev->render_view ab.

Re: Rendern an dll leiten / void Render() [Re: jcl] #96077
12/19/06 17:09
12/19/06 17:09
Joined: Aug 2006
Posts: 9
Willich
M
marcellus Offline OP
Newbie
marcellus  Offline OP
Newbie
M

Joined: Aug 2006
Posts: 9
Willich
So ich bin es mal wieder. Hatte Zeit mich mal diesem Problem zu widmen.

Ich habe das jetzt mal nur mit einem Kanal (View) ausprobiert. Doch nun habe ich das Problem, dass die Welt der Engine nicht in meinem "g_pd3dDevice" ist. In diesem Objekt müsste ein komplett gerenderter Frame inklusive BeginScene und EndScene sein.

Im WDL steht: -------------------------------

function main()
{
MAX_PARTICLES = 10000;
if (curlevel==1){ level_load(welt);}
else{ level_load(welt);}
initDome();
wait(2);
}

render_sky = initSPI();
render_entities = closeSPI();

------------------------------

In der dll steht: -----------

VOID SetupMatrices()
{
// For our world matrix, we will just leave it as the identity
D3DXMATRIXA16 matWorld;
D3DXMatrixRotationY( &matWorld, timeGetTime()/1000.0f );
g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );

// Set up our view matrix. A view matrix can be defined given an eye point,
// a point to lookat, and a direction for which way is up. Here, we set the
// eye five units back along the z-axis and up three units, look at the
// origin, and define "up" to be in the y-direction.
D3DXVECTOR3 vEyePt( 0.0f, 0.0f,-3.0f );
D3DXVECTOR3 vLookatPt( 0.0f, 0.0f, 0.0f );
D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f );
D3DXMATRIXA16 matView;
D3DXMatrixLookAtLH( &matView, &vEyePt, &vLookatPt, &vUpVec );
g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );

// For the projection matrix, we set up a perspective transform (which
// transforms geometry from 3D view space to 2D viewport space, with
// a perspective divide making objects smaller in the distance). To build
// a perpsective transform, we need the field of view (1/4 pi is common),
// the aspect ratio, and the near and far clipping planes (which define at
// what distances geometry should be no longer be rendered).
D3DXMATRIXA16 matProj;
D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f );
g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );
}

DLLFUNC void initDOME(void)
{

g_pd3dDevice = (LPDIRECT3DDEVICE9)draw_begin();
if (!g_pd3dDevice) return;

// Turn on the zbuffer
g_pd3dDevice->SetRenderState( D3DRS_ZENABLE, TRUE );

// Turn on ambient lighting
g_pd3dDevice->SetRenderState( D3DRS_AMBIENT, 0xffffffff );

// We need the projection matrix to exist in a nice form before creating the
// dome object, so we call SetupMatrices() here.
SetupMatrices();

if( !gDome )
{
gDome = new SPIDX9Dome( g_pd3dDevice, 512, 512, 21, SPI_1_CHANNEL );
}
}

DLLFUNC void initSPI(void){
SetupMatrices();
gDome->SPIBegin();
gDome->SPIPreRender(SPI_1C_FRONT);
}

DLLFUNC void closeSPI(void){

gDome->SPIPostRender();
gDome->SPIEnd();
gDome->SPIFlush( SPI_1_CHANNEL, SPI_RENDER_NORMAL );
}

-------------

Die dll funktioniert, da ist kein Bug drin, wird auch alles aufgerufen und es existieren keine null-Objekte.

3D Gamesstudio startet auch anstandslos und ich erhalte einen blauen Bildschirm, wie in der Beispielapplikation der API. Das einzige was fehlt, ist die 3D Welt der Engine. Gibt es da nicht eine Code der die Renderfunktion aufruft bzw. abbildet.

SetupMatrices ist sehr wichtig, denn sie ist für die Berechnung der Verzerrung zuständig.

Schönen Gruß und frohe Weihnachten

Marcel

Re: Rendern an dll leiten / void Render() [Re: marcellus] #96078
12/20/06 12:12
12/20/06 12:12
Joined: Jul 2000
Posts: 27,986
Frankfurt
jcl Offline

Chief Engineer
jcl  Offline

Chief Engineer

Joined: Jul 2000
Posts: 27,986
Frankfurt
Setzen von World-Matrix und Renderstates macht hier keinen Sinn. Diese sind ja an Entities gekoppelt und koennen daher nicht global gesetzt werden, sondern nur individuell per Entity waehrend des Renderns. Und beim Setzen der Renderevents gibt's wieder den ueblichen Anfaengerfehler mit dem Verwechseln von Funktionspointern und Funktionsaufrufen. Lassen Sie die Klammern weg.

Ansonsten koennte das Ganze auf den ersten Blick zumindest von der Programmstruktur her funktionieren. Im Detail kann ich den Code nicht kommentieren, da ich nicht weiss, wozu das Dome-Objekt dient und was die einzelnen Funktionen tun.

Ich will Ihnen nicht zu nahe treten, aber vielleicht ist es sinnvoll, sich erst einmal gruendlich in C/C++ und DirectX einzuarbeiten, bevor Sie sich an ein solches Projekt wagen. An dem Code sehe ich, dass Sie noch nicht viel Erfahrung mit dem Programmieren haben. Da ist die Einbindung eines DirectX-bsierten Treibers vielleicht eine zu harte Nuss.

Re: Rendern an dll leiten / void Render() [Re: jcl] #96079
12/20/06 14:44
12/20/06 14:44
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 Antwort, jetzt wo Sie es sagen, werde ich die Klammern mal weg lassen.

Ich muss zugeben, dass ich mit C/C++ und DirectX noch nie programmiert habe. Jedoch programmiere ich schon ca. 5 Jahre in Java. Und, wieso sollte man seinen Horizont nicht erweitern. Ich werde mich mal gründlich mit der Zeigerproblematik in C++ und mit den DirectX Objekten auseinandersetzen.

Ich melde mich dann mal. wenn es funktioniert.

Bis die Tage,

Marcel

Page 2 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