Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

C#,OpenGl, Visual 2013 - rysowanie po przyciśnięciu Buttona


Rekomendowane odpowiedzi

Opublikowano

Witam, po odpaleniu programu rysunek od razu się pojawia. Chcę aby pojawił się dopiero po przyciśnięciu na Button. Dodatkowo nie działa mi ustawienie wielkości sceny (SetView). Obrazek się zmniejszy dopiero po odpaleniu programu i ręcznym zmniejszeniu/zwiększeniu okna. Wielość sceny w kodzie powinna się ustawić automatycznie do wielkości okna, ale działa to dopiero po tym jak to okno zwiększę lub zmniejszę. Gdy wprowadzam dane (height width) na sztywno pojawia się to samo.

Fragment kodu:

public Form1()
        {
            InitializeComponent();
            simpleOpenGlControl1.InitializeContexts();
            SetView(this.Height, this.Width);
            Gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // kolor czyszczący ekran (czarny)
            Gl.glShadeModel(Gl.GL_FLAT); // typ cieniowania (gładkie)
            Gl.glEnable(Gl.GL_DEPTH_TEST); // włączenie funkcji kontroli głębi
            Gl.glEnable(Gl.GL_CULL_FACE); // włączenie obliczeń dla niewidocznych ścian
        }
       
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
        }

       
        private void SetView(int height =200 , int width =200 )
        {
            Gl.glPopAttrib();
            Gl.glPushAttrib(Gl.GL_ENABLE_BIT);     
            // Ustalenie rozmiaru sceny zgodnie z wymiarami okna aplikacji
            Gl.glViewport(0, 0, width, height);         
            // Wyczyszczenie macierzy przekształceń
            Gl.glMatrixMode(Gl.GL_PROJECTION);
            Gl.glLoadIdentity();
            const float nRange = 40.0f;
            // Zabezpieczenie przed dzieleniem przez zero
            if (height == 0) { height = 1; }
            // Ustalenie ograniczenia rozmiaru sceny
            if (width <= height)
            {
                Gl.glOrtho(-nRange, nRange, -nRange * height / width,
                nRange * height / width, -nRange, nRange);
            }
            else
            {
                Gl.glOrtho(-nRange * width / height, nRange * width / height,
                -nRange, nRange, -nRange, nRange);
            }
       
            Gl.glMatrixMode(Gl.GL_MODELVIEW);
            Gl.glLoadIdentity();
        }

        protected override void OnResize(EventArgs e)
        {
            base.OnResize(e);
            SetView(this.Height, this.Width);
        }

        private void RenderScene()
        {

            {
                #region Draw Triangle
                Gl.glColor3f(0.8f, 0.8f, 0.0f); // ustalenie koloru
                Gl.glBegin(Gl.GL_TRIANGLES); // rysowanie trójkąta
                Gl.glVertex3f(-20.0f, 0.0f, 0.0f); // lewy wierzchołek
                Gl.glVertex3f(20.0f, 0.0f, 0.0f); // prawy wirzchołek
                Gl.glVertex3f(0f, -30.0f, 0.0f); // górny wierzchołek
                Gl.glEnd();
                #endregion Draw Triangle
                Gl.glPopMatrix();
                Gl.glFlush();
            }
        }
        private void simpleOpenGlControl1_Load(object sender, EventArgs e)
        {
         
        }
        private void Form1_Load(object sender, EventArgs e)
        {
        }
        private void simpleOpenGlControl1_Load(object sender, PaintEventArgs e)
        {
            RenderScene();
        }
        private void button1_Click(object sender, MouseEventArgs e)
        {         
        } 
Opublikowano

ok, z racji że kompletnie nie miałem z tym styczności mogę tylko zgadywać ale spróbuj: 

 

public Form1()
{
    InitializeComponent();
    simpleOpenGlControl1.InitializeContexts();
    Gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // kolor czyszczący ekran (czarny)
    Gl.glShadeModel(Gl.GL_FLAT); // typ cieniowania (gładkie)
    Gl.glEnable(Gl.GL_DEPTH_TEST); // włączenie funkcji kontroli głębi
    Gl.glEnable(Gl.GL_CULL_FACE); // włączenie obliczeń dla niewidocznych ścian
}

protected override void OnPaint(PaintEventArgs e)
{
    base.OnPaint(e);
    Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
}

private void button1_Click(object sender, MouseEventArgs e)
{
    RenderScene();
}

private void Form1_Load(object sender, EventArgs e)
{
    SetView(this.Height, this.Width);
}

private void SetView(int height, int width)
{
    Gl.glPopAttrib();
    Gl.glPushAttrib(Gl.GL_ENABLE_BIT);     
    Gl.glViewport(0, 0, width, height);         
    Gl.glMatrixMode(Gl.GL_PROJECTION);
    Gl.glLoadIdentity();
    const float nRange = 40.0f;
    if (height == 0) { height = 1; }

    if (width <= height)
    {
        Gl.glOrtho(-nRange, nRange, -nRange * height / width,
        nRange * height / width, -nRange, nRange);
    }
    else
    {
        Gl.glOrtho(-nRange * width / height, nRange * width / height,
        -nRange, nRange, -nRange, nRange);
    }

    Gl.glMatrixMode(Gl.GL_MODELVIEW);
    Gl.glLoadIdentity();
}

protected override void OnResize(EventArgs e)
{
    base.OnResize(e);
    SetView(this.Height, this.Width);
}

private void RenderScene()
{
        #region Draw Triangle
        Gl.glColor3f(0.8f, 0.8f, 0.0f); // ustalenie koloru
        Gl.glBegin(Gl.GL_TRIANGLES); // rysowanie trójkąta
        Gl.glVertex3f(-20.0f, 0.0f, 0.0f); // lewy wierzchołek
        Gl.glVertex3f(20.0f, 0.0f, 0.0f); // prawy wirzchołek
        Gl.glVertex3f(0f, -30.0f, 0.0f); // górny wierzchołek
        Gl.glEnd();
        Gl.glPopMatrix();
        Gl.glFlush();
}

private void simpleOpenGlControl1_Load(object sender, PaintEventArgs e) { }
private void simpleOpenGlControl1_Load(object sender, EventArgs e) { }

"Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber beim Universum bin ich mir nicht ganz sicher."
~A. Einstein

Opublikowano

Zmiana rozmiaru już działa (wielkie dzięki), jednak nadal przycisk nie. Po prostu nic się nie renderuje. Może trzeba jeszcze w events pogrzebać?

Opublikowano

Wywołaj może jakiegoś alerta by sprawdzić,czy on się wogóle wykonuje.

Zakomentuj kod ,daj jakiegoś messagebox'a ,byle jaki dosłownie by sprawdzić,czy napewno jest dobrze podpięty.

Przyjmuje zlecenia dot. web masterki.

while(!$success){
....try();
}

 

Opublikowano

Messagebox wyskakuje, ale bez obrazka. A nie jest potrzebne jakieś odwołanie między RenderScene(); w przycisku a kontrolką (simpleOpenGlControl1) gdzie się rysuje obrazek?

 

 

 

 

PS

(Co z tym ASG?)

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...