Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Mai 29, 2024 20:58

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Projekt Open GL - Bergfahrt
BeitragVerfasst: Mi Aug 01, 2012 16:06 
Offline
DGL Member

Registriert: Mi Aug 01, 2012 13:30
Beiträge: 4
Programmiersprache: C++
Hallo Leute,

mein Kumpel und ich haben Probleme bei einem kleinen Projekt.
Wir wollen ein Fahrrad auf einen Berg, dargestellt durch einen Kegel, fahren lassen. Dieser Ablauf erfolgt auf einer Grundfläche, welche mit einer Textur belegt ist.
Als Ergebnis soll quasi eine Halbkugel (Himmel) entstehen, auf deren Grundfläche (Rasen) mehrere Berge, sowie eine Straße und angedeutete Gebäude stehen und ein Fahrrad auf einen Berg fährt.
Desweiteren soll die Perspektive über die Maus gesteuert und die Geschwindigkeit des Radfahrers über 2 Tasten gesteuert werden.

Da wir noch nicht so erfahren im Umgang mit OpenGL sind, haben wir unser Programm relativ primitiv und trotzdem komplex, mittels Visual Studio 2008, programmiert.

Unser Hauptproblem besteht darin, dass die Berge nicht richtig dargestellt sind, sondern irgendwie im Raum stehen.
Desweiteren versuchen wir den Hintergrund mit einer Textur zu belegen, was ebenfalls perspektivisch nicht so richtig funktioniert.
Ein weiteres kleines Problem liegt in der Abfrage der 2 Tasten und der damit verbundenen Geschwindigkeitsänderung.

Um unser Problem besser darstellen zu können, haben wir den Projektordner unter dem folgenden Links angehangen, damit ihr euch das Projekt mal anschauen könnt.
https://www.dropbox.com/s/8qttzjf2zaxst ... gfahrt.zip
http://www.file-upload.net/download-469 ... t.zip.html

Wir würden uns über ein paar Tipps sehr freuen.

Grüße
IMU


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Projekt Open GL - Bergfahrt
BeitragVerfasst: So Aug 19, 2012 19:52 
Offline
DGL Member

Registriert: Mi Aug 01, 2012 13:30
Beiträge: 4
Programmiersprache: C++
Hallo Leute,

bitte schaut euch unser Projekt mal an, wenn ihr Zeit habt.

Wir benötigen dringend EURE Hilfe!

VIelen Dank.

IMU


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Projekt Open GL - Bergfahrt
BeitragVerfasst: So Aug 19, 2012 21:02 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Am besten beschreibst du die Probleme einzeln und etwas ausführlicher (evlt. mit Screenshots). Nicht viele werden sich das Programm runterladen und ausprobieren.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Projekt Open GL - Bergfahrt
BeitragVerfasst: Mo Aug 20, 2012 10:41 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Wenn das Hauptproblem die Darstellung der Berge ist, dann kopiere doch den relevanten Code-Teil hier rein.
Ich habe in dem Projekt gerade nur eine Draw-Function gefunden, die eine rote Linie zeichnet.

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Projekt Open GL - Bergfahrt
BeitragVerfasst: Mo Aug 20, 2012 11:17 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Mir ist auch nicht ganz klar was am Ende raus kommen soll. Ich kann mit dem Programm unter Linux wenig anfangen. Und Code lesen wenn unklar ist was am Ende raus kommt ist auch schwer. Vielleicht baust du einfach mit Photoshop/Gimp/Paint/was immer du hast... ein kleines Mockup als Illustration.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Projekt Open GL - Bergfahrt
BeitragVerfasst: Mo Aug 20, 2012 14:14 
Offline
DGL Member

Registriert: Mi Aug 01, 2012 13:30
Beiträge: 4
Programmiersprache: C++
@Vinz:
SORRY!!! Wir hatten vergessen die alten Datein aus den Unterordnern zu löschen.
Du hast glaube die falsche .cpp-Datei eingebunden.
Die richtige Datei lautet "Kombination Mausfunktion_Texturen.cpp" und ist im Hauptordner

Nochmal kurz ne Zusammenfassung, was raus kommen soll.
Wir wollen, dass ein Fahrrad auf einer Straße losfährt und dann auf einen Berg fährt, der Kickelhahn heißt (vllt. kennt den ja jemand :-).
Dazu haben wir eine Scheibe für den Untergrund dargestellt, auf der die Straße, die Berge und ein paar Gebäude stehen. Im hintergrund soll der Himmel dargestellt werden. Mit der Maus soll man das ganze Drehen und Zoomen können. Desweiteren soll die GEschwindigkeit mit a un s varriert werden.


