- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在按照本教程http://www.opengl-tutorial.org/beginners-tutorials/tutorial-3-matrices/来了解查看的工作原理,但是当我尝试将其应用到我的iOS应用程序时,我遇到了很多麻烦
所以基本上我的理解是:
float aspect = fabs(self.view.bounds.size.width / self.view.bounds.size.height);
GLKMatrix4 projectionMatrix = GLKMatrix4MakePerspective(GLKMathDegreesToRadians(65.0f), aspect, 0.1f, 100.0f);
_modelViewProjectionMatrix = projectionMatrix;
glViewport(0, 0, self.view.bounds.size.width,self.view.bounds.size.height);
static const GLfloat cubeVertices[] = {
-1.0f,-1.0f,-1.0f, // triangle 1 : begin
-1.0f,-1.0f, 1.0f,
-1.0f, 1.0f, 1.0f, // triangle 1 : end
1.0f, 1.0f,-1.0f, // triangle 2 : begin
-1.0f,-1.0f,-1.0f,
-1.0f, 1.0f,-1.0f, // triangle 2 : end
1.0f,-1.0f, 1.0f,
-1.0f,-1.0f,-1.0f,
1.0f,-1.0f,-1.0f,
1.0f, 1.0f,-1.0f,
1.0f,-1.0f,-1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f, 1.0f, 1.0f,
-1.0f, 1.0f,-1.0f,
1.0f,-1.0f, 1.0f,
-1.0f,-1.0f, 1.0f,
-1.0f,-1.0f,-1.0f,
-1.0f, 1.0f, 1.0f,
-1.0f,-1.0f, 1.0f,
1.0f,-1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
1.0f,-1.0f,-1.0f,
1.0f, 1.0f,-1.0f,
1.0f,-1.0f,-1.0f,
1.0f, 1.0f, 1.0f,
1.0f,-1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
1.0f, 1.0f,-1.0f,
-1.0f, 1.0f,-1.0f,
1.0f, 1.0f, 1.0f,
-1.0f, 1.0f,-1.0f,
-1.0f, 1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
-1.0f, 1.0f, 1.0f,
1.0f,-1.0f, 1.0f
};
- (void)setupGL {
[EAGLContext setCurrentContext:self.context];
[self loadShaders];
glGenBuffers(1, &_vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(cubeVertices), cubeVertices, GL_STATIC_DRAW);
glVertexAttribPointer (GLKVertexAttribPosition,
3,
GL_FLOAT, GL_FALSE,
0,
BUFFER_OFFSET(0));
glEnableVertexAttribArray(GLKVertexAttribPosition);
//glBindVertexArrayOES(0);
}
- (void)update {
//glViewport(0, 0, self.view.bounds.size.width, self.view.bounds.size.height);
float aspect = fabs(self.view.bounds.size.width / self.view.bounds.size.height);
GLKMatrix4 projectionMatrix = GLKMatrix4MakePerspective(GLKMathDegreesToRadians(65.0f), aspect, 0.1f, 100.0f);
_modelViewProjectionMatrix = projectionMatrix;
}
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {
glClearColor(0.65f, 0.65f, 0.65f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glUseProgram(_program);
glUniformMatrix4fv(uniforms[UNIFORM_MODELVIEWPROJECTION_MATRIX], 1, 0, _modelViewProjectionMatrix.m);
glDrawArrays(GL_TRIANGLES, 0, 12*3);
}
attribute vec4 position;
uniform mat4 modelViewProjectionMatrix;
void main() {
gl_Position = modelViewProjectionMatrix * position;
}
void main() {
gl_FragColor = vec4 (0.165, 0.427, 0.620, 1.0);
}
最佳答案
首先,您需要寻找和缺少的是 GLKMatrix4MakeLookAt
。剩下的只是您对更深入的了解感兴趣。
您的假设似乎是正确的,但我认为您无法理解矩阵系统和openGL是如何工作的。您似乎确实了解如何使用它。因此,首先我们通常要看的是3个矩阵分量,然后可以将它们作为乘积插入到着色器中,或者作为每个分量传递给着色器并在那里进行乘法。
第一部分是投影矩阵。此组件反映屏幕上的投影,通常设置为“正交”或“视锥”。 “正交”是正交投影,这意味着无论距离多远,物体都将显示相同的大小。 “视锥”将产生一种效果,根据距离的不同,该效果将使对象显得更大或更小。在您的情况下,您将使用带有便利功能GLKMatrix4MakePerspective
的“frustum”。第一个参数描述的是视野,样品中的视场角为65度,第二个参数是应反映屏幕/视图比例的长宽比,最后两个是剪切平面。与“frustum”一起使用的等效项为:
GLfloat fieldOfView = M_PI_2;
GLfloat near = .1f;
GLfloat far = 1000.0f;
GLfloat screenRatio = 1.0f/2.0f;
GLfloat right = tanf(fieldOfView)*.5f * near; // half of the tagens of field of view
GLfloat left = -right; // symetry
GLfloat top = right*screenRatio; // scale by screen ratio
GLfloat bottom = -top; // symetry
GLKMatrix4MakeFrustum(left, right, bottom, top, near, far);
GLKMatrix4MakeLookAt
。这应该回答您一个问题“iOS中的等效功能是什么?”。
glViewport
根本不包含任何内容。此函数将定义要绘制的缓冲区的哪一部分,仅此而已。尝试将所有值都除以一半,然后看看会发生什么(然后再进行其他解释)。
frustum
实例,它将采用4个边界值(
left
,
right
,
top
,
bottom
),
near
和far
clipping
平面。定义此方法是为了将
Z
值等于
near
的任何顶点位置都转换为-1,并将
Z
值等于
far
的每个位置都转换为1。所有中间位置都将进行线性插值。至于
X
和
Y
,它们将根据转换后的
Z
值进行缩放,这样对于0处的
Z
将按0进行缩放,将
Z
处的
near
进行1.0缩放,然后其余部分进行线性外推。
lookAt
实际上与模型矩阵非常相似,但是相反。如果向后移动相机,则与向前移动对象相同;如果向左旋转,则该对象将显示为向右移动,依此类推...
关于ios - 使用OpenGL和GLKit在iOS中绘制立方体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30854053/
场景 我正在构建一个应用程序来处理视频帧的色度值。我正在使用来自另一个项目的 Objective-C 代码并将其翻译成 Swift。但是我遇到了一段奇怪的代码,我想将其翻译成 Swift,如果我能弄清
我正在 opengles 中制作一个基本应用程序,我从“raywenderlich”Glkit 教程开始。这将在应用程序的启动屏幕中显示一个立方体。他在教程中提到了以下几行来执行此操作。 To mak
有没有一种方法可以将CATransform3D转换为GLKMatrix4,还是我总是需要手动将它们从值转换为值? 我想转换会更快。 最佳答案 不幸的是,到目前为止还没有。 Apple最有可能使用隐藏的
我在使用 GLKit 对 PNG 图像着色时遇到问题。 我有一个白色 PNG 图像,我将其加载到应用程序中,然后使用它来创建纹理: UIImage *image = [ UIImage imageNa
过去几天我一直在使用一些具有颜色属性和位置属性的 GLKit 代码,但是当我尝试添加普通属性时,它每次都会崩溃。 顶点着色器: attribute vec4 SourceColor; attrib
我有一个使用 glKit 运行的游戏,我想在每一帧渲染后使用着色器添加一些后期处理效果。 是否可以在 glKit 下执行此操作? 最佳答案 这是可能的。 您需要创建自己的屏幕外帧缓冲区对象和相关纹理。
我正在尝试使用 OpenGL ES 和 GLKit 绘制类似这样的东西 但是我明白了 虽然纹理是透明的,但模型的上层替换了下面的纹理而不是混合。有可能以某种方式修复它吗? - (void)setup
我使用以下链接获取在 iOS 中绘制 3D 立方体的源代码。 http://www.raywenderlich.com/5235/beginning-opengl-es-2-0-with-glkit-
我最近开始了一个基于 OpenGL 示例的新 iOS 项目。我添加了自己的相机移动代码,并且添加了一个包含 Block 实例的 NSMutableArray(当前仅包含 3D 位置)。我已经修改了绘图
当我尝试在 OpenGl ES 2.0 中创建一个带有附加纹理的 FBO 时,如下所示: glGenFramebuffers(1, &framebuffer); glGenTextur
我正在运行 XCode 为 iOS 的 OpenGL 项目创建的样板 OpenGL 示例代码。这会设置一个简单的 ViewController 并使用 GLKit 来处理其余的工作。 应用程序的所有更
我正在尝试转换 OGL ES 1.1。代码到 GLKit。 GLKit 提供了一对纹理插槽: 纹理2d0 纹理2d1 每个纹理都有一个环境模式: GLKTextureEnvModeReplace, G
我是 OpenGL/GLKit 的新手,在深度测试方面遇到了麻烦。下图显示了一个柱子,有五个横梁与它相交。它们都在中间(柱子内部)相遇,但正如您所见,本应被遮挡的光束部分仍然可见。它们疯狂地闪烁,当我
我正在使用 Ray Wenderlich 的教程使用 GLKit 制作一个简单的 OpenGlES 2 应用程序,但我遇到了一些问题。 我将示例代码更改为通过将顶点和索引数据添加到现有顶点和索引数据结
我使用了 this link 中的代码映射人脸的纹理。此代码使用 GLKIT 来呈现图像。代码在模拟器中运行良好,但如果我在设备中运行,则相同的代码无法运行。以下是它在设备中而不是在我的 ipad 中
我一直在阅读使用 GLKit 和您自己的自定义着色器是多么容易。但是,到目前为止,我还没有找到有关如何实际操作的任何信息。如何将我自己的着色器“插入”到现有的 GLKit 项目中? 最佳答案 好吧,你
我刚刚安装了当前的 Xcode 4 版本,并实现了新的“GLKit”API,该 API 也用于 iOS 的 OpenGL 模板。所以,我想开发一款适用于 iOS、Mac 和 Windows 的跨平台游
在 iOS 5 中,使用 EAGLView,您可以: glPushMatrix(); glTranslatef(x, y, 0.0f); glDrawArrays(GL_TRIANGLE_STRIP,
我几乎完成了我的应用程序。其中一个 View 使用 GLKit。我只是内存有问题。基本上发生的事情是,当显示 GLKView 时,内存消耗不断上升(在 Instruments 中看到)。在某个时候它显
我正在尝试使用 GLKit 绘制半透明多边形,但没有成功。所以我想知道是否有可能首先在 GLKit 中使用半透明多边形,因为我知道它在 OpenGL 的标准实现中不受支持;但可以使用自定义着色器进行模
我是一名优秀的程序员,十分优秀!