SharpGL WPF从不使用OpenGLDraw的代码背后进行绘制

我试图从后面的代码(最好使用MVVM模式)中提取OpenGLControl,而不使用OpenGLDraw eventhandler。原因是我将其用于增强现实,并且相机使用外部触发器,因此我想在相机出现新帧时进行绘制。在示例中,我使用了计时器来模拟相机。

我尝试了以下操作:

<Window x:Class="Example1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Test" Height="400" Width="600"
        xmlns:sharpGL="clr-namespace:SharpGL.WPF;assembly=SharpGL.WPF">
    <Grid>
        <sharpGL:OpenGLControl
            x:Name="glControl"          
            OpenGLInitialized="OpenGLControl_OpenGLInitialized"
            RenderContextType="DIBSection"
            DrawFPS="True"/>
    </Grid>
</Window>

以及背后的代码:

using System.Windows;
using SharpGL;
using SharpGL.SceneGraph;
using System.Timers;

namespace Example1
{
    public partial class MainWindow : Window
    {
        Timer clock = new Timer(1000f / 60f);
        float rotatePyramid = 0;

        public MainWindow()
        {
            InitializeComponent();
        }
        private void OpenGLControl_OpenGLInitialized(object sender,OpenGLEventArgs args)
        {
            OpenGL gl = args.OpenGL;
            gl.Enable(OpenGL.GL_DEpth_TEST);

            clock.Elapsed += OnFrame;
            clock.Start();
        }

        private void OnFrame(object sender,ElapsedEventArgs e)
        {

            OpenGL gl = glControl.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();

            //  Move the geometry into a fairly central position.
            gl.Translate(0f,0.0f,-6.0f);

            //  Draw a pyramid. First,rotate the modelview matrix.
            gl.Rotate(rotatePyramid,1.0f,0.0f);

            //  Start drawing triangles.
            gl.Begin(OpenGL.GL_TRIANGLES);

            gl.Color(1.0f,0.0f);
            gl.Vertex(0.0f,0.0f);
            gl.Color(0.0f,0.0f);
            gl.Vertex(-1.0f,-1.0f,1.0f);
            gl.Color(0.0f,1.0f);
            gl.Vertex(1.0f,1.0f);

            gl.Color(1.0f,0.0f);
            gl.Vertex(1.0f,-1.0f);

            gl.Color(1.0f,-1.0f);
            gl.Color(0.0f,1.0f);
            gl.Vertex(-1.0f,1.0f);

            gl.End();
            gl.Flush();

            rotatePyramid += 3.0f;
        }
    }
}

这只会渲染带有FPS计数器的黑屏。我认为这与没有获得正确的OpenGL对象有关。我真的很想使用MVVM模式并使用绑定,但是如果那不可能,那么只要我能从相机获得一帧就可以绘制,后面的代码也可以工作。

duke3032 回答:SharpGL WPF从不使用OpenGLDraw的代码背后进行绘制

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3115259.html

大家都在问