Die Probleme im Einzelnen zu erklären ist gar nicht so einfach, da das komplette Programm ziemlich lang ist und die Interaktionen zwischen verschiedenen Funktionen und deren Einflüsse leider teilweise unklar, weshalb diese Verzehrte Darstellung wahrscheinlich zustande kommt.
Da wir allerdings kaum Erfahrungen davon haben, finden wir den Fehler einfach nicht, obwohl die Darstellung der Berge eigentlich einfach gehalten wurden.
Das Problem ist, dass die Berge perspektivisch falsch dargestellt werden. Sie werden bei Ansicht von vorne oder Oben nicht dargestellt, allerdings von unten passt es.
Wenn der Tiefenpuffer ausgeschaltet wird, dann sind die Berge an der richtigen Stelle und da passt das.
Allerdings müssen wir den Tiefenpuffer verwenden und somit das Problem irgendwie lösen.
Hier mal alle Berge:

GLvoid bergkickel( GLvoid )
{
///*static GLfloat greenAmbient[] = { 0.3f, 0.1f, 0.1f, 1.0f };*/
//static GLfloat greenDiffuse[] = { 0.0f, 0.7f, 0.2f, 1.0f };
///*static GLfloat whiteSpecular[] = { 1.0f, 1.0f, 1.0f, 1.0f };*/
//glPushAttrib( GL_LIGHTING_BIT );
// /*glMaterialfv( GL_FRONT, GL_AMBIENT, greenAmbient );*/
// glMaterialfv( GL_FRONT, GL_DIFFUSE, greenDiffuse );
///* glMaterialfv( GL_FRONT, GL_SPECULAR, whiteSpecular );*/
// glMaterialf( GL_FRONT, GL_SHININESS, 1.0 );

glPushMatrix();
glTranslated( 500.0, 0.0, -2000.0 );

//Berg
//glColor3d( 0.0, 0.7, 0.2 );
glRotated ( -90 , 1.0, 0.0, 0 );
auxSolidCone (1500,1700);
//glPopAttrib();
glPopMatrix();
}

GLvoid turmkickel( GLvoid )
{
//glScaled( 5.0, 5.0, 5.0 ); //Skalierung

glPushMatrix();
glTranslated( 500.0, 1750, -2000.0 );

//Turm
glColor3d( 0.8, 0.8, 0.8 );
//glRotated ( -90 , 1.0, 0.0, 0 );
auxSolidCylinder (100,200);
glTranslated(0,50,0);
auxSolidCylinder (150,50);

//Bodenplatte
glRotated(90,1,0,0);
gluDisk ( pqgras, 0, 150.0, 20, 1);


//Flagge
glRotated(-90,1,0,0);
glColor3d( 1, 0, 0 );
glTranslated(0,150,0);
auxSolidCylinder (20,150);

// Texturanwendung einschalten
glEnable ( GL_TEXTURE_2D );

// Texture Objekt texName[1] aktivieren
glBindTexture ( GL_TEXTURE_2D, textureName[4] );

//glRotated ( -90 , 0, 1.0, 0 );
glBegin( GL_QUADS );
glTexCoord3d(0.0,1.0,0.0); glVertex3d(0,0,0);
glTexCoord3d(0.0,0.0,0.0); glVertex3d(0,-50,0);
glTexCoord3d(1.0,0.0,0.0); glVertex3d(100,-50,0);
glTexCoord3d(1.0,1.0,0.0); glVertex3d(100,0,0);
glEnd();

glDisable ( GL_TEXTURE_2D );
glPopMatrix();
}

GLvoid berglind( GLvoid )
{
//glScaled( 5.0, 5.0, 5.0 ); //Skalierung

glPushMatrix();
glTranslated( -2500.0, 0.0, -300.0 );

//Berg
glColor3d( 0.0, 0.7, 0.2 );
glRotated ( -90 , 1.0, 0.0, 0 );
auxSolidCone (1500,1200);
glPopMatrix();
}

GLvoid bergMane( GLvoid )
{
//glScaled( 5.0, 5.0, 5.0 ); //Skalierung

glPushMatrix();
glTranslated( 3000.0, 0.0, -300.0 );

//Berg
glColor3d( 0.0, 0.7, 0.2 );
glRotated ( -90 , 1.0, 0.0, 0 );
glTranslated(-500,2000,0);
auxSolidCone (1000,400);
glTranslated(-4000,500,0);
auxSolidCone (1500,400);
glPopMatrix();
}


