Questions tagged «opengl-es»

OpenGL 3D图形API的子集,专为嵌入式设备(例如手机)设计。

3
在隐藏网格的位置/位置如何隐藏后处理的网格轮廓
我正在3D引擎中设置活动轮廓,为选定的3d角色或屏幕上的风景设置高光效果。在使用模板缓冲区并获得一些不满意的结果(形状问题为凹形,由于距相机的距离导致轮廓线厚度以及台式机和笔记本电脑之间的不一致)后,我切换到边缘检测和帧缓冲区采样并得到了轮廓很满意。 但是,当选定的网格位于另一个网格之后时,我无法隐藏轮廓。考虑到我的过程,这很有意义,因为在渲染场景的其余部分之后,我只是从帧缓冲区中渲染了2d着色器轮廓。 下面是我的结果的两个屏幕截图。第一个是“好”轮廓,第二个是在阻挡轮廓源的网格上看到轮廓的位置。 渲染过程如下所示:1)仅绘制突出显示的网格的alpha,在帧缓冲区(framebuffer1)中捕获黑色轮廓。 2)将纹理从framebuffer1传递到执行边缘检测的第二个着色器。在framebuffer2中捕获边缘。 3)渲染整个场景。 4)在场景顶部从framebuffer2渲染纹理。 我对如何完成工作有一些想法,希望能收到关于其有效性或更简单或更佳方法的反馈。 首先,我考虑过将整个场景渲染到帧缓冲区,并将突出显示的网格的可见轮廓存储在alpha通道中(所有白色保存,突出显示的网格可见)。然后,我将在alpha通道上执行边缘检测,渲染场景帧缓冲区,然后在顶部渲染边缘。结果是这样的: 为此,我想到了仅在突出显示对象的渲染过程中设置一个定义,该定义将为所有可见像素在alpha中绘制所有黑色。 我的第二个想法是使用上面概述的当前渲染过程,而且在渲染选定网格的轮廓时,还将X,Y和Z坐标存储在framebuffer1的R,G和B通道中。边缘检测将被执行并存储在framebuffer2中,但是我会将RGB / XYZ值从alpha的边缘传递到轮廓。然后,在渲染场景时,我将测试坐标是否在framebuffer2中存储的边缘内。如果是这样,我将测试当前片段的深度,以确定它是在从RGB通道提取的坐标之前还是之后(转换为相机空间)。如果片段在深度坐标之前,则片段将正常渲染。如果片段在后面,则将其呈现为纯轮廓颜色。 我正在为该项目使用LibGDX,并且希望支持WebGL和OpenGL ES,因此我没有涉及几何着色器或更新的GLSL函数的解决方案。如果有人可以评论我提出的方法或提出更好的建议,我将非常感激。

