我已经阅读了Windows Phone 8不会支持OpenGL的地方,并且我找不到SDK中有用的东西. 所以我还是我能够在Windows Phone 8游戏中使用OpenGL(ES)?我有一个游戏,我想在移植时不完全重写DirectX. 请引用好消息来源,我唯一发现的是猜测和博客文章,几乎没有信息. 解决方案 在WP8上不支持OpenGL,但是支持直接3D功能9_3.如果您想在OpenGL ES到D3D的游戏上进行端口,请查看无论哪种方式,对于使用其他平台的游戏可移植性,最好使用中间件游戏框架,例如单件,Unity,Cocos2D,Havok,Marmalade,Sharpdx,Ogre,Autodesk Scaleform或其他产品.这些引擎将主要在自己的框架内为您提供跨平台支持(每个都有其自身对代码和资产可移植性的限制). 如果您已经有一个现有的OpenGL游戏,则要将其移植到WP8,而不是Angle Project,如果您的最佳选择前进.如果您只是刚开始创
以下是关于 opengl-es 的编程技术问答
我目前正在尝试将OpenVG启动并在桌面上运行.问题出现在这里:我/将为Windows CE设备(带有.NET紧凑型框架)开发一个应用程序,该应用程序具有硬件加速的OpenGL ES 2.0和OpenVG 1.0.1(如果您有兴趣,则基于Ti Omap35x ).该应用程序肯定会使用OpenVG进行绘画,并且如果OpenVG不提供openvg(即模糊). 现在我想在没有模拟器的情况下在桌面上开发(请参阅此问题).因此,我以为我只是用p/invoke导入OpenVG,这很容易,因为OpenVG人们将常量变成了真实的枚举,尽管程序C API,但它已很好地转化为面向对象的形式(带有图形类别用于绘图和路径,油漆,卒中和图像对象).我还设法开始使用命名为DLL和入口点不同的.哦,我导入了EGL 1.3,也很容易转换为面向对象的API. 直到这一点,它听起来还不错.我以为我只使用Khronos的OpenVG参考实现,但它很慢.真的很慢.您知道,就像清除表面从字面上看 second !因此
我目前正在使用均匀半径的大量GL_LINES立即绘制我的模型.我知道glLineWidth会更改 all 的半径,但它们每个都应该具有不同的半径.我想知道是否可以使用glLineWidth(以不同的方式)或其他功能?我还应该怎么做? 解决方案 将它们作为特殊构造的三角带.具体而言,将每个线段渲染为一对三角形以形成四边形,而四边形的长度匹配了线的长度,并且宽度与"半径"匹配.但是,真正的技巧是模拟GL_Lines,因为线段不一定必须相互连接.为了在三角形案例中这样做,您需要将三角形对与零区域的三角形连接,这将不会渲染(除非您的OpenGL ES实现不符). > 例如,假设我们处于2D(为简单起见; 3D几乎相同)说您的一个线段具有端点(x1,y1)和(x2,y2)和W的宽度,如下所示. 为了用四边形代替它,我们需要确定角落的坐标,这需要一些数学.对于合适的2D矢量类别,vec2 vec2 p1(x1, y1); vec2 p2(x2, y2); vec2
我的任务是将用户活动记录在WebView中,换句话说,当用户在WebView中导航时,我需要创建MP4视频文件.非常具有挑战性:) 我可以说明在Android 4.3中引入的MediaCodec:扩展了通过表面提供输入的方法(通过CreateInputSurface方法).这允许输入来自相机预览或OpenGL ES渲染. 我什至找到一个示例,您可以在其中录制一款用OpenGl写的游戏: http://bigflake.com/mediacodec/ 我的问题是:如何记录网络浏览活动?我认为,如果我可以将WebView内容绘制为OpenGL纹理,那么一切都会好起来的.但是我不知道该怎么做. 有人可以帮助我吗? 解决方案 为什么不尝试一旦您能够获得屏幕截图,就可以创建视频(要从Android上的图像序列创建视频),这是一个单独的任务,MediaCodec应该有所帮助. 其他解决方案 "我假设如果我可以将WebView内容绘制为OpenGL纹理". 这是可能的
我正在开发视频调用Android应用程序,其中视频通话可在Nexus 4,Moto G2,Moto G3,Moto e的设备上工作.但是,当我启动打电话给三星Galaxy J1 4G时,它会崩溃. 这是堆栈跟踪: E/AndroidRuntime: FATAL EXCEPTION: gl_surface: EglRenderer Process: com.testvideo, PID: 30509 java.lang.RuntimeException: glUseProgram: GLES20 error: 1282 at org.webrtc.GlUtil.checkNoGLES2Error(GlUtil.java:29) at org.webrtc.GlShader.useProgram(GlShader.java:118) at org.webrtc.GlRectDrawer.prepareShader(GlRectDrawer.java:195
我已经经历了现在,我正在尝试实现一个滚动图像,在该图像中,我通过AJAX投票或WebSockets从同一网络中的另一台计算机中获得线像素数据,并且必须使用WebGl呈现相同的曲线. . 所以,现在我知道我们可以轻松呈现每秒60帧,这意味着,如果我从网络中的另一台计算机每秒获得50行的像素数据,我应该很容易地渲染它们而无需任何混蛋. 我能够使用CPU(JavaScript)通过像素传输来进行像素,在其中我渲染第一行数据行,并且在接收第二行数据时,我将Pixel Data的第一行移至第二行,并将新行渲染为第一行 .这起作用了,但是我看不到光滑的滚动,我还尝试通过将所有行数据保存在一个阵列中并在获得新线路上循环循环来使用GL.Texsubimage2d,但它也无法正常工作. 基本上,我正在寻找的是,我将从网络中的另一台PC中获得1行像素数据,然后我将其作为纹理的第一行,然后当我收到第二行时,GPU应该将第一条像素数据的第一行移至第二行,然后在我渲染通过网络接收到的第一行的第
在我的原始帖子被其他堆栈溢出用户标记为"太宽"之后.我会以较少的方式重塑我的问题.我已经在Shadertoy实施了一个射线游行者,我了解了有关Ray-Object交叉路口的所有数学.我想将下一步与网格进行射线跟踪.我发现,需要使用延迟的渲染和框架缓冲器(2个通过渲染,一个用于几何形状,另一个用于照明计算,射线追踪),而相交将在射线三角形的交集中发生. 当然,我将在接下来的几周内发布一些代码,因为我将开始实施此代码.我将需要一些具体的帮助,但是直到那时,我都将感谢您的帮助,以便现在浪费时间搜索网络.这就是为什么我在这里发布.. 原始帖子被标记为"太宽" 这是我有史以来第一个堆叠溢出的帖子.我的目标是编写带有网格对象的射线示踪剂. 到目前为止,我唯一完成的是用球形和飞机制作射线示踪剂.这是通过正向渲染完成的,在片段着色器中创建所有几何形状(这很容易产生球形和平面). 在我进行的所有研究之后,我终于找到了解决方案.这是通过递延阴影技术来完成的,您可以在其中创建几何
如何使用oes_texture_float扩展名? 我不明白有必要指定参数the teximage2d. var fb=gl.createFramebuffer(); gl.bindFramebuffer(gl.FRAMEBUFFER, fb); var rb=gl.createRenderbuffer(); gl.bindRenderbuffer(gl.RENDERBUFFER, rb); gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_COMPONENT16,size[0],size[1]); gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT,gl.RENDERBUFFER, rb); var texture=gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D, texture); gl.texParam
我正在尝试赖特着色器与三分公司一起工作.这是用于WebGL的JavaScript库.我刚刚开始阅读GLSL,所以我遇到了一些麻烦.基本上,我想揭示和隐藏几何形状的面孔.我已经克隆了几何的脸部阵列并重新排序.重新排序的阵列的面孔我想透露/隐藏.我已经读到,可以从管道中的任何地方访问制服.我可以将阵列声明为统一并从碎片着色器访问它吗?我遇到了命令GL_FRAGCOLOR,并用它来调整整个几何形状的不透明度.我当时想也许我可以使用GL_FRAGCOLOR将特定面的不透明度设置为0.我还在查看规格并找到了gl_sampleID. gl_sampleid会告诉我当前的面部编号吗?对不起,所有问题,但我仍在试图在事情上说出自己的头.如果有更好的事情是去做事情,请告诉我.我一直在尝试调整现有的着色器,因为我喜欢它的纹理影响.这是一些示例代码. uniform float time; uniform vec2 resolution; uniform
如何使用MAT4类型发送到着色器属性? attribute mat4 attr; ... JS: var attr=gl.getAttribLocation(_program,"attr"); 解决方案 当将属性变量声明为mat4时 矩阵列取自通用属性的( x,y,z,w )组件 i 通过 i + 3. so JS: var row0Location = gl.getAttribLocation(_program, "attr"); var row1Location = row0Location + 1; var row2Location = row0Location + 2; var row3Location = row0Location + 3; 以获取数据,最常见的方法是将所有矩阵放在一个缓冲区中 var matrices = new Float32Array(numMatrices * 16); ... // fill o
我想从WebGL获得纹理,就像我可以在画布上下文为2D时可以使用getImageData() 如何获得纹理表单WebGL上下文? 解决方案 我知道三种可能性.重要的! 对于所有这些方法. 数据URL 首先是一个是高级方法 canvas.toDataURL(type, encoderOptions); 如果您想允许客户执行某些应用程序"屏幕截图" ,则可以使用它. 以下两种方法是低级别,其来源是WebGl.如果要修改纹理或计算新纹理(阴影),则可以使用它们. 5.14.12读回像素 当前Framebuffer中的像素可以读回ArrayBufferview对象. void readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, ArrayBufferView? pixels) 5.14.8纹理对象 纹理对象提供
我正在尝试呈现纹理的粒子,我有问题. 纹理的透明像素对渲染有奇怪的事情. 看起来最近(到相机)粒子的粒子根本没有呈现. 但并非总是如此,其中一些是渲染和期望的. 我试图以深度和混合选项的方式玩耍,但没有结果. 也许可以通过修改此零件代码找到解决方案. gl.enable(gl.DEPTH_TEST); gl.enable(gl.BLEND); gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); 变体以下是我的问题,但没有给我带来所需的结果.颗粒变得透明并彼此重叠. // gl.enable(gl.DEPTH_TEST); gl.enable(gl.BLEND); gl.blendFunc(gl.SRC_ALPHA, gl.ONE); 所以这是 jsfiddle 我的问题. 解决方案 问题是Z挡板和深度测试. 您正在以有效的随机深度顺序绘制四边形.因此,您首先绘制一个近距离的粒子,它在快乐脸的角落绘
我试图用大的gl_pointsize渲染很多点.外观Vertex着色器将自动丢弃GL.如果位置不在[-1,1],请点渲染. 在我的情况下,如果点的位置有点来自[-1,1],则其中一部分仍应显示在画布上.当位于[-1,1]? 的位置时 这是在画布上提取一点的代码.但是预计将在画布上显示近一半. var positionAttributeLocation = gl.getAttribLocation(program, "a_position"); var positionBuffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer); var positions = [ -1.0001, -1 ]; gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(positions), gl.STATIC_DRAW);
我现在使用WebGL2.0进行延期阴影.我现在面临的一个主要问题是我无法从Depth_attachment中读取深度值.实际上,我用Depth24_stencil8纹理创建自己的gbuffer作为Depth_attachment,然后将此纹理绑定到采样器,并尝试以这样的递延阴影部分读取我的片段着色器中的值: uniform sampler2D u_depthSampler; vec4 depthValue = texture(u_depthSampler, v_uv); 然后,我将深度值设置为阴影片段着色器中的输出: layout(location = 0) out vec4 o_fragOut; o_fragColor.xyz = depthValue.xyz; o_fragColor.w = 1.0; 在Firefox上执行此操作时,它没有报告任何错误,但是输出颜色只是纯红色.(我认为这意味着VEC3(1.0、0.0、0.0)).这真的让我感到非常困惑.谁能提供一
我正在编写一个应该在WebGL中绘制3D参数形状的程序.我目前似乎对球体的代码(主要是)工作,但是当我将用于查找X,Y和Z的方程式切换为torus时,只有圆环的上半部分被渲染(在X-Y中飞机).当仅使用2D画布上下文而没有任何WebGL时,我拥有的所有参数方程(对于球体,圆环和圆柱体)都可以使用;但是,当使用WebGL时,似乎存在问题.此外,仅渲染一半的圆环的问题,用于渲染气缸的方程式不会呈现任何东西. 什么可能导致一半的圆环渲染?渲染参数形状的代码如下: var latitudeBands = 30; var longitudeBands = 30; var radius = 0.5; var vertexPositionData = []; var normalData = []; var textureCoordData =
我发现WebGL呈现与混合关闭时的奇怪行为.我在上重现了它. 只是更改字符串: gl_fragcolor = vec4(1.0、1.0、1.0、1.0); 到 gl_fragcolor = Vec4(0.0,0.0,0.0,0.5); 和 GL.ClearColor(0.0,0.0,0.0,1.0); 到 gl.clearcolor(1.0,1.0,1.0,1.0); 因此,由于关闭混合,我应该在白色背景上看到黑色形状(alpha 0.5像素不应产生影响).但是我看到白色背景上的灰色形状.我相信我错过了一些东西,但我不能承担什么.有什么想法吗? P.S. gl.disable(gl.blend)不改变结果. 解决方案 基本上已经在这里回答 alpha rendering rendering差异 您看到的是WebGL画布默认情况下与背景融合在一起.画布的背景颜色或任何孩子的背景颜色. HTML的默认背景颜色是白色的,因此,如果您使用[0.0、0.0、
我正在为片段着色器中的球体实施简单的射线跟踪,目前我正在研究为散布阴影的球体计算颜色的功能.这是函数的代码: vec3 shadeSphere(vec3 point, vec4 sphere, vec3 material) { vec3 color = vec3(1.,2.,3.); vec3 N = (point - sphere.xyz) / sphere.w; vec3 diffuse = max(dot(Ldir, N), 0.0); vec3 ambient = material/5; color = ambient + Lrgb * diffuse * max(0.0, N * Ldir); return color; } 我在使用最大函数的两行上遇到错误.我从WebGL备忘单中获得了我分配max(dot(Ldir,N),0.0)的行的代码,该备忘单使用函数max(dot(ec_li
我有一个顶点着色器 void main (){ vec4 wPos = modelMatrix * vec4( position , 1. ); vWorldPosition = wPos.xyz; float mask = step( 0., dot( cameraDir, normalize(normalMatrix * aNormal) ) ); gl_PointSize = mask * uPointSize; gl_Position = projectionMatrix * viewMatrix * wPos; } 我不确定如何测试着色器的性能,并排除其他因素,例如透支.我想一个尺寸1的点,在屏幕空间中排列在没有任何重叠的屏幕空间中? 否则我对这些调整感到好奇: (删除step,删除乘法,引入if e