标签: opengl-es

iPhone桌面游戏:OpenGL ES还是CoreGraphics?

我想为iPhone编写一个棋盘游戏(类似于跳棋).OpenGL ES或CoreGraphics会是更好的选择吗?App Store上大多数此类游戏都使用什么?

iphone opengl-es core-graphics

17
推荐指数
2
解决办法
8987
查看次数

是否有可能实现MAX(As,Ad)openGL混合?

我正在开发一款游戏,我希望在网格上的一系列精灵下创建阴影.阴影大于精灵本身,精灵是动画的(即移动和旋转).

我不能简单地将它们渲染到精灵png中,否则阴影会与相邻的精灵重叠.

我也不能简单地将阴影放在较低的层上,因为当它们重叠时,它们会在它们的交叉处产生暗带.

这些精灵是动画的,因此不可能整体渲染这些精灵.

基本上,我希望精灵的阴影能够融合在一起,使它们在设定的不透明度下最大化.例:

在此输入图像描述

我相信这相当于一个openGL混合(Rs,Gs,Bs,Max(As,Ds)),我并不真正关心R,G和B,因为它在src中始终是相同的颜色和dst.

但是,这不是有效的openGL混合模式.有没有一种简单的方法来实现这一点,尤其是在cocos2d-iphone中?

我可以通过使阴影精灵不透明,然后将它们应用于父精灵,并使父精灵40%不透明度来近似.但是,cocos2d的工作方式,这只会将每个子项的不透明度设置为40%,而不是组合的精灵图像,这会产生相同的条带.

iphone graphics alphablending opengl-es cocos2d-iphone

17
推荐指数
1
解决办法
3767
查看次数

OpenGL ES 2.0和glPushMatrix,glPopMatrix

OpenGL ES 2.0是否仍支持glPushMatrix和glPopMatrix?我目前正在以下列方式使用它们:

glPushMatrix();
glTranslatef(xLoc, yLoc, 0);
[myTexturePointer drawAtPoint:CGPointZero];
glPopMatrix();
Run Code Online (Sandbox Code Playgroud)

我问,因为我已经阅读了一些关于2.0"从规范中删除矩阵堆栈"的事情.由于我对OpenGL相对较新,我不知道在哪里可以找到明确的答案.

opengl-es

17
推荐指数
1
解决办法
1万
查看次数

Android NDK - OpenGL ES教程/库

嘿! 我正在寻找一个OpenGL库/框架来处理基本的绘图代码等.否则我也在寻找一些NDK和OpenGL ES教程,我似乎无法找到任何东西!

任何信息都会有所帮助.

亚当

android opengl-es libraries android-ndk

17
推荐指数
1
解决办法
3万
查看次数

如何在OpenGL ES 2.0中将纹理绘制为2D背景?

我刚刚开始使用OpenGL ES 2.0,我想做的是创建一些简单的2D输出.如果分辨率为480x800,我该如何绘制背景纹理?

[我的开发环境是Java/Android,因此与此直接相关的示例最好,但其他语言也没问题.]

opengl-es opengl-es-2.0

17
推荐指数
2
解决办法
4万
查看次数

将Vertex Buffer Object用于非常动态的数据是一个好主意吗?

我有许多粒子,每个帧都会改变顶点.当前正在使用"客户端"内存中的顶点数组绘制顶点.如果我使用顶点缓冲区对象,我可以期待什么性能特征?

因为我必须使用一些glBuffersubData来更新粒子顶点,所以我无论如何都要将每个帧的顶点转移到视频内存(就像我使用常规顶点数组一样)?在这种情况下,VBO有什么好处吗?

这适用于iOS设备.实际的绘制调用:glDrawElements(GL_POINTS,num_particles,GL_UNSIGNED_SHORT,pindices);

我应该使用GL_STREAM_DRAWGL_DYNAMIC_DRAW

iphone graphics opengl-es vbo

17
推荐指数
2
解决办法
4781
查看次数

不同设备上的openGL ES版本

我想找出支持openGLES 1.0,1.1,2.0的Android手机系列.我相信我可以使用1.1而且应该覆盖90%以上的手机,但是要确定能够找到任何统计信息.我试过谷歌但到目前为止没什么用处.

谢谢.

android opengl-es

17
推荐指数
2
解决办法
2万
查看次数

WebGL - 如何传递无符号字节顶点属性颜色值?

我的顶点由具有以下结构的数组组成:

[     Position      ][        colour        ]
[float][float][float][byte][byte][byte][byte]
Run Code Online (Sandbox Code Playgroud)

传递顶点位置没有问题:

gl.bindBuffer(gl.ARRAY_BUFFER, this.vbo);
gl.vertexAttribPointer(this.material.aVertexPosition, 3, gl.FLOAT, false, 4, 0);
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何将颜色传递给着色器.不幸的是,在glsl着色器中使用整数是不可能的,所以我必须使用浮点数.如何将无符号字节颜色值转换为glsl浮点颜色值?我为r,g和b做了这样的尝试,但颜色都搞砸了:

gl.bindBuffer(gl.ARRAY_BUFFER, this.vbo);
gl.vertexAttribPointer(this.material.aR, 1, gl.BYTE, false, 15, 12);
Run Code Online (Sandbox Code Playgroud)

顶点着色器(colouredPoint.vs)

precision highp float;

attribute vec3 aVertexPosition;
attribute float aR;
attribute float aG;
attribute float aB;

uniform mat4 world;
uniform mat4 view;
uniform mat4 proj;

varying vec3 vVertexColour;