1
OpenGL ES使用纹理创建模具效果
环境 这是我正在工作的环境: OpenGL ES 2.0 iPhone模拟器和iPhone 4 使用NVIDIA GeForce GTX 680MX的iMac 27“ 2048 MB 希望能有所帮助。 问题 正在从多个来源和多个站点(包括Stackoverflow)进行高低搜索,但是没有有效的模具效果。 我所拥有的是: 黑色的“ S” 不是多边形,而是在与背景图像相同的宽度和高度的矩形四边形上绘制的纹理。 我正在尝试做一个模版效果,其中背景和黄色小家伙只有在黑色“ S”纹理内时才可见。 在我的片段着色器中,我有以下内容: varying lowp vec4 destinationColor; varying lowp vec2 TexCoordOut; uniform sampler2D Texture; uniform highp float TexScale; void main() { highp vec4 color = texture2D(Texture, TexCoordOut); if(color.a == …

2
具有不同高度的相邻图块的图块地图/地形实现
! 我正在寻找有关切片地图的一些信息,或更确切地说,是什么类型的切片地图被称为。 我对过山车大亨或运输大亨系列游戏中使用的实现方式感兴趣,并且一直在研究矢量场地形和高度图地形,但我不确定它们是否适合我的期望发展。 很难找到任何像样的信息,因为大多数人将其称为等轴测图,但是我正在寻找以固定的正交透视图创建3D图像的方法。我了解磁贴图的基础存储与渲染方式无关,但我不希望像老式的口袋妖怪/塞尔达游戏一样创建2D磁贴图,更像暗黑破坏神那样具有包含功能悬垂的悬崖和倾斜的地形。 我只是想找到合适的条件来搜索google和stackoverflow的资源,以帮助我确定要走的道路。 到目前为止,我已经设法在不使用存储在VBO中并渲染为线框的height / y分量的情况下充实了基本的贴图。到目前为止,这看起来还不错,但是我设想在尝试操纵单个顶点以创建悬崖和坡度而不影响相邻图块时会遇到问题。 我应该研究一种特定类型的实现吗?我以为如果在矢量场地形上找到了相当数量的信息,就可以破解它,但我不确定这是否也会产生正确的结果。 如果有人可以帮助我了解一下,将非常感谢您的帮助:) 更新资料 我提供了一张图片,以进一步阐明我想要实现的目标: 从如何创建倾斜(高度)等距图块借来的图像 此图像显示了我要生成的地形类型,但不包括我对建模感兴趣的“悬崖”或悬垂的地形类型。但是它确实提出了我没有考虑的其他一些问题,即; 如何处理“水”等图层(在图像的左上方)以包括水之下的可见地面? 如何适应地图的“边缘”,以便渲染泥土来将世界描述为非平坦的实体? 是否可以使用这种地形的基础存储来建模物理模型,例如滚下山坡的球或穿越斜坡的运动员的运动速度? 我的想法是,可以使用8个顶点对地形的每个图块进行建模,其中4个主顶点覆盖实际图块本身,而其余4个顶点用于对每个图块的侧面/墙进行建模。我在此实现中看到的两个问题是:a)世界地图的尺寸​​实质上增加了一倍,b)鉴于并非所有图块都将包含“墙”,因此某些图块最终将具有未使用的冗余顶点。 我想创建一个地形编辑器,该编辑器允许每个图块变形以及在游戏过程中更改地形的功能。这本身带来了其他问题,例如;VBO可以在即时修改的同时用于存储和渲染地形吗?是否可以在不影响相邻图块的情况下修改顶点? 我的印象是我要么使事情变得过于复杂,要么陷入分析瘫痪,因为我忽略了编写任何代码来解决问题而又不清楚我将如何实现自己想要的目标。 再说一次,我真的只是在寻找正确的方向。有没有一种特定类型的tilemap / terrain实现,可以满足3D地图在地图编辑器以及游戏过程中变形的需要,或者我必须自己滚动一下?我并不想在这里重新发明轮子,但是由于我不确定要寻找的内容,我正在努力寻找任何资源。 如果任何人都可以提供任何信息,资源或代码片段,将不胜感激,因为我急于弄脏我的手,并开始生产除我现有的扁平线框以外的其他东西。 谢谢阅读!

1
gl_TexCoord [0]的组件是什么意思?
gl_TexCoord[0].s, gl_TexCoord[0].t gl_TexCoord[0].p和之间有什么区别gl_TexCoord[0].x, gl_TexCoord[0].y gl_TexCoord[0].z? 我了解gl_TexCoord[0].x, gl_TexCoord[0].y gl_TexCoord[0].z像素坐标吗? 但是什么gl_TexCoord[0].s, gl_TexCoord[0].t gl_TexCoord[0].p意思,我必须在哪里使用它们?

