PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : schwarzes fenster bei OpenGL (borland)


JLafleur
17.11.2005, 15:33
hallo, ich brauche für ein größeres projekt ein OpenGL fensterchen.
hab mir also mal die beispiele von borland angesehen, das OpenGL beispiel gefunden wo ne Kugel rotiert etc.

cool, das nehm ich
hab also alle funktionen erstmal 1:1 in mein projekt kopiert,
lass es laufen, und .... schwarzes fenster.
also keine weißen linien von der kugel o.ä.

weiß jemand wie das passieren kann dass das eine projekt (beispielprojekt) einwandfrei läuft, eine quasi 1:1 kopie aber net?

mfg
JL

edit:

der einzige unterschied ist, dass das beispiel beim start schon startet, und mein fenster erst aufgehen soll wenn ich auf nen button klicke oder so. - also form->show();
liegts daran? wie kann ich das verhindern?


Scavi
17.11.2005, 15:48
Falsches Handle aufs Device? Zeig mal den Code.

JLafleur
17.11.2005, 18:22
öhm... alles? *fg
also ich hab nun die draw.h und draw.cpp in mein projekt eingebunden und es funktioniert auch so wie es sollte - warum auch immer.

nun steh ich aber vor nem anderne prob.
in der draw-routine wird ne unterfunktion aufgerufen wo das scenario gedreht wird und so - für meine zwecke brauche ich diese drehungen net - will nur starre linien und kreise zeichnen...

wenn ich jedoch erstmal nur den aufruf der funktion wo nur gltranslated und glrotated aufrufe stattfinden auskommentiere - hab ich wieder n schwarzes bild....

obwohl ja nun eigentlich nur die objekte immer an der selben stelle gezeichnet werden müssten.....
jedoch ist wie gesagt nix zu sehen :(




void TOpenGL_Form::DrawScene()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );

glPushMatrix();

latitude += latinc;
longitude += longinc;

polarView( radius, 0, latitude, longitude );


glIndexi(RED_INDEX);
glCallList(CONE);

glIndexi(BLUE_INDEX);
glCallList(GLOBE);

glIndexi(GREEN_INDEX);
glPushMatrix();
glTranslatef(0.8F, -0.65F, 0.0F);
glRotatef(30.0F, 1.0F, 0.5F, 1.0F);
glCallList(CYLINDER);
glPopMatrix();

glPopMatrix();


SwapBuffers(ghDC);
}


////////////////////////////////

void TOpenGL_Form::polarView(GLdouble radius, GLdouble twist, GLdouble latitude,
GLdouble longitude)
{
glTranslated(0.0, 0.0, -radius);
glRotated(-twist, 0.0, 0.0, 1.0);
glRotated(-latitude, 1.0, 0.0, 0.0);
glRotated(longitude, 0.0, 0.0, 1.0);

}

FireBird2002
17.11.2005, 20:00
Eigentlich müßte es reichen den polar_view-Aufruf auszukommentieren und den Translate-Aufruf aus polar_view in die Main zu schreiben.

Du könntest auch atitude und longitude auf nen konstanten Wert setzen.

JLafleur
17.11.2005, 23:10
aber warum muss ich die translated und rotated aufrufe überhaupt aufrufen?
hab mal unter linunx einiges mit opengl gemacht, und die aufrufe verschieben doch nur die "anzeigematrix" auf bestimmte positionen.
sprich - es wird einfach nur das bild "verschoben" oder "gedreht"

da die kugel ja inner mitte ist, frag ich mich - warum ich die aufrufe überhaupt
brauche... aber ich werde es mal ausprobieren,
das einzige was ich mir jetzt vorstellen könnte ist, dass sich die kugel außerhalb des sichtbereichs befindet und erst in die mitte verschoben werden muss.... aber das müsst ich erst überprüfen....


jau - scheint so zu sein - ich hab mal nur den gltranslated aufruf in die draw-funktion eingebunden und nun funktioniert es.....
irgendwie versteh ich das system mit dem apect oder so noch net so ganz, weil wenn ich die matrix
laut quellcode, net um -Radius sondern um -3 Radius (also quasi in die tiefe gehend) verschiebe, ist es wieder schwarz - bei -1.5*Radius ist es wieder zu sehen - nur diesmal - wie erwartet - kleiner.


naja, danke auf jedenfall :P

fazit - lag am gltranslated(0,0,-radius);