Tag: opengl

C#+ GL控制混合背景与forms

我正在使用OpenGL的C#和OpenTK库,我想将GLControl与作为背景放置的图片框混合在一起。 *编辑* 我通过改变方法解决了加载源图像的问题,所以现在我使用位图和位图数据结构: Bitmap bitmap = new Bitmap(“image.png”); BitmapData data = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); 我确定我的png源有4个通道,黑色背景上的alpha值为0 这是原始图像: http : //imageshack.com/a/img801/517/u2z8.png 这就是问题所在: http : //imageshack.com/a/img40/1729/zezj.jpg top是使用GLControl的纹理,bottom是Windows Form的Picturebox,我想要做的是GLControl的黑色背景变得透明。 我把Blend cap启用并使用GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha); 所以我认为这不是问题。 也许问题出在纹理环境上? GL.TexEnv(TextureEnvTarget.TextureEnv, TextureEnvParameter.TextureEnvMode,GL_MODULATE);

什么是api独立顶点处理的良好代码结构?

目前正在使用C#开发3D媒体引擎,我遇到了一个小难题。 我找到了我的rending循环,我有一个很棒的插件架构和内容管理系统,甚至还有一个计划好的材料管道。 然后引擎计划使用DirectX和OpenGL(通过’渲染器’插件),以及两个API的可编程管线。 无论如何,在本周初,我开始研究用于处理顶点的引擎抽象层(我已经担心这几周了)。 正如你们中的一些人所知,图形API之间的顶点处理并不完全相关或相同。 好吧有点相关;),但不一样。 在OpenGL处理​​顶点非常简单,您可以创建自定义顶点结构,将其发送到GPU,然后让着色器处理其余部分。 这对于灵活的图形管线是完美的,OpenGL不需要知道每个顶点包含哪些元素。 另一方面,DirectX要求我们为每个顶点结构创建声明,然后将它们发送到GPU。 问题是我不知道传递了什么类型的顶点结构,我肯定希望避免创建抽象层,该抽象层涉及通过枚举和一些抽象的“VertexDeclaration”类声明顶点的每个元素; 这会导致一些问题: 1)获得顶点元素至少可以说是一种痛苦。 我可以使用一些’VertexSemantic’并询问顶点’a – z’的位置,但是当处理像骨骼动画这样的顶点时,它可能会有很多开销。 2)考虑到发动机的主要焦点是“新手”,不是非常人性化。 我希望用户能够创建自定义顶点和网格缓冲区,而不必声明大量对象,从而消耗宝贵的开发时间。 3)更多? 现在,我可以使用属性执行某些操作,然后在DirectX渲染器内创建顶点结构的声明。 例如,继续创建一些枚举: // for getting the format layout of the element public enum ElementFormat { Float, Float2, Float3, Byte, etc, etc } // for determining the ‘usage’ // (here is ‘another’ where DirectX limits vertex structures ><) […]

C#中的密集图形应用程序(使用.NET / Mono)

如果你在C#中编写一个2d图形密集型应用程序(如动画软件或带有自动图形控件的音序器),哪一个是图形库的更好选择? 我想开发一个跨平台的应用程序(至少在Windows 7,Linux上是可移植的),我只想使用C#,避免在C ++中混合代码(由于互操作问题)。 我已经尝试过OpenTK了,但它缺少文档,而且它似乎不是很稳定(使用Mono它会让我有时会崩溃X服务器!!!)……也许我错了,但是我觉得它不是一个长期支持的库,它会死… .NET / Mono有一个好的和稳定的 OpenGL包装器吗? 我知道在Mono(Moonlight)上有一个Silverlight的移植,但我读到它的性能很差。 谢谢。

DirectX或OpenGL

如果您在C#中编写下一个3D图形密集型应用程序(如3D建模和动画软件),哪一个会更好? 如果我们认为C#与平台无关,那么OpenGL看起来很诱人,但性能等等呢? 由于使用的语言是C#,因此性能非常重要。 编辑:你也可以考虑SlimDX和TAO,OpenTK,csGL等。

如何加入重叠的圈子?

我想在视觉上加入两个重叠的圆圈 变 我已经有了部分圆的方法,但现在我需要知道earch圆的重叠角度有多大,我不知道该怎么做。 有人有想法吗?

尝试使用interop将C ++转换为C#

我有一个用C ++调用EGL的程序。 我想在C#中进行相同的调用,但在C#中似乎没有相同的概念。 当执行上下文进入C ++ EGL代码时,我收到读/写访问被拒绝错误。 这是我试图转换为C#的C ++程序中的代码: PropertySet^ surfaceCreationProperties = ref new PropertySet(); surfaceCreationProperties->Insert(ref new String(EGLNativeWindowTypeProperty), somethingOtherThanAWindow); mEglSurface = eglCreateWindowSurface(mEglDisplay, config, reinterpret_cast(surfaceCreationProperties), surfaceAttributes)); 我有一个C#类,它将C#EGL调用转换为C ++调用。 我相信C ++是不受管理的,但我不知道如何告诉你。 C#类看起来像这样: public static IntPtr CreateWindowSurface(IntPtr dpy, IntPtr config, IntPtr win, int[] attrib_list) { IntPtr retValue; unsafe { fixed (int* p_attrib_list = attrib_list) { retValue = Delegates.peglCreateWindowSurface(dpy, config, […]

