gpt4 book ai didi

swift - OpenGL ES 正交投影矩阵不起作用

转载 作者:行者123 更新时间:2023-11-30 10:09:17 25 4
gpt4 key购买 nike

所以我的目标很简单。我试图设置我的坐标空间,以便原点位于屏幕的左下角,右上角的坐标是(screen.width,screen.height)。

此外,这是一个完全 2d 引擎,因此不需要 3d 东西。我只需要这些坐标即可工作。

现在我正在尝试在屏幕上绘制几个点。主要是在 (0, 0)、(宽度、高度)、(宽度/2、高度/2) 等位置,这样我就可以看到事情是否正常工作。

不幸的是,现在我为实现这一目标所做的努力是徒劳的,我没有多个点,而是在设备的正中心有一个点(显然它们都是重叠的)。

这是我的代码,我到底做错了什么?

顶点着色器

uniform vec4 color;
uniform float pointSize;
uniform mat4 orthoMatrix;

attribute vec3 position;

varying vec4 outColor;
varying vec3 center;

void main() {
center = position;
outColor = color;
gl_PointSize = pointSize;
gl_Position = vec4(position, 1) * orthoMatrix;
}

这就是我制作矩阵的方法。我正在使用 GLKit,所以理论上它正在为我制作正交矩阵。但是,如果您有一个自定义函数,您认为最好这样做,那就没问题了!我也可以用。

var width:Int32 = 0
var height:Int32 = 0
var matrix:[GLfloat] = []
func onload()
{
width = Int32(self.view.bounds.size.width)
height = Int32(self.view.bounds.size.height)
glViewport(0, 0, GLsizei(height), GLsizei(width))
matrix = glkitmatrixtoarray( GLKMatrix4MakeOrtho(0, GLfloat(width), 0, GLfloat(height), -1, 1))
}
func glkitmatrixtoarray(mat: GLKMatrix4) -> [GLfloat]
{
var buildme:[GLfloat] = []
buildme.append(mat.m.0)
buildme.append(mat.m.1)
buildme.append(mat.m.3)
buildme.append(mat.m.4)
buildme.append(mat.m.5)
buildme.append(mat.m.6)
buildme.append(mat.m.7)
buildme.append(mat.m.8)
buildme.append(mat.m.9)
buildme.append(mat.m.10)
buildme.append(mat.m.11)
buildme.append(mat.m.12)
buildme.append(mat.m.13)
buildme.append(mat.m.15)
return buildme

}

将其传递给着色器

func draw()
{
//Setting up shader for use
let loc3 = glGetUniformLocation(program, "orthoMatrix")
if (loc3 != -1)
{
//glUniformMatrix4fv(loc3, 1, GLboolean(GL_TRUE), &matrix[0])
glUniformMatrix4fv(loc3, 1, GLboolean(GL_TRUE), &matrix[0])
}
//Passing points and extra data

}

注意:如果在顶点着色器中删除与矩阵的乘法,这些点就会显示出来,但由于默认 OpenGL 的工作方式,显然大多数点都在屏幕外。

另外:我尝试过使用 this函数而不是 glKit 的方法。结果相同。也许我没有将可能的东西传递到矩阵制作函数中,或者也许我没有将它正确地传递到着色器。

编辑:我已经吐出了project file如果您想看看一切进展如何。

最佳答案

好吧,我终于明白了!我做了什么1. glkit矩阵转数组时我数错了。
2. 当将矩阵作为统一传递时,您实际上需要整个数组的地址而不仅仅是起始元素。3. 将矩阵传递给着色器时,GL_FALSE 不是一个合适的参数。

谢谢你,reto matic

关于swift - OpenGL ES 正交投影矩阵不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33976377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com