Animation nicht in OpenGL arbeiten

3D-Visualisierung mit der Open Graphics Library (OpenGL)
Antworten
mr07th
Beiträge: 3
Registriert: Di Jun 03, 2014 9:39 am

Animation nicht in OpenGL arbeiten

Beitrag von mr07th » Di Jun 03, 2014 9:45 am

Hallo alle, es ist ein Programm, das eine kleine Satelliten simuliert und erfordert, daß eine Drehung Animation des Satelliten entlang der drei Achsen. Aber wenn Sie versuchen, eine Animation Problem während der Kompilierung schreiben: das Programm einfach geschlossen wird (Abschaltung erfolgt, wenn SwapBuffers, mainloop, Wiederanzeige), wenn Sie schreiben die einfachsten Programme haben das gleiche Problem entstanden ist. Der Versuch, Ausnahme von try-catch fangen, aber hier ist nicht Ausnahme. Wie dieses Problem zu lösen? Vielleicht hat jemand mit diesem Problem konfrontiert? Arbeiten Sie in C # Visual Studio 2008

Code: Alles auswählen

namespace WindowsFormsApplication6
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            try
            {
                InitializeComponent();
                AnT1.InitializeContexts();
            }
            catch(Exception)
            {
                Glut.glutDisplayFunc(Draw);
                Glut.glutTimerFunc(50, Timer, 0);
                Glut.glutMainLoop();
            }
        }
        void Timer(int Unused)
        {
            Glut.glutPostRedisplay();
            Glut.glutTimerFunc(50, Timer, 0);
        }
            private void AnT1_Load(object sender, EventArgs e)
        { 
            Glut.glutInit();
            Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE | Glut.GLUT_DEPTH);
 
            Gl.glClearColor(255, 255, 255, 1);
 
            Gl.glViewport(0, 0, AnT1.Width, AnT1.Height);
 
 
            Gl.glMatrixMode(Gl.GL_PROJECTION);
            Gl.glLoadIdentity();
            Glu.gluPerspective(45, (float)AnT1.Width / (float)AnT1.Height, 0.1, 200);
            Gl.glMatrixMode(Gl.GL_MODELVIEW);
            Gl.glLoadIdentity();
 
            Gl.glEnable(Gl.GL_DEPTH_TEST);
            Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
            Gl.glPushMatrix();
 
                double xy = 0.2;
                Gl.glTranslated(xy, 0, 0);
                xy += 0.2;
                Draw();
                Glut.glutSwapBuffers();
                Glut.glutPostRedisplay();
                Gl.glPushMatrix();
                Draw();
                Gl.glPopMatrix();
        }
        void Draw()
        {
            Gl.glLoadIdentity();
            Gl.glColor3f(0.502f, 0.502f, 0.502f);
 
            Gl.glTranslated(-1, 0, -6);
            Gl.glRotated(95, 1, 0, 0);
            Glut.glutSolidCylinder(0.7, 2, 60, 60);
 
            Gl.glLoadIdentity();
            Gl.glColor3f(0, 0, 0);
 
            Gl.glTranslated(-1, 0, -6);
            Gl.glRotated(95, 1, 0, 0);
            Glut.glutWireCylinder(0.7, 2, 20, 20);
        }
    }
}

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Animation nicht in OpenGL arbeiten

Beitrag von Xin » Di Jun 03, 2014 10:03 am

Kannst Du das Projekt so zusammenpacken, dass ich das kompilieren kann.
Ich kenne Ant1 nicht und in C# müsste ich acuh noch wissen, wo Glut eigentlich herkommt, da gibt es ja auch mehrere Implementationen. Kannst Du ein komplettes Paket zusammenstellen, wo alles drin ist, was man zum kompilieren braucht? (Glut, Ant1 und eine Solution)?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

mr07th
Beiträge: 3
Registriert: Di Jun 03, 2014 9:39 am

Re: Animation nicht in OpenGL arbeiten

Beitrag von mr07th » Di Jun 03, 2014 11:04 am

wenn sie helfen können, hier ist mein projekt http://yadi.sk/d/vHdy9tFmS7FSt dann gibt "Скачать"
vollständige сode

Code: Alles auswählen

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Tao.FreeGlut;
using Tao.OpenGl;
using Tao.Platform.Windows;