如何检查点是否在四面体中?

我知道四面体的所有坐标和我想确定的点。 那么有谁知道怎么做? 我试图确定该点属于四面体的每个三角形,如果它对所有三角形都适用,则该点在四面体中。 但这绝对是错误的。

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.ClearColor(0, 0, 0, 1); foreach (ImageWrapper iw in m_images) { uint[] texNames = new uint[1]; gl.GenTextures(1, texNames); gl.BindTexture(SharpGL.OpenGL.GL_TEXTURE_2D, texNames[0]); gl.TexParameter(SharpGL.OpenGL.GL_TEXTURE_2D, SharpGL.OpenGL.GL_TEXTURE_WRAP_S, SharpGL.OpenGL.GL_REPEAT); gl.TexParameter(SharpGL.OpenGL.GL_TEXTURE_2D, SharpGL.OpenGL.GL_TEXTURE_WRAP_T, SharpGL.OpenGL.GL_REPEAT); gl.TexParameter(SharpGL.OpenGL.GL_TEXTURE_2D, SharpGL.OpenGL.GL_TEXTURE_MAG_FILTER, SharpGL.OpenGL.GL_LINEAR); gl.TexParameter(SharpGL.OpenGL.GL_TEXTURE_2D, SharpGL.OpenGL.GL_TEXTURE_MIN_FILTER, SharpGL.OpenGL.GL_LINEAR); gl.TexImage2D(SharpGL.OpenGL.GL_TEXTURE_2D, 0, 3, iw.BitmapSource.PixelWidth, iw.BitmapSource.PixelHeight, 0, SharpGL.OpenGL.GL_BGRA, SharpGL.OpenGL.GL_UNSIGNED_BYTE, iw.Pixels); iw.TextureHandle = texNames; […]

C#渲染OpenCL生成的图像

问题:我正在尝试实时渲染动态Julia分形。 因为分形在不断变化,我需要能够每秒渲染至少20帧,最好是更多。 您需要了解的Julia分形是每个像素都可以独立计算,因此任务很容易并行化。 第一种方法:因为我已经习惯在C#中使用Monogame,所以我尝试在HLSL中编写一个可以完成这项工作的着色器,但是编译器一直在抱怨,因为我用了超过允许的64个算术插槽(我需要至少一千个) )。 第二种方法:使用CPU,可以预期大约两分钟生成一帧。 第三种方法:我开始使用名为Cloo的包装器学习OpenCL的基础知识。 实际上,通过使用OpenCL计算图像数据,然后从GPU获取数据,将数据存储在Texture2D中并将纹理绘制到屏幕上,我获得了快速,好的结果。 对于1000×1000图像,我每秒大约可以获得13帧。 这仍然不是我所希望的,因为图像应该是1920×1080来填满我的屏幕,并且帧速率非常明显。 我意识到我实际上是在GPU上生成图像,将数据发送到CPU然后将其发送回GPU,所以这似乎是一个不必要的步骤,如果可以删除,可能会解决我的问题。 我在一些论坛上看到OpenGL能够做到这一点,但我无法找到具体的信息。 问题:首先,是否有一种简单的方法可以直接绘制OpenCL生成的数据,而不涉及CPU(最好与Monogame兼容)? 如果不是这种情况,是否可以使用OpenGL实现它,然后将其与Monogame结合使用? 其次,为什么用简单的HLSL着色器不可能实现这一点? 由于HLSL和OpenCL都使用GPU,为什么HLSL在进行许多算术运算时会受到如此多的限制? 编辑 我发现这个网站大致完成了我想要的,但是使用了GLSL着色器。 这再次质疑我在HLSL中的成功。 不幸的是,由于monogame不支持GLSL(尚未),我的问题仍然没有答案。

使用复杂的GUI编写跨平台应用程序

我想开发一个具有复杂GUI的应用程序(带动画的combobox,带样条的图表,透明层……)。 我对C#2.0有很好的经验,而且我正在学习WPF,但我读到了,遗憾的是,没有计划将WPF移植到Mono。 如果我坚持使用C#并使用OpenGL(通过OpenTK )创建自定义GUI控件,我觉得这将是一项艰苦的工作(与GTK集成,调试,难以用于设计表单)。 我可以使用Java(使用JOGL) ,但我不熟悉它,而且我不了解性能问题。 最后一个选项是C ++ ,但我必须做一个大的修订 (自上次使用它以来的几年),我发现很难用C ++开发GUI和便携式应用程序。 (也许我错了!不过,我很害怕用这种语言开发这么复杂的应用程序。) 你有什么建议吗? 我最好选择C#+ OpenTK,Java + JOGL还是返回C ++?