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)
{
}
Edit:
Problem z wielkością sceny rozwiązany, pozostał Button.
dodanie znacznika <code class="csharp">
- @furious programming