gpt4 book ai didi

opengl-es - 不带 ftransform() 的桌面 GLSL

转载 作者:行者123 更新时间:2023-12-03 07:43:48 24 4
gpt4 key购买 nike

我正在将我的代码库从固定功能 OpenGL 1.x 移植到 OpenGL 2.x - 技术上是 OpenGL ES 2.0,但我仍在桌面上编码,只需记住 ES 2.0 施加的限制这与 3.1"new"配置文件类似。

问题是,似乎对于 2D 以外的任何东西,创建一个在 modelviewprojection 矩阵中作为统一传递的着色器是行不通的。通常我会看到黑屏,但如果我将所有顶点的 Z 值设置为 0,我就会看到一些东西。

当我启用 ES 2.0 模式时,将我的着色器放入 RenderMonkey 中可以正常工作,但在标准桌面 GL 上,它只是黑屏(没有编译器错误/警告):

垂直着色器:

uniform mat4 mvp_matrix;
uniform mat4 obj_matrix;
uniform vec4 u_color;
attribute vec3 a_vertex;
attribute vec2 a_texcoord0;

varying vec4 v_color;
varying vec2 v_texcoord0;

void main(void)
{
v_color = u_color;
gl_Position = mvp_matrix * (obj_matrix * vec4(a_vertex, 1.0));
v_texcoord0 = a_texcoord0;
}

碎片着色器:

uniform sampler2D t_texture0;
varying vec2 v_texcoord0;
varying vec4 v_color;

void main(void)
{
vec4 color = texture2D(t_texture0, v_texcoord0);
gl_FragColor = color * v_color;
}

我将矩阵作为 glUniformMatrix4fv(location, 1, GL_FALSE, mvpMatrix); 传递对于以 2D 绘制的任何内容,此着色器的工作方式就像黄金一样。我在这里做错了什么?或者我需要在桌面 GL 上使用 ftransform() 吗?

最佳答案

我认为有一点需要澄清:

  • 模型矩阵将对象从对象坐标转换为世界坐标。
  • View 矩阵将世界坐标转换为眼睛坐标。
  • 投影矩阵将眼睛坐标转换为剪辑坐标。

根据标准命名约定,mvpMatrix 依次为投影 * View * 模型。没有其他矩阵需要相乘。投影是您的投影矩阵(正交或透视), View 是相机变换矩阵(不是模型 View ),模型是对象的位置、比例和旋转。

我认为问题要么在于不需要相乘的矩阵相乘,要么在于以错误的顺序相乘矩阵。 (矩阵乘法不可交换)

如果您还没有解决这个问题,我建议您分别发送所有 3 个矩阵,然后将值转储回去,以确保发送矩阵时没有问题。

顶点着色器:

attribute vec4 a_vertex;
attribute vec2 a_texcoord0;

varying vec2 v_texcoord0;

uniform mat4 projection;
uniform mat4 view;
uniform mat4 model;

void main(void)
{
gl_Position = projection * view * model * a_vertex;
v_texcoord0 = a_texcoord0;
}

片段着色器:

uniform sampler2D t_texture0;
uniform vec4 u_color;

varying vec2 v_texcoord0;

void main(void)
{
vec4 color = texture2D(t_texture0, v_texcoord0);
gl_FragColor = color * u_color;
}

此外,我将颜色统一移至片段着色器,将其传递给片段着色器,因为当所有顶点都具有相同颜色时,不需要变化。

关于opengl-es - 不带 ftransform() 的桌面 GLSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8207420/

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