我试图在opentk中实现索引缓冲器对象,但不知道在绘制东西时如何真正使用它。
我正在尝试使用索引缓冲区,但不知道 我真的被困在墙上,因为我应该尝试的事情. 这些教程都没有真正显示与我的代码相似的东西,这主要是为什么我遇到问题的原因.我可能必须重写Cube顶点阵列创建者. (在另外,也许我不应该只是将OpenGL推入一些准备就绪代码)现在,我只启用了顶部的面孔才能看到发生了什么. /// /// Draws the specified Cube Onsccreen. /// public void Draw() { GL.UseProgram(VSID); Vector3 ObjectPosition = new Vector3((new Vector(1, 1) * (Position - Offset))) { Z = Layer * 0.1f }; Matrix4 Scale = Matrix4.CreateScale(Width + highligh
0 2024-04-21
编程技术问答社区
在C#应用中对OpenGL的UWP支持
我有一个用C ++编写的OpenGL库.我知道我可以使用角度,但是因此,我需要在C ++中编码整个应用程序.有没有一种方法可以在UWP中使用C ++ OpenGL并将C#用作主要语言? 解决方案 是否有一种方法可以在UWP中使用C ++ OpenGL并将C#用作主要语言? Angle当前是 使OpenGL API在UWP中运行的方法.有关更多详细信息,请参考如果要使用C#的角度,则可以通过Interop编写自己的编写.您也可以在C ++中写下低级OpenGL的内容并将其包装.然后在您的逻辑级别通过C#调用它. 幸运的是,与您几天前在Github上创建的问题相同的人,并从@mattleibow那里获得了样本. @mattleibow在 swapchainpanel在C#. P> 此外, Angle 实际上是用于将OpenGL ES转换为DirectX.因此,我建议您使用 win2d 而不是. WIN2D是Windows 8.1和Windows 10上XAML应用程
0 2024-04-21
编程技术问答社区
创建和使用我自己的纹理图集的mipmap
我目前正在使用自动MIPMAP生成(C# + Opentk): GL.GenerateMipmap(GenerateMipmapTarget.Texture2D); 我正在使用的纹理被铺平成16px²的块.所以我的问题是: 是否可以使用不会将尺寸缩小到1x1的MIPMAP? 创建一个不会将块"模糊"到另一个的mipmap的最佳方法是什么? 解决方案 您的意思是,使用一个不会达到1x1的MIPMAP链?您可以限制哪些级别可以与 GltexParameter "> gltexparameter ,请参阅gl_texture_min_lod,gl_texture_max_lod,gl_texture_base_level和gl_texture_max_level参数. 我不明白您的第二个问题,如果您是说使用自己生成的MIPMAP,请参见Glteximage2d的级别参数,您可以上传自己的Mipmaps,以任何方式进行过滤.
0 2024-04-21
编程技术问答社区
OpenTK的多个GLControl的单一上下文
i m working on a program which should have multiple views of a model. I would like to use multiple glcontrols`为此. 是否有可能创建使用相同GraphicsContext的多个GLCONTROL? 我成功地在多线程环境上创建了这个问题,但是上下文并未共享.因此,我必须为每个上下文加载模型,这是不好的. 我的单个螺纹环境的伪代码看起来像这样: glControl1.MakeCurrent(); // Render here glControl1.SwapBuffers(); glControl2.MakeCurrent(); // Render here too glControl2.SwapBuffers(); 我通过在线程上创建多个上下文来尝试此操作,但它崩溃了 错误:170" at" makecurrent() glControl2的 .
0 2024-04-21
编程技术问答社区
Sprite/Texture Atlas: GDI+ Bitmap.MakeTransparent用于OpenTK的色键
我使用c#with opentk编写了Sprite/纹理Atlas功能的支持类. 到目前为止,大多数功能都可以正常工作(在拼字图视图上简单的2D图块). 我的问题与呼叫gdi+ bitmap.maketransparent()方法时的意外显示结果有关,以将颜色设置为颜色(Magenta/0xffff00ff)作为颜色键. 看来我正在使用错误的像素格式参数用于bitmap.lockbits()和gl.teximage2d()调用.我的代码是基于确实有效的示例,但共同的矩形传递给lockbits()是整个图像. 与此过程有关的呼叫是: Bitmap bitmap = new Bitmap(filename); bitmap.MakeTransparent(Color.Magenta); GL.GenTextures(1, out texture_id); GL.BindTexture(TextureTarget.Textu
0 2024-04-21
编程技术问答社区
如何在OpenTK中剪辑圆形区域(迷你地图!)?
我的游戏在C#中使用Opentk,这是OpenGL周围的包装.我正在渲染我的迷你图,如下所示.问题是物体没有夹在边缘,因此它们流过.我可以渲染一个较厚的边框来隐藏它,但这不是理想的,并且对较大的物体不起作用.可能有轨迹线和其他东西也超出了界限.我只是使用基本原语渲染这些. 我该如何剪裁该区域?有什么方法可以将其渲染到隐藏的画布,然后将圆形区域复制? 解决方案 @bdl回答了这个问题,但是我不得不调整一些东西才能使它起作用,因此,如果有人发现它有用,这是完整的解决方案: 在游戏窗口构造函数graphicsmode param中启用模板缓冲区. private static OpenTK.Graphics.GraphicsMode GraphicsMode { get { var defaultMode = OpenTK.Graphics.GraphicsMode.Default; var
0 2024-04-21
编程技术问答社区
为实例着色器设置矩阵
我想画出实例的立方体. 我可以成功地致电GL.DrawArraysInstanced(PrimitiveType.Triangles, 0, 36, 2); 我的问题是所有立方体均以相同的位置和相同的旋转绘制.我如何为每个立方体单独更改它? 要创建不同的位置,等等,我需要每个立方体的矩阵,对吗?我创建了这个: Matrix4[] Matrices = new Matrix4[]{ Matrix4.Identity, //do nothing Matrix4.Identity * Matrix4.CreateTranslation(1,0,0) //move a little bit }; GL.BindBuffer(BufferTarget.ArrayBuffer, matrixBuffer); GL.BufferData(BufferTarget.ArrayBuffer, (IntPtr)(sizeof(float) * 16 * Matrices.L
0 2024-04-20
编程技术问答社区
像DirectX / SharpDX中的 "glReadPixels "这样的函数
我正在寻找一种在MousePoint上读取像素颜色的方法.在OpenGL中,它是通过在绘制场景(或部分)后调用" GlreadPixels"函数来完成的.我想在背景中制作一个简单的颜色挑选程序,以识别3D空间中的形状/线. 那么,在sharpdx(directx10/directx11)中执行相同操作是否有任何等效方法/函数/建议? 解决方案 这是Direct3D11完全可能的:只需按照以下步骤: 使用使用device.map/unmap. 网络周围有很多关于此主题的讨论(例如:" 在dx11 中读取一个从纹理到CPU的像素") 其他解决方案 另一个选择是使用小型计算着色器,例如: Texture2D TextureInput: register(t0); StructuredBuffer UVBuffer: register(t1); RWStructuredBuffer RWColorBuffer
0 2024-04-20
编程技术问答社区
简单的OpenTK着色器不工作
我目前正在尝试使用OpenGl superbible和我尝试转换" 我的结果只是颜色缓冲,但否则一个空窗口,我根本不明白我在哪里犯了一个错误,因此在查找和更重要的理解方面的任何帮助都将不胜感激. 我的Opentk代码: using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; using OpenTK; using OpenTK.Graphics.OpenGL; using OpenTK.Input; namespace learnopengl.HelloTriangle { public class MainWindow : GameWindow { int _shaderId; int _vao; int _glbuf; int _fragObj; int _verte
0 2024-04-19
编程技术问答社区
OpenGL C# (OpenTK)加载和绘制图像功能不工作
我正在尝试在屏幕上加载并显示纹理,但是正在接收一个要显示的黑匣子. 两个主要方法是" loadTexture"和" draw Image",我假设错误是其中一个. using System; using System.Diagnostics; using OpenTK; using OpenTK.Graphics; using OpenTK.Graphics.OpenGL; using System.Drawing; using System.Drawing.Imaging; namespace FailRender { public class FailRender: GameWindow { public FailRender() : base(800, 600, GraphicsMode.Default, "Hoard of Upgrades") { GL.ClearColor(0, 0.1f,
0 2024-04-19
编程技术问答社区
在C#中的密集型图形应用程序(使用.NET/Mono)。
如果您在C#中编写了2D图形密集型应用程序(例如动画软件或具有自动图形控制的音乐序列器),哪个是图形库的更好选择? 我想开发一个跨平台应用程序(至少在Windows 7,Linux上便携式),我想仅使用C#,避免使用C ++中的混合代码(也应归因于Interop问题). P> 我已经尝试了Opentk,但缺乏文档,并且似乎不是很稳定(使用单声道,有时会使我崩溃X服务器!!)...也许我是我错误,但我觉得这不是一个长期支持的图书馆,它将死亡... 是否有.net/mono? 我知道单声道上有一个silverlight(月光),但我读到的表现不佳. 谢谢. 解决方案 有其他解决方案 您可以使用另一种方法可能是GTK#,但我不知道其图形性能. 其他解决方案 现在,出于您的目的,我建议您另外,
0 2024-04-18
编程技术问答社区
如何连接重叠的圆圈?
我想视觉上加入两个重叠的圆圈,以便 变成 我已经有了部分圆圈的方法,但是现在我需要知道Earch Circle的重叠角度的大小,而且我不知道该怎么做. 有人有一个主意吗? 解决方案 Phi= ArcTan[ Sqrt[4 * R^2 - d^2] /d ] hth! 编辑 对于两个不同的半径: 简化一点: Phi= ArcTan[Sqrt[-d^4 -(R1^2 - R2^2)^2 + 2*d^2*(R1^2 + R2^2)]/(d^2 +R1^2 -R2^2)] 编辑 如果您希望从另一个圆心中心查看角度,则只需在最后一个方程式中通过R2交换R1即可. 这是Mathematica中的示例实现: f[center1_, d_, R1_, R2_] := Module[{Phi, Theta}, Phi= ArcTan[Sqrt[-d^4-(R1^2-R2^2)^2 + 2*d^2*(R1^2 + R2
0 2024-04-17
编程技术问答社区
用OpenGL绘制图像
如何用openGL/opentk(来自无人机的视频)绘制映射(gmap.net) 我的问题是如何在地图上绘制视频图像,因为可以在地图上以不同的角度查看视频,并且图像应该在地图上梯形而不是四尖? 我从其他问题中复制了图像...当前我的代码bellow绘制四边形,但在四边形中,我看到了2个三角形,它们不相等. 当前代码: public override void OnRender() { if (!backgroundColor.HasValue) backgroundColor = new Pen(Fill).Color; GL.Color4(backgroundColor.Value); lock (bitmapSync) { if (bitmap != null) createTexture(); } GL.Enable(EnableCap.Texture2D)
0 2024-04-17
编程技术问答社区
如何在OpenTK中使物体透明
我正在使用opentk和c#,我在3D空间中定义了一架飞机,如下所示: GL.Begin(BeginMode.Quads); GL.Color3(Color.Magenta); GL.Vertex3(-100.0f, -25.0f, -150.0f); GL.Vertex3(-100.0f, -25.0f, 150.0f); GL.Vertex3( 200.0f, -25.0f, 100.0f); GL.Vertex3( 200.0f, -25.0f, -100.0f); GL.End(); 任何人都可以帮助我使飞机透明吗? 解决方案 所以您想要这样的东西? 有很多事情要去那里. 这一切都以一个包含alpha值Color对象开始.例如Color.FromArgb(85, Color.Turquoise)对于下面的球体. 主渲染类,设置相机视图并呈现所有灯,然后呈现场景中的所有对象: public void RenderOnView(G
0 2024-04-16
编程技术问答社区
OpenGL试图绘制多个2D纹理,但只出现第一个纹理
我遇到了一个问题,因为我正在尝试使用纹理(每个星球的一种纹理)绘制太阳系,并且在绘制纹理时,只出现了第一个.其余的都没有. 我的init函数通过文件迭代,将纹理保存到对象中,然后通过对象迭代.当它迭代时,它会生成纹理并使用OpenGL调用将它们绑定到名称. SharpGL.OpenGL gl = args.OpenGL; gl.Enable(SharpGL.OpenGL.GL_BLEND); gl.Enable(SharpGL.OpenGL.GL_TEXTURE_2D); gl.BlendFunc(SharpGL.Enumerations.BlendingSourceFactor.SourceAlpha, SharpGL.Enumerations.BlendingDestinationFactor.OneMinusSourceAlpha); gl.C
0 2024-04-16
编程技术问答社区
OpenTK: 为什么GraphicsMode不可用?
我刚刚开始学习Opentk并在经历这是我尝试的: using System; using OpenTK; using OpenTK.Graphics; using OpenTK.Windowing.Desktop; using OpenTK.Windowing.GraphicsLibraryFramework; namespace Testing { public class GraphicsWindow : GameWindow { public GraphicsWindow(int width, int height, string title) : base(width, height, GraphicsMode.Default, title) { } } } 由于某种原因找不到枚举图形模式(应在命名空间opentk.graphics中找到).另一个是GameWindow没有
0 2024-04-16
编程技术问答社区
快速的多窗口渲染
我一直在搜索和测试多个星期的c#天渲染库.到目前为止,我还没有找到一个在多窗格渲染设置上运行良好的单个库.要求是能够在12个以上的监视器设置(财务图表)上运行该程序,而不会在快速计算机上进行潜伏期.每个窗口需要每秒多次更新.在执行此操作时,CPU需要执行很多密集且时间至关重要的任务,因此某些负担必须转移到GPU.这就是硬件渲染介入的地方,用另一个词directx或opengl. 我尝试使用Windows表格进行GDI+,并认为它的需求太慢了.我尝试通过Opentk(在Windows表单控件上)进行OpenGL,该OpenGL似乎很快(我仍然有一些测试可以运行),但很难正常工作(很难找到/编程良好的文本渲染库).最近,我尝试了DirectX9,DirectX10和Direct2D通过SharpDX使用Windows表单.我尝试了每个窗口的单独设备和一个设备/多个交换链方法.所有这些导致多个窗户的性能非常差.例如,如果我将目标fps设置为20并在不同监视器上打开4个全屏窗口,则整个操作
0 2024-04-14
编程技术问答社区
C# 渲染OpenCL生成的图像
问题:我正在尝试实时渲染动态的朱莉娅分形.由于分形在不断变化,所以我需要能够每秒至少呈现20帧,最好更多.关于朱莉娅分形的您需要了解的是,每个像素都可以独立计算,因此任务很容易并行. 第一种方法:,因为我已经习惯了C#中的单体组合64个算术插槽(我至少需要一千个). 第二种方法:使用CPU,这是预期的,大约需要两分钟才能生成一个帧. 第三种方法:我开始使用称为Cloo的包装器来学习Opencl的基础知识.实际上,我通过使用OpenCL来计算图像数据,然后从GPU中获取数据,将数据存储在纹理2D中并将纹理绘制到屏幕上,从而获得了快速,不错的结果.对于1000x1000图像,我每秒得到约13帧.这仍然不是我所希望的,因为图像应该是1920x1080来填充我的屏幕,并且帧速率非常明显.我意识到我实际上是在GPU上生成图像,将数据发送到CPU,然后将其发送回GPU,因此这似乎是不必要的步骤,如果可以删除,则可能会解决我的问题.我在一些Fora上读到OpenGL可以做到这一点,但
4 2024-04-14
编程技术问答社区
在C#中wglCreateContext失败了,但在托管的C++中没有。
我正在尝试在C#中使用OpenGL.我有以下代码,其中失败了错误2000 error_invalid_pixel_format 第一个定义: [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true)] public static extern IntPtr GetDC(IntPtr hWnd); [StructLayout(LayoutKind.Sequential)] public struct PIXELFORMATDESCRIPTOR { public void Init() { nSize = (ushort) Marshal.SizeOf(typeof (PIXELFORMATDESCRIPTOR)); nVersion = 1;
0 2024-04-13
编程技术问答社区
OpenGL/DirectX Hook-类似于FRAPS
是否可以使用OpenGL或Directx检测哪些应用程序类似于FRAPS? (可能使用某种形式的钩子)?我可能不需要实际绘制到窗口,我只需要知道哪些过程正在做某种形式的3D渲染. (编辑:) 如果您不熟悉它,Fraps是一个程序,可用于在3D应用程序上绘制"每秒"计数器. FRAPS单独找到所有运行的3D应用程序,而无需您指定过程名称. "每秒帧"计数器的示例: 解决方案 可能最简单的方法是检查OpenGL和DirectX Core库的存在,这也可能是一个好主意,也可以在驱动程序OGL DLL中加入(例如NVOGL),这可以通过 EnumProcesses &当然,某些应用程序都加载了API,并且仅使用一个应用,或者仅使用有条件使用 GFX API之一(尽管后者仅使用专用工具等发生),因此,IMO的最佳检查方法是执行某种形式的注射 或像调试器一样附加到过程上,然后将Present钩住DX或wglSwapBuffers ogl. 您可能会通过枚举GDI手柄并寻找D
0 2024-04-13
编程技术问答社区