gpt4 book ai didi

iphone - 如何为 opengles 2.0 实现 glOrtho?有或没有 glOrtho 规范中的 tx、ty、tz 值?

转载 作者:行者123 更新时间:2023-12-03 18:58:40 24 4
gpt4 key购买 nike

我正在尝试从 opengles 文档中实现我自己的 glOtho 函数 http://www.khronos.org/opengles/documentation/opengles1_0/html/glOrtho.html
修改我的顶点着色器中的投影矩阵。它目前无法正常工作,因为我看到我的简单三角形顶点不合适。您能检查一下下面的代码,看看我是否做错了什么。

我尝试将 tx、ty 和 tz 设置为 0,这似乎可以使其正确渲染。有什么想法为什么会这样吗?

void ES2Renderer::_applyOrtho(float left, float right,float bottom, float top,float near, float far) const{ 

float a = 2.0f / (right - left);
float b = 2.0f / (top - bottom);
float c = -2.0f / (far - near);

float tx = - (right + left)/(right - left);
float ty = - (top + bottom)/(top - bottom);
float tz = - (far + near)/(far - near);

float ortho[16] = {
a, 0, 0, tx,
0, b, 0, ty,
0, 0, c, tz,
0, 0, 0, 1
};


GLint projectionUniform = glGetUniformLocation(_shaderProgram, "Projection");
glUniformMatrix4fv(projectionUniform, 1, 0, &ortho[0]);

}

void ES2Renderer::_renderScene()const{
GLfloat vVertices[] = {
0.0f, 5.0f, 0.0f,
-5.0f, -5.0f, 0.0f,
5.0f, -5.0f, 0.0f};

GLuint positionAttribute = glGetAttribLocation(_shaderProgram, "Position");

glEnableVertexAttribArray(positionAttribute);


glVertexAttribPointer(positionAttribute, 3, GL_FLOAT, GL_FALSE, 0, vVertices);
glDrawArrays(GL_TRIANGLES, 0, 3);


glDisableVertexAttribArray(positionAttribute);

}

垂直着色器

attribute vec4 Position;
uniform mat4 Projection;
void main(void){
gl_Position = Projection*Position;
}

解决方案从下面的 Nicols 回答中,我修改了我的矩阵,它似乎渲染正确

float ortho[16] = {
a, 0, 0, 0,
0, b, 0, 0,
0, 0, c, 0,
tx, ty, tz, 1
};

重要说明您不能使用 GL_TRUE 作为 glUniform 的转置参数,如下所示。 opengles 不支持。它必须是 GL_FALSE

glUniformMatrix4fv(projectionUniform, 1, GL_TRUE, &ortho[0]);

来自http://www.khronos.org/opengles/sdk/docs/man/xhtml/glUniform.xml

转置指定在将值加载到统一变量中时是否转置矩阵。必须为 GL_FALSE。

最佳答案

OpenGL 中的矩阵是列主矩阵。除非您将 GL_TRUE 作为第三个参数传递给 glUniformMatrix4fv,否则矩阵将有效地相对于您想要的进行转置。

关于iphone - 如何为 opengles 2.0 实现 glOrtho?有或没有 glOrtho 规范中的 tx、ty、tz 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7131037/

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