- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 c/c++ (NDK) for android 在 opengl es 2.0 中编程。由于没有适用于 Android 的官方 C++ 库,我使用的是 GLM 库!
到目前为止,我可以在黑色背景上绘制一个白色三角形,而无需应用任何投影/截锥体或相机/ View 矩阵。当然,这会导致三角形显示为沿屏幕宽度缩放。
然而,一旦我应用相机和投影变换,三角形就会从场景中消失,只出现背景颜色。
这是相关代码:
float triangleCoords[] = { // in counterclockwise order:
0, 1, 0, // top
-1, 0, 0, // bottom left
1, 0, 0 // bottom right
};
std::string vertexShaderCode =
"attribute vec4 vPosition; "
"uniform mat4 uMVPMatrix; "
"void main() {"
" gl_Position = uMVPMatrix*vPosition;"
"}";
std::string fragmentShaderCode =
"precision mediump float;"
"uniform vec4 vColor;"
"void main() {"
" gl_FragColor = vColor;"
"}";
mvpMatrix=glm::translate(mvpMatrix,vec3(0,-0.5,0));
mvpMatrix*=glm::lookAt(vec3(0,0,-3),vec3(0,0,0),vec3(0,1,0));
mvpMatrix*=glm::frustum(-1.0f,1.0f,-ratio,ratio,3.0f,7.0f);
其中 vec3 是“typedef glm::vec3”,mvpMatrix 是“glm::mat4x4”
我已经尝试了很多方法,例如在视锥体之前乘以 lookAt 并改变视锥体的近远值等。
我也试过改变三角形坐标看它是否被剪裁但无济于事
但是,如果未应用 lookAt 和 frustum,则 0.5 单位的转换将正常工作,这意味着从矩阵到着色器的值传递是正确的。
帮我解决这个问题
最佳答案
您没有正确使用 glm 库。
您在着色器中使用的约定(匹配旧的固定功能管道的默认约定以及 glm 的约定)是 matrix * vector
。
当您将多个变换组合到一个矩阵时,您会得到以下结果:M=A*B*C
并将其应用于某个 vector v
作为 v' = M * v
。但这与 v' = A * ( B * ( C * v))
相同,因此 C
实际上是 首先 应用的。在你的情况下,你有 M * V * P
,但正确的“ModelViewProjection”转换首先应用模型转换(到达世界空间),然后是 View 转换(到达眼睛空间),最后投影变换到裁剪空间,所以你需要 P * V * M
。
请注意,根据您选择的数字,三角形最终会恰好位于近平面 - 但由于数值不精确,它可能仍会被剔除。
关于android opengl es 2.0 glm 投影不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28013319/
如何将 glm::vec4 转换为 glm::vec3? 仅需要 x、y、z - 可以删除 w 组件。 在 GLSL 中,这可以通过 .xyz[1] 完成,但在 glm 中,这会导致编译错误: err
我正在使用 R 中的 h2o 包通过 h2o.glm() 函数来适应 GLM。在具有 l1 正则化惩罚的 GLM 中评估特征重要性的一种合理方法是监视参数进入线性预测器(即模型)的顺序,因为 l1 惩
我在从最新版本的 R 中的 glm 计算 OR 置信区间时遇到问题,但我以前没有遇到过这个问题。与任何 glm 在哪里 family="binomial" ,无论模型多么简单,我都可以轻松提取摘要和
我需要在我的 glm 图上添加 95% 的置信区间。 当我执行 multiline=T 时(因为我需要在同一个地 block 上进行 2 次处理,所以我这样做了),间隔消失了。我怎样才能让他们回来?
对于上下文,我一直在学习 OpenGL,并且学习了透视投影。花了整整一个小时试图弄清楚为什么我的三角金字塔没有正确显示,直到我注意到我的一个矩阵乘法(使用 operator* for glm::mat
你能告诉我 返回了什么吗? glm$残差和 残留物(glm)其中 glm 是一个准泊松对象。例如我将如何使用 glm$y 和 glm$linear.predictors 创建它们。 glm$残差
这是关于理解 glm 源码的。我想知道 glm 是否对它的类进行了零初始化并进行了尝试。是的,glm::vec3 和 glm::mat4 被初始化,即使没有提供构造函数值。然后我想了解它是如何完成的并
我正在尝试使用 probit 模型重现其他人的工作。不幸的是,我没有太多关于他们方法的信息,只有他们的起始数据和他们的模型图。 当我在 ggplot 中绘制数据并使用 geom_smooth(meth
我有一个 ModelMatrix 类,其中我有一个 glm::vec3 定义为 glm::vec3 *position = nullptr; 然后我得到了一个setter方法 void ModelMa
我想标准化生物数据集的变量。我需要使用不同的响应变量运行 glm、glm.nb 和 lm。 该数据集包含按地块划分的给定树种的数量(所有地块大小相同)和一系列定性变量:植被类型、土壤类型和牛的存在/不
我正在使用著名的 OpenGL 框架创建一个漂亮的图形引擎,但突然遇到了一个意想不到的问题(就像所有问题一样)。 我必须创建一个函数来修改 glm::mat3 中的特定值。为此,我创建了一个简单的函数
其他答案似乎有一些相关信息,但没有解决我遇到的问题。 从我在 Xcode 中的项目中,我选择了“将文件添加到项目”并选择了整个 glm 子文件夹(我被告知这是使用 glm 所需的全部)。然后,在我的
像下面这样计算四元数时, 你能解释一下 1.0f means.. 是什么意思吗? 我认为它可能是 x 轴的 90 度。 glm::angleAxis(3.141592... / 2, glm::dv
这可能真的很简单,但我已经下载了 glm 的正确软件包 glm-0.9.9-a2,但我不知道如何安装。说明要么太复杂,要么太简单。 我无法通过使用包管理器或将存储库添加到 aptitude 或 Ana
我无法理解使用 glm 的效果编码。举个例子: data('mpg') mpg$trans = as.factor(mpg$trans) levels(mpg$trans) [1] "auto(av)
我正在尝试在 R 中重现二项式 glm 的结果。 考虑来自此处的数据 http://www.ats.ucla.edu/stat/r/dae/logit.htm mydata <- read.csv("
ChatGPT已经火了一段时间了,国内也出现了一些平替,其中比较容易使用的是ChatGLM-6B: https://github.com/THUDM/ChatGLM-6B ,主要是能够让我们基于
我一直在阅读code R 使用它来拟合广义线性模型 (GLM),因为 R 的源代码是免费提供的。使用的算法称为迭代重新加权最小二乘法 (IRLS),这是一种有据可查的算法。对于每次迭代,都会调用 Fo
我读过 glmnet 可以在没有正则化的情况下使用,即它可以用作常规 glm。我正在写一篇论文并试图避免使用许多不同的包,因此使用 glmnet 进行常规的 glm 逻辑回归拟合会很方便。谁能帮我?
我正在尝试使用 glm( family='binomial') 来拟合逻辑回归. 这是模型: model<-glm(f_ocur~altitud+UTM_X+UTM_Y+j_sin+j_cos+tem
我是一名优秀的程序员,十分优秀!