6
OpenGL ES 2.0:质量明暗器存储库[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 请问一个高品质的OpenGL(OpenGL ES 2.0)顶点和片段着色器存储库,请问一下。 我正在寻找基于像素的着色着色器(例如phong)和simmilar。很高兴看到它们更多,能够在质量与着色器性能之间进行选择。

4
WebGL和OpenGL ES缺少的功能
我已经开始使用WebGL,并且对利用我的OpenGL(以及扩展为OpenGL ES)的经验如此简单感到满意。但是,我的理解如下: OpenGL ES是OpenGL的子集 WebGL是OpenGL ES的子集 两种情况都正确吗?如果是这样,是否有资源来详细说明缺少哪些功能? 例如,一个值得注意的缺失功能是glPushMatrix和glPopMatrix。我没有在WebGL中看到它们,但是在搜索中我也找不到在OpenGL ES资料中引用的它们。

1
精灵表纹理拾取相邻纹理的边缘
我有一个自定义的精灵例程(openGL 2.0),该例程使用一个简单的精灵表(我的纹理彼此水平排列)。 因此,例如,这是一个带有2个简单纹理的测试精灵表: 现在,我在创建openGL Sprite对象时要做的就是在其图集中指定帧的总数,并且在绘制时指定要绘制的帧。 然后计算出从何处获取纹理的方式: 将所需的帧数除以总帧数(以获得左坐标) 然后将1除以总帧数,然后将结果加到上面计算出的左手坐标上。 这似乎确实有效,但有时会遇到问题。比如说,我想在下面画X,我得到........... 我听说过在每个纹理之间放置1 px的“填充”,但是有人可以确切解释它是如何工作的吗?我的意思是,如果这样做,它肯定会取消获得纹理的计算。 如果我简单地在所拾取的纹理中包括填充(因此使用空白边框绘制精灵),那么这肯定会导致碰撞检测问题吗?(即,当透明零件发生碰撞时,使用边界框时,精灵可能会发生碰撞)。 如果有人可以解释,将不胜感激。

5
为什么在Vector3s中不能使用运算符'> ='?
我正在尝试获得一个矩形,以便在我称为_positionA和的两个位置之间移动_positionB。两者都是类型Vector3。矩形移动得很好。但是,到达时_positionB它不会像应该的那样朝相反的方向移动。 我回到代码中看一看。我得出的结论是,随着对象的移动,if代码中的语句错过了rects位置等于的框架_positionB。如果rects的位置大于或等于, 我决定将代码修改为反向_positionB。我的代码不太长,因此我将在下面显示它: using UnityEngine; using System.Collections; public class Rectangle : MonoBehaviour { private Vector3 _positionA = new Vector3(-0.97f, -4.28f); //Start position private Vector3 _positionB = new Vector3(11.87f, -4.28f); //End position private Transform _rect_tfm; private bool _atPosA = false, _atPosB = false; public Vector2 speed = new Vector2(1f, 0f); private …
9 unity  c#  vector  mathematics  vector  matrix  unity  c#  transformation  java  3d  terrain-rendering  shading  ios  opengl-es  opengl  rendering  optimization  python  scripting  minecraft-modding  modding  pc  3d-meshes  mesh  culling  point-cloud  networking  interpolation  mathematics  game-design  ai  game-mechanics  animation  unreal-4  skeletal-animation  3dsmax  unity  c#  3d  opengl  c++  textures  unity  ide  cocos2d  cocos2d-x-js  unity  c#  mono  il2cpp  c++  game-loop  timer  linux  flash  actionscript-3  java  glsl  c++  vector  entity-component  c++  directx11  windows  visual-studio  libgdx  mouse  unity  c#  architecture  storage  unity  c#  rotation  coordinates  quaternion  vrpn  movement  vector  unreal-4  unity  shaders  unity  gui  text  bug  shooter  3d  animation  rendering  voxels  c++  mmo  multithreading  linux  textures  procedural-generation  terrain-rendering  multiplayer  mmo  game-state  java  android  libgdx  opengl  procedural-generation  unity  gui  3d  animation  tools  geometry-shader  mobile  advertisements  unity  c#  animation  scripting  unity  animation  unityscript  coroutines  unity  shaders  lighting  camera 

3
OpenGL实际上需要多长时间来更新屏幕?
我在C中有一个简单的OpenGL测试应用程序,它根据按键输入绘制不同的内容。(Mesa 8.0.4,在配备NVIDIA GTX650的PC上与Mesa-EGL和GLFW,Ubuntu 12.04LTS一起尝试过)。绘制非常简单/快速(旋转三角形类型的东西)。我的测试代码没有以任何方式故意限制帧速率,它看起来像这样: while (true) { draw(); swap_buffers(); } 我对此进行了非常仔细的计时,发现从一个eglSwapBuffers()(或glfwSwapBuffers相同的东西)调用到下一个调用的时间约为16.6毫秒。eglSwapBuffers()即使画出的内容非常简单,从通话后到下次通话前的时间也仅比该时间少一点。交换缓冲区调用花费的时间不到1ms。 但是,从应用程序响应按键更改其绘画到实际在屏幕上显示更改的时间> 150ms(价值约8-9帧)。这是通过以60fps的屏幕和键盘的摄像机记录来测量的。 因此,问题是: 在调用交换缓冲区与实际显示在屏幕之间的绘制在哪里缓冲?为什么要延迟?看起来该应用始终都在屏幕前绘制许多帧。 OpenGL应用程序可以做什么以立即绘制屏幕?(即:无缓冲,仅阻塞直到绘制完成;我不需要高吞吐量,我需要低延迟) 应用程序可以做些什么来使上述立即抽奖尽快发生? 应用程序如何知道当前屏幕上实际显示的内容?(或者,当前缓冲延迟是几帧/几帧?)

2
使用两个着色器,而不是一个带IF语句的着色器
我一直在努力将相对较大的opengl ES 1.1源移植到ES 2.0。 在OpenGL ES 2.0(这意味着所有内容都使用着色器)中,我想绘制3次茶壶。 第一个具有统一的颜色(例如旧的glColor4f)。 第二个,具有每个顶点的颜色(茶壶也具有顶点颜色的数组) 第三个,具有每个顶点的纹理 也许是第四个,同时具有每个顶点的纹理和颜色。然后可能是第五名,也有法线。 据我所知,实现有两种选择。第一个方法是制作支持以上所有内容的着色器,并设置要更改其行为的均匀性(例如,使用奇异颜色均匀性或每个顶点颜色均匀性)。 第二种选择是为每种情况创建一个不同的着色器。使用一些自定义的着色器预处理,并不是那么复杂,但是要担心的是在图形对象之间切换着色器的性能成本。我读过它并不小。 我的意思是,执行此操作的最佳方法是同时进行构建和度量,但最好听取任何意见。
9 opengl-es  glsl 

1
优化重型片段着色器的性能
我需要帮助优化以下一组着色器: 顶点: precision mediump float; uniform vec2 rubyTextureSize; attribute vec4 vPosition; attribute vec2 a_TexCoordinate; varying vec2 tc; void main() { gl_Position = vPosition; tc = a_TexCoordinate; } 分段: precision mediump float; /* Uniforms - rubyTexture: texture sampler - rubyTextureSize: size of the texture before rendering */ uniform sampler2D rubyTexture; uniform …

1
gluLookAt如何工作?
据我了解, gluLookAt( eye_x, eye_y, eye_z, center_x, center_y, center_z, up_x, up_y, up_z ); 等效于: glRotatef(B, 0.0, 0.0, 1.0); glRotatef(A, wx, wy, wz); glTranslatef(-eye_x, -eye_y, -eye_z); 但是当我打印出ModelView矩阵时,对的调用glTranslatef()似乎无法正常工作。这是代码片段: #include <stdlib.h> #include <stdio.h> #include <GL/glut.h> #include <iomanip> #include <iostream> #include <string> using namespace std; static const int Rx = 0; static const int Ry …

3
开发游戏时,是否值得再支持iOS 3.x或iPhone 3G设备?
对于游戏开发者而言,尝试并支持较旧的设备(iPhone 3G和更早版本)还是支持较旧的操作系统(iOS 3.x和更早版本)仍然值得吗?还是建议在iPhone 3GS及更高版本中使用受支持的OpenGL ES 2.0?您是否知道仍在使用较早版本的设备/操作系统的用户百分比?
9 iphone  opengl-es  ios 

1
使用glBlendFunc在Cocos2D中混合模式
我们一直在尝试复制Photoshop和Quartz 2D中可用的最常见的混合模式,但我们只提出了3种,这是经过长时间的在线搜索后才提出的。 对于任何有兴趣的人,这里是: 乘 = GL_DST_COLOR,GL_ONE_MINUS_SRC_ALPHA 屏幕 = GL_MINUS_DST_COLOR,GL_ONE 线性道奇 = GL_ONE,GL_ONE 您可以在这个非常有用的网站上在线尝试这些和其他类似的模式:http : //www.andersriggelsen.dk/glblendfunc.php 现在,如果有人可以为我们提供可以在Cocos2D中重新创建的其他混合模式,我们将不胜感激,因为我们的Open GL经验确实非常有限。 先感谢您! 阿尔吉里斯

3
粒子系统中顺序独立的透明度
我正在编写一个粒子系统,并且想找到一种技巧来实现正确的alpha混合而不对粒子进行排序,因为: 每个粒子都是单个网格中的点精灵,我无法使用场景图功能对透明节点进行排序。但是,系统节点应正确排序。 根据初始速度,加速度和时间在着色器上计算粒子位置。为了对系统进行排序,我必须在CPU上执行所有这些计算,这是我要避免的事情。 根据相机位置对数百个粒子进行排序,并将每个帧的接缝上传到GPU上,以减轻操作负担。 Alpha测试似乎在GLES 2.0上足够快,并且对于非透明但“蒙版”的纹理效果很好。但是,对于半透明的粒子来说还不够。 您将如何处理?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.