为什么这段代码没有绘制三角形?

时间:2014-02-01 23:10:32

标签: c opengl sdl-2

我是OpenGL的新手,我刚刚使用SDL 2编写了一段代码,据我所知应该绘制一个三角形,但这段代码似乎不起作用,所以我没有完成学习。我已经获得了所有初始化代码SDL 2文档说我已经写好了,并且动态加载返回的函数是可调用的。当我执行此代码而不是三角形时,我得到一个黑色(但已清除)窗口。为什么这段代码不能绘制我想要的三角形,为什么这个代码会将窗口清除为黑色?我想知道主要是第一个问题背后的技术细节,以便我以后可以依赖它。

(*main_context.glViewport)(0, 0, 100, 100);
(*main_context.glBegin)(GL_TRIANGLES);
(*main_context.glColor4d)(255, 255, 255, 255);
(*main_context.glVertex3d)(1, 1, -50);
(*main_context.glVertex3d)(1, 30, 1);
(*main_context.glVertex3d)(30, 1, 1);
(*main_context.glEnd)();
(*main_context.glFinish)();
(*main_context.glFlush)();
SDL_GL_SwapWindow(window);

更新

我修改了我的代码以包含不同的坐标,我得到了绘制的三角形,但是当我离得更远时我无法绘制它。那是为什么?

(*main_context.glVertex3d)(2, -1, 1); /* Works. */
(*main_context.glVertex3d)(2, -1, 3); /* Doesn't work. */

1 个答案:

答案 0 :(得分:1)

除非您在代码中的其他位置设置投影和/或模型视图矩阵,否则它使用默认(单位矩阵)变换,这是一个左下角为(-1, -1)的正交投影,{{1}在右上方。 (1, 1)仅更改正在渲染的默认帧缓冲区的部分,它与投影无关。

使用正交投影时,Z坐标不会影响点的屏幕空间位置,除了不会渲染Z剪裁平面外的点。在这种情况下,这就是glViewport之外的所有内容。鉴于你的一个点是-1 <= z <= 1,这似乎是你的问题。

相关问题