【发布时间】:2023-03-29 05:35:01
【问题描述】:
我可以在 openGL 中成功操作屏幕上的 3d 对象。
要添加 2d 效果,我想我可以简单地关闭顶点着色器中的矩阵乘法(或给出单位矩阵),然后我提供的“顶点”将是屏幕坐标。
但是 2 个简单的三角形拒绝显示(正方形 0,0,100,100,尝试了各种深度,但是如果我给它一个旋转矩阵,同样的代码可以正常工作。
有什么想法吗?
static const char gVertexShader[] =
"attribute vec3 coord3d;\n"
"uniform mat4 mvp;\n"
"void main() {\n"
"gl_Position = mvp*vec4(coord3d,1.0);\n"
"}\n";
->
static const char gVertexShader[] =
"attribute vec3 coord3d;\n"
"uniform mat4 mvp;\n"
"void main() {\n"
"gl_Position = vec4(coord3d,1.0);\n"
"}\n";
编辑:我无法使用单位矩阵作为转换来显示任何东西,但我能够使用这个来做到这一点:
glm::mat4 view = glm::lookAt(glm::vec3(0.0, 0.0, -5), glm::vec3(0.0, 0.0, 0.0), glm::vec3(0.0, 1.0, 0.0));
glm::mat4 pers = glm::perspective(.78f, 1.0f*screenWidth/screenHeight, 0.1f, 10.0f);
xform = pers * view * glm::mat4(1.0f);
您必须调整 -5 才能完全填满屏幕...
【问题讨论】:
-
如果您想在 2D 中绘制某些东西,使用正交投影而不是透视投影通常很有用。
标签: opengl vertex-shader