Articles of OpenGL的ES2

Opengl ES 2:如果我用尽了元素数组索引,该怎么办?

有没有办法重用元素数组中的索引而不开始另一个绘图调用(例如,我使用GL_UNSIGNED_BYTE,例如,我已经使用了255)? 我使用6个索引的重复序列,所以不得不使用更大的数据types看起来非常浪费,而且我使用的是Opengl ES 2,所以我不能在着色器中指定索引。

OpenGL ES2:改变Z不会改变三角形的位置

所以我对OpenGL非常陌生,我正在玩耍,试图创建一个矩形。 GLfloat vVertices[] = { -0.5f, -0.5f, 0.0f, -0.5f, 0.5f, 0.0f, 0.5f, -0.5f, 0.0f,0.5f,0.5f,0.0f}; GLfloat colors[] = { 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f}; glClear(GL_COLOR_BUFFER_BIT); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, vVertices); glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 0, colors); glEnableVertexAttribArray(0); glEnableVertexAttribArray(1); glDrawArrays(GL_TRIANGLE_STRIP, 0, […]

我怎样才能确定从给定的角度可以看到对象?

我正在围绕OpenGL ES 2.0进行包装,我想我正在尝试做一些非常简单的事情,但我认为这个math可能正在逃避我。 我在Blender中创建了一个简单的扁平圆柱体,直径为2个单位。 我想创建这些边缘到边缘的任意网格(想想棋盘)。 我正在使用GLKit的3D透视图: CGSize size = [[self view] bounds].size; _projectionMatrix = GLKMatrix4MakePerspective(GLKMathDegreesToRadians(45.0f), size.width/size.height, 0.1f, 100.0f); 所以,我设法手动获取所有这些在屏幕上绘制的圆柱体就好了。 不过,我想了解如何在屏幕上以摄像机位置,屏幕大小,圆柱体直径和行数/列数的方式将所有这些圆柱体“编程”在屏幕上。 所以最终效果是,对于小网格(即5×5),物体靠近相机,而对于大网格(即30×30),物体距离较远。 在任何一种情况下,所有的气缸都是可见的。

在OpenGL ES 2中摇曳的树

我已经看过这么多次了,但是我不知道实现它的最好方法是什么。 我正在寻找接近的东西,例如,这个: 孤独的树dynamic壁纸 我有两种方法:一种是在Blender中制作一个animation,然后将结果图像导出并创建一个spritesheetanimation。 这是非常简单的,但创建一个512帧512或1024×1024图像(大屏幕)120帧spritesheet似乎矫枉过正。 第二种方法是将我的树切成几个独立的纹理,然后同时移动它们,使它们形成一个在风中摇曳的树的形象。 任何其他方法?

GLES2 GL_BGR未申报?

我试图绑定一个位图纹理。 这个位图是BGR格式,我试图使用glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_BGR, GL_UNSIGNED_BYTE, data) ,但在编译期间,出现错误:'GL_BGR'未声明。 我检查了<GLES2/gl2.h>和<GLES2/gl2ext.h> ,但没有任何GL_BGR 。 有没有办法上传BGR格式?

OpenGL ES 2.0:纹理看起来不正确

这是我的着色器… GLbyte vShaderStr[] = "attribute vec4 vPosition; \n" "attribute vec2 texPosition; \n" "attribute vec4 inColor; \n" "varying vec4 fragColor; \n" "varying vec2 v_texCoord; \n" "void main() \n" "{ \n" " gl_Position = vPosition; \n" " fragColor = inColor; \n" " v_texCoord = texPosition; \n" "} \n"; GLbyte fShaderStr[] = "precision mediump float; \n" "varying vec2 […]

存储对象的位置和旋转

我只是表面上理解了这个想法,我找不到任何透彻的解释(部分是因为我找不到对Google很好的关键词 – 英语不是我的第一语言): 虽然我部分地理解了一些事情(下一段),但我的问题是,您将使用什么数据结构来存储一个身体的位置和轮换,以及所有事情是如何结合在一起的? 我希望能够将该对象翻译为(x,y)位置,围绕原点或其中心旋转它(然后获取这些东西并使用该位置和旋转绘制一个精灵)。 非常类似于Unity的Transform对象。 从我的理解,我将需要(至less)2/3维向量和四元数,然后我应该能够从他们产生一个模型matrix。 怎么样? 乘以什么和以什么顺序? 我当然不知道如何从一个2/3维vector和一个四元数得到一个4×4的matrix。 那么如果我改变了位置,我应该再次更新模型matrix。 我在Android上使用OpenGL ES 2,但我不介意一个不可知的答案。

尺度matrix变换,不移动原始

所以我有以下… GLbyte vShaderStr[] = "attribute vec4 vPosition; \n" "uniform mat4 move; \n" "uniform mat4 scale; \n" "void main() \n" "{ \n" " gl_Position = vPosition; \n" " gl_Position = move * gl_Position; \n" " gl_Position = scale * gl_Position; \n" "} \n"; … void glScale2D(float y, float x){ float zoom[16] = { x, 0, 0, […]

用纹理绘制多个对象

我想使用纹理绘制立方体。 void OperateWithMainMatrix(ESContext* esContext, GLfloat offsetX, GLfloat offsetY, GLfloat offsetZ) { UserData *userData = (UserData*) esContext->userData; ESMatrix modelview; ESMatrix perspective; //Manipulation with matrix … glVertexAttribPointer(userData->positionLoc, 3, GL_FLOAT, GL_FALSE, 0, cubeFaces); //in cubeFaces coordinates verticles cube glVertexAttribPointer(userData->normalLoc, 3, GL_FLOAT, GL_FALSE, 0, cubeFaces); //for normals (use in fragment shaider for textures) glEnableVertexAttribArray(userData->positionLoc); glEnableVertexAttribArray(userData->normalLoc); // Load the MVP […]

如何在OpenGL ES 2中创建一个闪耀的太阳(在Android上)

比方说,我在OpenGL ES 2中创建了一个类似下面的空间场景: 此刻,我的太阳只是一个很小的纹理,与我放置在远处的图像相似,但显然看起来非常静止。 我将如何使我的阳光闪耀,看起来活着? 编辑:这只是一个示例图像,所有我关心的是太阳。 在我的实现中,灯光和其他一切都很好,但是太阳本身(现在只是一种纹理)根本不是“animation”/光芒。 我试图找出如何使我的阳光闪耀,看起来像活着。