我正在Ubuntu上编写一个简单的OpenGL程序,它使用顶点数组绘制两个正方形(一个在另一个前面)。由于某种原因,GL_DEPTH_TEST似乎不起作用。后面的对象显示在前面的对象的前面。深度缓冲区由启用
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
GL_DEPTH_TEST由
glEnable(GL_DEPTH_TEST);
并且深度缓冲区在绘制之前被清除
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
完整的代码如下所示:
#define BUFFER_OFFSET( offset ) ((GLvoid*) (offset))
#define NUM_VERTICES 8
vec4 vertices[8] =
{{0.0, 0.0, -0.25, 1.0}, // front
{0.0, 0.5, -0.25, 1.0},
{0.5, 0.5, -0.25, 1.0},
{0.5, 0.0, -0.25, 1.0},
{0.25, 0.25, -0.75, 1.0}, // back
{0.25, 0.75, -0.75, 1.0},
{0.75, 0.75, -0.75, 1.0},
{0.75, 0.25, -0.75, 1.0}};
vec4 vertex_colors[8] =
{{1.0, 0.0, 0.0, 1.0}, // red
{1.0, 0.0, 0.0, 1.0},
{1.0, 0.0, 0.0, 1.0},
{1.0, 0.0, 0.0, 1.0},
{0.0, 1.0, 0.0, 1.0}, // green
{0.0, 1.0, 0.0, 1.0},
{0.0, 1.0, 0.0, 1.0},
{0.0, 1.0, 0.0, 1.0}};
void init(void)
{
GLuint program = initShader("vshader_td.glsl", "fshader_td.glsl");
glUseProgram(program);
GLuint vao;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
GLuint buffer;
glGenBuffers(1, &buffer);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices) + sizeof(vertex_colors), NULL, GL_STATIC_DRAW);
glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(vertices), vertices);
glBufferSubData(GL_ARRAY_BUFFER, sizeof(vertices), sizeof(vertex_colors), vertex_colors);
GLuint vPosition = glGetAttribLocation(program, "vPosition");
glEnableVertexAttribArray(vPosition);
glVertexAttribPointer(vPosition, 4, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(0));
GLuint vColor = glGetAttribLocation(program, "vColor");
glEnableVertexAttribArray(vColor);
glVertexAttribPointer(vColor, 4, GL_FLOAT, GL_FALSE, 0, BUFFER_OFFSET(sizeof(points)));
glEnable(GL_DEPTH_TEST);
glClearColor(1.0, 1.0, 1.0, 1.0);
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glDrawArrays(GL_QUADS, 0, NUM_VERTICES);
glutSwapBuffers();
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(512, 512);
glutCreateWindow("Test Depth");
glewInit();
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
顶点着色器如下所示:#version 130
in vec4 vPosition;
in vec4 vColor;
out vec4 color;
void main()
{
color = vColor;
gl_Position = vPosition;
}
片段着色器如下所示:#version 130
in vec4 color;
out vec4 fColor;
void main()
{
fColor = color;
}
为什么前面的物体会被后面的物体挡住?
在顶点着色器中,你可以
in vec4 vPosition;
[....]
gl_Position = vPosition;
而不应用任何变换。由于<code>gl_Position<code>是顶点的剪辑空间位置,这意味着顶点坐标被解释为在剪辑空间中指定。
和您的顶点坐标
vec4 vertices[8] =
{{0.0, 0.0, -0.25, 1.0}, // front
[...]
{0.25, 0.25, -0.75, 1.0}, // back
只是暗示你标记为“前面”的点在你标记为“后面”的点后面。
我不知道你是如何得出相反的假设的,我只能猜测,你把这与经典的左手OpenGL眼空间约定混淆了,其中“摄像机:观察-z方向-但这在这里完全不相关,因为你根本没有建立眼空间,直接在剪辑空间中绘制。
主要内容 课程列表 专项课程学习 辅助课程 论文专区 课程列表 课程 机构 参考书 Notes等其他资料 卷积神经网络视觉识别 Stanford 暂无 链接 神经网络 Tweet 暂无 链接 深度学习用于自然语言处理 Stanford 暂无 链接 自然语言处理 Speech and Language Processing 链接 专项课程学习 下述的课程都是公认的最好的在线学习资料,侧重点不同,但推
本章将介绍如何使用接口在网站上进行对接 在网站<head></head>或<body></body>区域引入小能 js <script id="xiaonengjs" src="//visitor.ntalker.com/visitor/js/xiaoneng.js?siteid=您的网站id"></script> 如果您需要更新用户信息,如身份信息,您可以添加以下代码xn('setCustom
浏览深度分为两部分: 时间/设备筛选 和 浏览深度分析 (详情) 1.时间筛选 便捷按钮有今日、昨日、前日、上周 X、近七天,并且能自定义选择时间段/设备来得出想要的结果报表 2.浏览深度分析 (详情) 1)访问者浏览深度情况,体现网站内容是否足够吸引 2)如有需要,亦可点击下载当前报表及更多数据下载,将报表下载到个人电脑,以供存档及分析
在坐标系统小节中,我们渲染了一个3D箱子,并且运用了深度缓冲(Depth Buffer)来防止被阻挡的面渲染到其它面的前面。在这一节中,我们将会更加深入地讨论这些储存在深度缓冲(或z缓冲(z-buffer))中的深度值(Depth Value),以及它们是如何确定一个片段是处于其它片段后方的。 深度缓冲就像颜色缓冲(Color Buffer)(储存所有的片段颜色:视觉输出)一样,在每个片段中储存了
Google Cloud Platform 推出了一个 Learn TensorFlow and deep learning, without a Ph.D. 的教程,介绍了如何基于 Tensorflow 实现 CNN 和 RNN,链接在 这里。 Youtube Slide1 Slide2 Sample Code
简介 深度截图(英文名:Deepin Screenshot)是deepin团队开发的一款精巧截图软件。 在Linux下虽然已有Shutter、 Scrot等强大的截图工具,但是它们操作体验并不是太好。因此深度截图学习了QQ截图的优点,实现了截图、编辑、分享一体化操作,方便用户降低学习成本,享受截图的快乐。 深度截图是一款自由软件,遵循自由软件基金会发布的 GNU 通用公共许可证第三版。 目前最新版