namespace WindowsFormsApplication6
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            try
            {
                InitializeComponent();
                AnT1.InitializeContexts();
            }
            catch(Exception)
            {
                Glut.glutDisplayFunc(Draw);
                Glut.glutTimerFunc(50, Timer, 0);
                Glut.glutMainLoop();
            }
        }
        void Timer(int Unused)
        {
            Glut.glutPostRedisplay();
            Glut.glutTimerFunc(50, Timer, 0);
        }
            private void AnT1_Load(object sender, EventArgs e)
        {
            Glut.glutInit();
            Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE | Glut.GLUT_DEPTH);

            Gl.glClearColor(255, 255, 255, 1);

            Gl.glViewport(0, 0, AnT1.Width, AnT1.Height);


            Gl.glMatrixMode(Gl.GL_PROJECTION);
            Gl.glLoadIdentity();
            Glu.gluPerspective(45, (float)AnT1.Width / (float)AnT1.Height, 0.1, 200);
            Gl.glMatrixMode(Gl.GL_MODELVIEW);
            Gl.glLoadIdentity();

            Gl.glEnable(Gl.GL_DEPTH_TEST);
            Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
            Gl.glPushMatrix();

                double xy = 0.2;
                xy += 0.2;
                Gl.glTranslated(xy, 0, 0);
                Draw();
                try
                {
                    Glut.glutSwapBuffers();
                    Glut.glutPostRedisplay();
                }
                catch(Exception)
                {
                    Gl.glPushMatrix();
                    Draw();
                    Gl.glPopMatrix();
                }
        }
        void Draw()
        {
            Gl.glLoadIdentity();
            Gl.glColor3f(0.502f, 0.502f, 0.502f);

            Gl.glTranslated(-1, 0, -6);
            Gl.glRotated(95, 1, 0, 0);
            Glut.glutSolidCylinder(0.7, 2, 60, 60);

            Gl.glLoadIdentity();
            Gl.glColor3f(0, 0, 0);

            Gl.glTranslated(-1, 0, -6);
            Gl.glRotated(95, 1, 0, 0);
            Glut.glutWireCylinder(0.7, 2, 20, 20);
        }
    }
}
projekt nicht nur entfernt try-catch

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Animation nicht in OpenGL arbeiten

Beitrag von cloidnerux » Di Jun 03, 2014 11:49 am

Frage 1: Hat das Programm in irgendeiner Form schon funktioniert? Also konntest du es starten und etwas statisch anzeigen(Hello-World Würfel oder Dreieck) um sicherzustellen, dass OpenGL richtig initalisiert ist.

Entstehen Exceptions, die nicht gefangen werden?
Redundanz macht wiederholen unnötig.
quod erat expectandum

mr07th
Beiträge: 3
Registriert: Di Jun 03, 2014 9:39 am

Re: Animation nicht in OpenGL arbeiten

Beitrag von mr07th » Di Jun 03, 2014 12:06 pm

OpenGL korrekt initialisiert wird, wenn es ein statisches bild, stellt sich das gleiche Problem, wenn ich versuche, um die animation-modell (SwapBuffers, PostRedisplay und MainLoop) zu machen. Ausnahmen aus irgendeinem grund nicht stellt, zu versuchen, sie durch einen try-catch und durch debugg fangen

Benutzeravatar
oenone
Beiträge: 223
Registriert: Do Sep 01, 2011 2:42 pm
Wohnort: Bremen
Kontaktdaten:

Re: Animation nicht in OpenGL arbeiten

Beitrag von oenone » Mi Jun 11, 2014 1:24 pm

mr07th hat geschrieben:OpenGL korrekt initialisiert wird, wenn es ein statisches bild, stellt sich das gleiche Problem, wenn ich versuche, um die animation-modell (SwapBuffers, PostRedisplay und MainLoop) zu machen. Ausnahmen aus irgendeinem grund nicht stellt, zu versuchen, sie durch einen try-catch und durch debugg fangen
Was ist denn deine Muttersprache? Oder kannst du Englisch? Vielleicht können wir dich dann besser verstehen... Der letzte Satz macht mir Probleme.

canlot
Beiträge: 393
Registriert: Di Mär 08, 2011 11:01 pm
Wohnort: NRW

Re: Animation nicht in OpenGL arbeiten

Beitrag von canlot » Sa Jun 14, 2014 7:26 pm

oenone hat geschrieben:
mr07th hat geschrieben:OpenGL korrekt initialisiert wird, wenn es ein statisches bild, stellt sich das gleiche Problem, wenn ich versuche, um die animation-modell (SwapBuffers, PostRedisplay und MainLoop) zu machen. Ausnahmen aus irgendeinem grund nicht stellt, zu versuchen, sie durch einen try-catch und durch debugg fangen
Was ist denn deine Muttersprache? Oder kannst du Englisch? Vielleicht können wir dich dann besser verstehen... Der letzte Satz macht mir Probleme.
Ich nehme an Russisch ist seine Muttersprache.
Unwissenheit ist ein Segen

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Animation nicht in OpenGL arbeiten

Beitrag von Xin » So Jun 15, 2014 9:13 pm

Ich habe das soweit mal bei mir installiert und Visual Studio (2013) steigt bei mir in der Zeile

Code: Alles auswählen

            Glut.glutDisplayFunc(Draw);
aus, nachdem ich die freeglut.dll installiert habe.

Ist/War das das Problem?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten