Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
jklasdf
Člen
Avatar
jklasdf:16.4.2019 16:46

Dobrý den.
Kreslím v SharpGL body skoro přes celou obrazovku, ale jsou místa, kde se mně body nevykreslí. Vypadá to jako čtyři úsečky. Nevím, kde může být chyba, jestli je to bug SharpGL, nebo čím by to mohlo být.

Tu je zdrojový kód:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using SharpGL;

namespace Zkůška
{
    /// <summary>
    /// Interakční logika pro MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        bool kresli = false;
        public MainWindow()
        {
            InitializeComponent();

        }

        private void OpenGLControl_OpenGLDraw(object sender, SharpGL.SceneGraph.OpenGLEventArgs args)
        {
            if (kresli == true)
            {
                OpenGLControl.Visibility = Visibility.Visible;
                //  Get the OpenGL instance that's been passed to us.
                OpenGL gl = args.OpenGL;

                //  Clear the color and depth buffers.
                gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);

                //  Reset the modelview matrix.
                gl.LoadIdentity();

                gl.Color(1, 0.5, 0);
                gl.Begin(OpenGL.GL_POINTS);
                int j = 0;
                for (int i = 0; i < 1596; i++)
                {
                    if (i == 1595 & j < 1596)
                    {
                        j++;
                        i = 0;
                    }
                    gl.Vertex(i, j);
                }
                gl.Flush();
                gl.End();
                kresli = false;
                Okno1.Title = "kreslím";
            }
        }

        private void OpenGLControl_Resized(object sender, SharpGL.SceneGraph.OpenGLEventArgs args)
        {
            //  Get the OpenGL object.
            OpenGL gl = OpenGLControl.OpenGL;

            gl.Viewport(0, 0, 1595, 1000);

            //  Set the projection matrix.
            gl.MatrixMode(OpenGL.GL_PROJECTION);

            //  Load the identity.
            gl.LoadIdentity();

            gl.Ortho(0, 1595, 0, 1000, -30, 80);

            gl.LookAt(0.0f, 0.0f, 80.0f,                // bod, odkud se kamera diva
              0.0f, 0.0f, -20.0f,                // bod, kam se kamera diva
              0.0f, 1.0f, 0.0f);
        }

        private void OpenGLControl_OpenGLInitialized(object sender, SharpGL.SceneGraph.OpenGLEventArgs args)
        {
            //  Get the OpenGL object.
            OpenGL gl = OpenGLControl.OpenGL;

            //  Set the clear color.
            gl.ClearColor(0.8f, 0.8f, 0.8f, 1);
            //gl.ClearColor(1f, 0.5f, 0,1f);
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            kresli = true;
            OpenGLControl.OpenGLDraw += OpenGLControl_OpenGLDraw;
        }
    }
}

Tu je XAML:

<Window x:Class="Zkůška.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:sharpGL="clr-namespace:SharpGL.WPF;assembly=SharpGL.WPF"
        xmlns:local="clr-namespace:Zkůška"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800" Name="Okno1">
    <Grid>
        <sharpGL:OpenGLControl Name="OpenGLControl"
                               OpenGLInitialized="OpenGLControl_OpenGLInitialized"
                               Resized="OpenGLControl_Resized"
                               OpenGLDraw="OpenGLControl_OpenGLDraw"
                               DrawFPS="True"
                               Visibility="Hidden"/>
        <Button Content="Button" HorizontalAlignment="Left" Height="24" Margin="55,30,0,0" VerticalAlignment="Top" Width="84" Click="Button_Click"/>
    </Grid>
</Window>

Poraďte.

 
Odpovědět
16.4.2019 16:46
Avatar
JerryM
Člen
Avatar
JerryM:17.4.2019 13:11

nevim přesně co je SharpGL, ale jde o to, jestli to vubec funguje :)
zkus místo toho použít SharpDX nebo SlimDX tam je záruka, že to bude fungovat a nejsou chyby v enginu .... nicméně ideální na 2D hry je ted Unity ale umí i 3D a samozřejmě native DirectX 9,10,11,12

 
Nahoru Odpovědět
17.4.2019 13:11
Avatar
jklasdf
Člen
Avatar
jklasdf:17.4.2019 20:11

SharpGL je OpenGL knihovna pro c#. Díky za tipy.

 
Nahoru Odpovědět
17.4.2019 20:11
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.