void main(void){
    gl_PointSize = 4.0;  
    gl_Position = proj * view * world * vec4(aVertexPosition, 1.0);
    vVertexColour = vec3(aR, aG, aB);
} 
Run Code Online (Sandbox Code Playgroud)

像素着色器(colouredPoint.fs)

precision highp float;

varying vec3 …
Run Code Online (Sandbox Code Playgroud)

opengl-es glsl webgl

17
推荐指数
1
解决办法
1万
查看次数

CVOpenGLESTextureCacheCreateTextureFromImage无法创建IOSurface

对于我目前的项目,我正在阅读iPhone的主摄像头输出.然后我通过以下方法将pixelbuffer转换为缓存的OpenGL纹理:CVOpenGLESTextureCacheCreateTextureFromImage.这在处理用于预览的相机帧时非常有用.使用iPhone 3GS,4,4S,iPod Touch(第4代)和IOS5,IOS6进行不同组合测试.

但是,对于具有非常高分辨率的实际最终图像,这仅适用于以下组合:

  • iPhone 3GS + IOS 5.1.1
  • iPhone 4 + IOS 5.1.1
  • iPhone 4S + IOS 6.0
  • iPod Touch(第4代)+ IOS 5.0

这不适用于:iPhone 4 + IOS6.

控制台中的确切错误消息:

Failed to create IOSurface image (texture)
2012-10-01 16:24:30.663 GLCameraRipple[676:907] Error at CVOpenGLESTextureCacheCreateTextureFromImage -6683
Run Code Online (Sandbox Code Playgroud)

我通过改变Apple的GLCameraRipple项目来解决这个问题.你可以在这里查看我的版本:http://lab.bitshiftcop.com/iosurface.zip

以下是我将stilloutput添加到当前会话的方法:

- (void)setupAVCapture
{
    //-- Create CVOpenGLESTextureCacheRef for optimal CVImageBufferRef to GLES texture conversion.
    CVReturn err = CVOpenGLESTextureCacheCreate(kCFAllocatorDefault, NULL, [EAGLContext currentContext], NULL, &_videoTextureCache);
    if (err) 
    {
        NSLog(@"Error at CVOpenGLESTextureCacheCreate %d", err);
        return;
    } …
Run Code Online (Sandbox Code Playgroud)

opengl-es ios

17
推荐指数
1
解决办法
4005
查看次数

阴影贴图 - 与光正交的薄壁上的伪影

我遇到了背面(光线)和阴影贴图的问题,我似乎无法通过.我仍处于优化引擎的相对早期阶段,但是我似乎无法实现这一点,即使手动调整这一块几何形状,它仍然看起来像垃圾.

它是一个瘦墙,通过约5个不同的墙块"弯曲".当我创建我的深度图时,我正在剔除前脸(对光线).这肯定有帮助,但是墙的另一侧的正面似乎是导致z战斗/投射阴影.

弯曲的墙上的文物

截图上的一些注释:

  • 当绘制深度纹理(来自光)时,正面被剔除
  • 我有近距离和远距离飞机调整只是为了这个几何形状(分别设置为20和25)
  • 一个方向光源,朝向场景右侧稍微倾斜,足以表明墙应该被遮挡,但大多是直下
  • 使用一个荒谬的大4096x4096阴影贴图纹理
  • 所有照明都被禁用,但我知道即使在这面墙上,我也在做柔和的光照(因此也就是顶点的顶点法线)

正如这里提到的那样,你得出的结论是,你不应该遮住光线背面的多边形.我正在努力解决这个问题,因为我不想将面法线一直传递到片段着色器以排除那里真正的背面 - 但是如果有人觉得这是最好的/唯一的解决方案这种几何形状就是我必须要做的.考虑到管道如何不容易/明显地通过面法线通过它让我觉得这不是阻力最小的路径.请注意,我传递的法线是顶点法线,以允许边缘周围更柔和的光照效果(可能包括非阴影和阴影表面).

请注意,我有一些讨厌的透视别名,但我希望我接下来的步骤是在级联阴影贴图上工作,但是如果不解决这个问题,我觉得我只是推迟了不可避免的事情,因为我已经把视图作为手工收紧了我能做到最好(或者我认为).

无论如何我觉得我错过了什么,所以如果你有任何想法或帮助,将非常感激!

编辑

需要明确的是,根据光线的来源,墙壁在技术上不应该是阴影.

顶视图

下面是阴影关闭的图像.这只是使用顶点法线来计算漫反射光照 - 它不漂亮(太多几何体是可见的),但它确实显示某些边缘有些可见.

没有阴影打开

所以是的,墙应该在阴影中,但我希望我可以让平滑效果更好,所以边缘可以有一些漫射光.如果我需要将它完全放在阴影中,那么如果它的阴影贴图将它置于阴影中,或者我的代码专门将它置于阴影中,因为面部法线不在,我对此很好 - 但将面部正常通过到我的顶点/片段着色器似乎不是阻力最小的路径.

也许这些将有助于更好地说明我的问题,或者可能揭示我缺少的一些基本理解.

编辑#2

我在下面加入了深度纹理.你可以在左下方看到有问题的墙,从截图中你可以看到我如何将深度值修剪为~0.4-> 1.这意味着该墙的深度值从0.4范围开始.所以它没有完美地剪裁它,但它的接近.这看起来合情合理吗?我很确定它是一个完整的24或32位深度缓冲区,是iOS上的DEPTH_COMPONENT扩展.对于@starmole,这有助于确定我的投影中是否存在缩放误差?你认为我的地图覆盖的尺寸/面积是否太大,因此如果它靠近它可能有帮助吗?

在此输入图像描述

3d opengl-es opengl-es-2.0 shadow-mapping

17
推荐指数
1
解决办法
1089
查看次数