GLvoid bergIlm( GLvoid )
{
//glScaled( 5.0, 5.0, 5.0 ); //Skalierung

glPushMatrix();
glTranslated( 3000.0, 0.0, -300.0 );

//Berg
glColor3d( 0.0, 0.7, 0.2 );
glRotated ( -90 , 1.0, 0.0, 0 );
auxSolidCone (1700,600);
glPopMatrix();
}


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Projekt Open GL - Bergfahrt
BeitragVerfasst: Mo Aug 20, 2012 14:19 
Offline
Compliance Officer
Benutzeravatar

Registriert: So Aug 08, 2010 08:37
Beiträge: 460
Programmiersprache: C / C++ / Lua
wenn der Berg falsch dargestellt wird, solltet ihr mal die Renderfunktion reinschreiben und sehen ob die gluPerspective Parameter richtig eingestellt sind.

nebenbei, die AUX library ist veraltet.

_________________
offizieller DGL Compliance Beauftragter
Never run a changing system! (oder so)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Projekt Open GL - Bergfahrt
BeitragVerfasst: Di Aug 21, 2012 09:15 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 15, 2009 20:48
Beiträge: 111
Wohnort: Berlin
Programmiersprache: Delphi,JS,PHP,AS3,C#
Zitat:
die Interaktionen zwischen verschiedenen Funktionen und deren Einflüsse leider teilweise unklar


das sieht auch ziemlich wirr aus, und ich finde es schwierig da überhaupt durchzuschauen. habt ihr euch das matrix tutorial angeschaut? die bilder sind schon gold wert :) die reihenfolge von translate, rotate und scale ist ganz entscheident.

sinvoll wäre am anfang einmal glloadidentity aufzurufen um alle rotation und translation und skalierung auszumerzen; danach dann die einzelnen objekte rendern. ein schema das sich dafür anbietet wäre zb:

Code:
  1.  
  2. void RenderSomething
  3. {
  4. glPushMatrix; //die untransformierte modelview speichern
  5. glTranslatef(posX,posY,posZ); //erstmal verschieben
  6. glRotatef(winkel,0,0,1); //dann rotieren, zb um z
  7. glScalef(scaleX,scaleY,scaleZ); //dann skalieren
  8.   glBegin(bla); //objekt zeichnen, manuel oder mit aux(wovon ich nichts verstehe)
  9.   //texcoordinaten
  10.   //alle eckpunkte ,lokales system (zb von -0.5 bis +0.5)!
  11.   glEnd;
  12. glPopMatrix; //wieder zurück zur unveränderten matrix
  13. }
  14.  


so habt ihr nach jedem objekt wieder den gleichen ursprung und könnt so die zahlen einfach anpassen und es ist gut vorhersehbar wo das zu zeichnende objekt erscheint. natürlich werdet ihr komplett neue zahlen verwenden müssen.

wenn das problem mit dem tiefentest ausschaltbar ist, halte ich es für möglich, das euer berg einfach nicht an der stelle ist an dem ihr ihn erwartet (vill ist er hinter irgendetwas, zb dem boden).

Code:
  1. GLvoid bergMane( GLvoid )
  2. {
  3. glPushMatrix();
  4. glTranslated( 3000.0, 0.0, -300.0 );
  5.  
  6. //Berg
  7. glColor3d( 0.0, 0.7, 0.2 );
  8. glRotated ( -90 , 1.0, 0.0, 0 );
  9. glTranslated(-500,2000,0);
  10. auxSolidCone (1000,400);
  11.  
  12. glTranslated(-4000,500,0);
  13. auxSolidCone (1500,400);
  14. glPopMatrix();
  15. }


hier zb ruft ihr rotate vorm translate auf. ihr könntet stattdessen auch einfach anders translaten, da ihr im rechten winkel rotiert (dh x und y austauschen und das rotate weg). instgesammt einfach mal aufräumen und eine klarere struktur schaffen und durchziehen, und euer problem löst sich vill von selbst. vill hilft es, eine klasse zu schreiben, zb für berge.

_________________
thanks to the internet we have rule 34, wich states that if something exists, theres a pornographic version of it,


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Projekt Open GL - Bergfahrt
BeitragVerfasst: Di Aug 21, 2012 10:37 
Offline
DGL Member

Registriert: Mi Aug 01, 2012 13:30
Beiträge: 4
Programmiersprache: C++
@sirrk:

Vielen Dank für die ausführliche Beschreibung zum Lösen des Bergproblems.
Wir werden das versuchen umzusetzen, um somit eine klarere und eindeutigere Struktur zu schaffen.

@end:

Welche möglichkeiten gibt es denn, um die AUX library zu ersetzen und welche Vorlteile bringt das?
Uns wurde es halt bis jetzt nur so, mit der AUX library, beigebracht.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 14 Queries | GZIP : On ]