- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在将我的代码库从固定功能 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() 吗?
最佳答案
我认为有一点需要澄清:
根据标准命名约定,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/
我正在将我的代码库从固定功能 OpenGL 1.x 移植到 OpenGL 2.x - 技术上是 OpenGL ES 2.0,但我仍在桌面上编码,只需记住 ES 2.0 施加的限制这与 3.1"new"
我正在尝试重现 dplyr 的以下输出代码与 R包裹collapse . dplyr代码 library(tidyverse) starwars %>% select(name, mass, sp
{collapse}是一个 R 包,它允许更快地处理数据操作和描述性统计数据。一些功能 intentionally echoes {dplyr} .例如,比较以下 dplyr 代码与 collapse
{collapse}是一个 R 包,它允许更快地处理数据操作和描述性统计数据。一些功能 intentionally echoes {dplyr} .例如,比较以下 dplyr 代码与 collapse
我是一名优秀的程序员,十分优秀!