C# + GL 控件将背景与表单混合
我正在使用c#和opentk库的OpenGl,我想将GLCONTROL与放置在背景的picturebox中融合. *编辑 * 我通过更改方法解决了问题加载源图像,因此现在我使用位图和bitmapdata结构: 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/51/517/u2z8.png 这是一个问题: http://i
12 2024-04-23
编程技术问答社区
在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应用程
18 2024-04-21
编程技术问答社区
将SurfaceTexture渲染成Unity Texture2D
我早些时候提出了Simillar问题,但它们并不澄清,现在我想提供一个建议,我在代码中做了什么. 因此 UNITY代码: public class AndroidHandler : MonoBehaviour { [SerializeField] private RawImage _rawImage; private Texture2D _inputTexture; private AndroidJavaObject androidStreamerObj; private System.IntPtr _nativePtr; void Start () { _rawImage.material.SetTextureScale("_MainTex", new Vector2(-1, -1)); InitAndroidStreamerObject(); } private voi
24 2024-04-13
编程技术问答社区
简单的VBO例子的问题
我试图在运行一个超级简单的GLFW和VBO示例,但我被困住了.我已经在其他项目中使用了glBegin和glEnd,但是我正在尝试更新代码以与OpenGL ES 2一起使用,但是现在我只想尽可能地兼容. 从在线一些示例中,我提出了以下代码: #include #include #include #define bool int #define true 1 #define false 0 const int width = 800; const int height = 600; bool opened = true; GLuint glTriangle; GLfloat triangle[] = { -1.0f, -1.0f, 0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f, }; void init() { glClearColo
8 2024-04-10
编程技术问答社区
OpenGL-三角形没有生成颜色和顶点的动态阵列
#include #include #include #include #include #include #include // Vertex Shader source code const char* vertexShaderSource = R"( #version 330 core layout(location = 0) in vec3 inPosition; // Vertex positions layout(location = 1) in vec3 inColor; // Vertex colors out vec3 fragColor; // Output color to the fragment shader void main() { gl
16 2024-04-09
编程技术问答社区
将一个 "正常 "的矩形转换为一组GLes向量?
如何将"正常"矩形转换为一组 opengl es 顶点.我不擅长几何形状,所以我不知道顶点是如何工作的,我希望能够操纵矩形,而不必通过反复试验和错误来确定顶点的值. 我基本上需要转换此结构: typedef struct __nrect { float width; float height; float depth; /* center */ float x; float y; float z; } simple3dRect; 这样的东西: const GLfloat cubeVertices[6][12] = { { 1,-1, 1, -1,-1, 1, 1, 1, 1, -1, 1, 1 }, { 1, 1, 1, 1,-1, 1, 1, 1,-1, 1,-1,-1 }, {-1, 1,-1, -1,-1,-1, -1, 1, 1, -1,-1, 1 },
12 2024-04-09
编程技术问答社区
如何计算Framebuffer的间距?
我得到了一个UI应用程序,该应用程序分别为16、24或32 BPP的屏幕外框架. 我需要计算音高,我的理解是俯仰是一个扫描线中的字节数,它等于screenx*bitsperpixel吗? 显然没有产生正确的结果. 我们可以有一个公式(通用)来计算音高吗? 解决方案 根据 this : 视频RAM中的缓冲区通常会大步向上(也称为音调).大步是字节中的缓冲区的宽度 例如,如果您在16位/像素(2个字节/像素)处有1024x768像素缓冲区,则您的步幅为: 1024像素 * 2字节/像素= 2048字节 因此,计算它的通用方法是:buffer_width * bytes_per_pixel 但是,重要的是要注意,对于瓷砖渲染器,框架缓冲区在内存中不是线性的,我认为音调是瓷砖的宽度(我找不到来源来确认这一点).
14 2024-04-09
编程技术问答社区
如何将2D显示坐标映射到3D OpenGL空间
我正在制作一个3D游戏,该游戏已在Android上移植,我想在游戏的3D课程中进行触摸事件.我需要在3D空间中,就在剪裁平面附近,但我所能获得的只是来自Android显示器的2D坐标.因此,有什么方法可以将这些(x,y)坐标映射到3D空间中的(x,y,z)坐标? 编辑 好吧,我正在从事赛车游戏,我想根据我单击的位置将一些项目插入课程.我有这个功能: void racing_mouse_cb(int button, int state, int x, int y) { //parameters (x,y) are coords of a display set_ill_fish(get_player_data( local_player())->view); } 但现在我在一定距离的玩家面前插入物品: void set_ill_fish(view_t view) { item_locs[num_items].ray.pt.x = view.ply
14 2024-04-09
编程技术问答社区
如何将AVFrame转换为glTexImage2D使用的纹理?
您知道,AvFrame具有2个属性:pframe->数据,pframe-> lineSize.从视频/sdcard/test.mp4(android平台)读取帧后,转换为RGB AVFRAME VICE: img_convert_ctx = sws_getContext(pCodecCtx->width, pCodecCtx->height, pCodecCtx->pix_fmt, target_width, target_height, PIX_FMT_RGB24, SWS_BICUBIC, NULL, NULL, NULL); if(img_convert_ctx == NULL) { LOGE("could not initialize conversion context\n");
14 2024-04-09
编程技术问答社区
iPhone-OpenGL使用C++教程/片段
在iPhone上如何通过C/C ++使用OpenGL,是否有任何好的教程或代码段? 解决方案 我很确定您需要一些Objective-C来创建上下文并执行其他初始化工作.其余的也可在C ++中使用. 其他解决方案 在Xcode中,转到File>新项目...,然后选择" OpenGL ES应用程序"模板.这创建了一个具有出色的示例代码的项目,用于设置OpenGL上下文并使用通常的C函数绘制.加上其他一些整洁的技巧,例如将UIImage加载到OpenGL纹理中. 其他解决方案 "启动iPhone开发"的作者在其博客.此外,他在他的第一个教程中为OpenGL提供了一个模板项目.需要一些Objective-C才能与iPhone上的OpenGL一起使用.
14 2024-04-08
编程技术问答社区
glColor4f()--alpha值的影响
我正在使用glcolor4f().令人惊讶的是,更改alpha,即,第四个参数不会引起透明度的任何变化.代码段为: const GLfloat squareVertices[] = { 0.5, 0.5, 0.0, -0.5, 0.5, 0.0, 0.5, -0.5, 0.0, -0.5, -0.5, 0.0}; glEnableClientState (GL_VERTEX_ARRAY); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glColor4f (1.0, 0.0, 0.0, 0.5); glLoadIdentity (); glTranslatef(0, 0, -5); glVertexPointer(3, GL_FLOAT, 0, squareVertices); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 我可能出错的任何指针吗? 解决方案 如
16 2024-04-08
编程技术问答社区
OpenGL ES的片段着色器可以改变片段的深度值吗?
openGL ES 2.0中的片段着色器可以更改像素的z值(深度)? 在OpenGL ES 2.0中如何实现? 解决方案 否 - gl_FragDepth(这是GLSL的桌面版本的一部分)不存在于OpenGles. 中 但是,您可以检查GL_EXT_frag_depth的存在.如果可用,则可以将深度写入gl_FragDepthEXT. 扩展纸扩展等等. 其他解决方案 而gl_fragDepth在OpenGL ES 2.0中不可用,IS 可从3.0版中获得,因此,除非您需要使用较旧的版本来兼容,否则升级是可以进行的.
16 2024-04-08
编程技术问答社区
GLKit'的GLKMatrix是如何 "列大 "的?
前提 在线性内存中谈论"列主要"矩阵时,列是一个接一个指定的,因此内存中的前4个条目对应于矩阵中的第一列.另一方面,"行"矩阵是一个接一个地指定行的,因此内存中的前4个条目指定了矩阵的第一行. a GLKMatrix4看起来像这样: union _GLKMatrix4 { struct { float m00, m01, m02, m03; float m10, m11, m12, m13; float m20, m21, m22, m23; float m30, m31, m32, m33; }; float m[16]; } typedef union _GLKMatrix4 GLKMatrix4; 矩阵中矩阵元素的一维数组 订购. 前提b glkmatrix4中的"行"是水平声明的4个浮子([m00, m01, m02, m03]将是第一个"行").因此
12 2024-04-08
编程技术问答社区
glOrtho OpenGL es 2.0变体如何修复空白屏幕?
我尝试重新制作Android 到Android NDK OpenGL ES 2.0示例. 除了制作拼字法/透视投影 之外,我都取得了成功 所以我画了一个三角形 typedef matrix float matrix[16]; matrix MVP_MATRIX; /* MODEL*VIEW*PROJECTION MATRIX */ matrix PROJECTION_MATRIX; matrix MODEL_MATRIX; matrix VIEW_MATRIX; s_shader shader; /* just struct for holding shader program data (attribytes,uniforms, fragment shader, vertex shader etc)*/ GLfloat triangle_vertices[] = { 0.0f, 0.5f, 0.
22 2024-04-07
编程技术问答社区
OpenGL什么时候能完成函数中的指针?
OpenGl具有许多功能直接采用指针.其中一些读取这些指针的数据,其他人将数据写入这些指针. 但是,OpenGL函数通常不会立即执行.通常,当您绘制某些内容时,图纸需要一段时间才能完成. 那么,我怎么知道opengl何时用指针完成? 解决方案 所有OpenGL功能(如以下例外)将用您在该功能返回时给出的任何指针完成.因此,glReadPixels将在返回后完成所有像素读取和格式转换.这就是为什么 asynchronous Pixel传输对于阅读操作非常重要.它允许OpenGl到 做到这一点,不要与GPU同步. 此规则的唯一例外是以"指针"一词结尾的每个函数. glVertexAttribPointer,glTexCoordPointer等等.当您使用这些功能的客户端内存(不再在Core Profile OpenGL 3.2+中合法)时,这些功能存储了指向该内存的指针.因此,只要打算用那些顶点属性渲染,您必须确保此指针有效. 使用client-memory进
16 2024-04-06
编程技术问答社区
iPhone游戏开发者-你的工具链是什么样的?
例如: 源控制:Git + Adob​​e Drive 3D:Google Sketchup-> *.dae-> Blender-> *.Obj 2d:Photoshop/Illustrator-> *.png 音频:Audacity-> *.caf 代码:argouml,xcode,textmate 测试:ocunit 构建:Rake,Xcode 随时提及您认为很棒的任何其他工具:) 解决方案 git,github,xcode,Interface Builder,photoshop,Illustrator,fiveler,textmate,通过帖子整洁的想法,我喜欢! 其他解决方案 我使用git,github,灯塔,xcode/界面构建器和photoshop.如果您想计算这一点,我也会使用文字伴侣做笔记. 其他解决方案 源控制:颠覆 2D:Adobe烟花 音频:QuickTime Pro,Audacity,AfConconvert 代码:
20 2024-04-05
编程技术问答社区
OpenGL发送顶点指针或生成缓冲区
我刚刚使用Glkit启动了iPhone的OpenGL.我的编程背景几乎只是Java和Objective C,在十年前,C,C ++几乎没有经验.剩下的只是对我如何在指针中挣扎的遥不可及 - 我认为我失败了. 现在似乎一切都回到我身边... 我去了一些这个问题是关于代码的以下部分(主要是从教程中取的): @interface AAAShape : NSObject { NSMutableData *vertexData; // ... } @property(readonly) int vertexCount; @property(readonly) GLKVector2 *vertices; //... @end @implementation AAAShape //... -(GLKVector2 *)vertices { if(!vertexData) { vertexData = [NSMutableData dataWit
20 2024-04-04
编程技术问答社区
将glReadBuffer()/glDrawBuffer()调用转换为OpenGL ES
我很难理解如何将glreadbuffer()和gldrawbuffer()调用到开放式gl es 1.1中.互联网上的各种论坛帖子只说"使用VBO",而不会更深入. 您能帮我了解适当的转换吗?说我有: glReadBuffer(GL_FRONT); 接着 glDrawBuffer(GL_BACK_LEFT); state->paint(state_id, f); 我该如何写出像素? 解决方案 glReadBuffer和glDrawBuffer只需设置后续图纸操作的源和目标即可.假设您是针对单镜设备,例如iPhone或Android设备,并且已要求两个缓冲区,那么您已经将您设置为绘制后缓冲区.读取GLES颜色缓冲区的唯一手段是glReadPixels,它将从您绘制的同一缓冲区中读取. 所有这些与VBO完全无关,VBO将数据数组的管理传递给驱动程序,通常隐含地允许将它们放入GPU的直接地址空间中.
14 2024-04-04
编程技术问答社区
如何解决Buffer.put()和Android OpenGL的性能问题
这通常是一个Java问题,尽管在这种特殊情况下,我正在使用Android中的顶点阵列进行OpenGL.要使用此基本GL系统,必须在本机分配模式下使用Java的缓冲系统.这在Java上非常慢.我整个应用程序的时间的大约40-50%都花在buffer.put()内. 在Java留在Java时是否有任何方法可以加速此速度(即不要使用本机SDK)? 解决方案 通常避免分配.使用一个缓冲池,并根据需要将它们杂乱无章.您可以在最后有一些标准尺寸,并浪费几个字节以换取性能.另外,当使用OpenGL时,通常不需要每帧重写缓冲区(除非您进行大量的皮肤或动画?).通常,您拥有预烘烤的数组,使用矩阵转换对象,仅此而已. 其他解决方案 在集成Java和Jogl时,我遇到了类似的问题 - 我的解决方案是管理C中的缓冲资源,并使用JNI使用方法将指针传递给缓冲区到Java jobject NewDirectByteBuffer(JNIEnv * env, void * address, jl
22 2024-04-04
编程技术问答社区
顶点缓冲对象的最大尺寸(OpenGL ES 2.0)
是否有最大尺寸用于顶点缓冲物对象,绑定到GL_ARRAY_BUFFER或GL_ELEMENT_ARRAY_BUFFER ??? 最初,我绘制了一个由16个意见组成的网格.对于每个填充物,我创建了一个顶点缓冲区,在渲染阶段,我称为gldrawelements. 这在iOS模拟器上正常工作,但是当我尝试渲染到设备时,屏幕会不断闪烁,并且不会显示网格. 然后,我进行了一些阅读,发现您不应该在渲染阶段称呼太多次. 我试图将我的所有意见都组合到一个顶点缓冲区中. 绑定到gl_array_buffer的缓冲区包含3969个顶点,每个顶点包含20个浮子.因此,此缓冲区的大小为317520字节. 绑定到GL_ELEMENT_ARRAY_BUFFER的指数为16425个短裤.因此,此缓冲区的大小为32850字节. 在OpenGL Wiki上,它说"根据一个NVIDIA文档,1MB至4MB对于顶点缓冲对象都是一个不错的尺寸". 我在绑定每个缓冲物对象并调用gldrawelements后打
12 2024-04-04
编程技术问答社区