标签: opengl

顶点着色器与片段着色器

我已经阅读了一些关于Cg的教程,但有一点我不太清楚.顶点和片段着色器之间究竟有什么区别?什么情况比另一种更适合?

opengl cg vertex-shader fragment-shader

103
推荐指数
4
解决办法
7万
查看次数

如何使用gcc/g ++在Linux上编译Windows?

我在Linux上使用freeglut用C++(g ++)编写了一些效果,然后用它编译它们

g++ -Wall -lglut part8.cpp -o part8
Run Code Online (Sandbox Code Playgroud)

所以我想知道是否有可能让g ++制作包含所需内容的静态编译Windows可执行文件?

我没有Windows,所以如果我能在Linux上做到这一点真的很酷:)

c++ opengl gcc glut freeglut

101
推荐指数
6
解决办法
15万
查看次数

opengl:glFlush()对阵glFinish()

我无法区分调用glFlush()和调用之间的实际区别glFinish().

文档说glFlush()并且glFinish()会将所有缓冲操作推送到OpenGL,以便可以确保它们都将被执行,区别在于glFlush()直接返回作为glFinish()块的所有操作都完成.

阅读完定义之后,我认为如果我使用glFlush()它,我可能会遇到向OpenGL提交更多操作而不是执行的问题.所以,只是为了尝试,我换掉了我glFinish()的东西glFlush(),看,我的程序运行(据我所知),完全相同; 帧率,资源使用,一切都是一样的.

所以我想知道这两个调用之间是否存在很大差异,或者如果我的代码使它们运行没有区别.或者应该使用哪一个而不是另一个.我还认为OpenGL会有一些调用,比如glIsDone()检查a的所有缓冲命令glFlush()是否完整(因此不会比OpenGL更快地发送操作到OpenGL),但我找不到这样的函数.

我的代码是典型的游戏循环:

while (running) {
    process_stuff();
    render_stuff();
}
Run Code Online (Sandbox Code Playgroud)

c c++ opengl graphics

101
推荐指数
6
解决办法
6万
查看次数

什么是顶点阵列对象?

我今天刚开始从本教程开始学习OpenGL:http://openglbook.com/the-book/
我到了第2章,在那里画了一个三角形,我理解除了VAO之外的一切(这个首字母缩略词好吗?).本教程有以下代码:

glGenVertexArrays(1, &VaoId);
glBindVertexArray(VaoId);
Run Code Online (Sandbox Code Playgroud)

虽然我知道代码是必要的,但我不知道它的作用.虽然我从不使用VaoId(除了销毁它),但如果没有它,代码就无法运行.我假设这是因为它需要被绑定,但我不知道为什么.这个确切的代码是否只需要成为每个OpenGL程序的一部分?该教程将VAO解释为:

顶点数组对象(或VAO)是描述顶点属性如何存储在顶点缓冲区对象(或VBO)中的对象.这意味着VAO不是存储顶点数据的实际对象,而是顶点数据的描述符.顶点属性可以通过glVertexAttribPointer函数及其两个姐妹函数glVertexAttribIPointer和glVertexAttribLPointer来描述,我们将在下面探讨其中的第一个.

我不明白VAO如何描述顶点属性.我没有以任何方式描述它们.它是否从glVertexAttribPointer获取信息?我想这一定是它.VAO只是glVertexAttribPointer信息的目的地吗?

另外,我遵循的教程是否可以接受?有什么我应该注意的或更好的教程可以遵循?

opengl vbo vertex-array vao

100
推荐指数
5
解决办法
5万
查看次数

模型视图投影矩阵的目的

我们使用模型视图投影矩阵的目的是什么?为什么着色器需要模型视图投影矩阵?

opengl directx 3d

98
推荐指数
2
解决办法
8万
查看次数

如何使用透明背景制作OpenGL渲染上下文?

渲染上下文通常在背景上具有纯色(黑色或其他任何内容,请参见下图):

替代文字

我想知道是否可以设置一个窗口,没有装饰和透明背景,同时允许我渲染OpenGL的东西.

这会产生三角形漂浮在屏幕上的错觉.透明背景应该允许您查看可能位于其后面的桌面或其他应用程序.

你能用源代码举例说明吗?

平台:Windows(仅限win32)

c opengl winapi transparency

96
推荐指数
6
解决办法
5万
查看次数

glVertexAttribPointer澄清

只是想确保我理解正确(我会问SO聊天,但它已经死了!):

我们有一个顶点数组,我们通过绑定它来制作"当前"
然后我们有一个缓冲区,我们绑定到一个目标,
然后我们填充该目标,通过glBufferData 该目标基本上填充绑定到该目标的任何东西,即我们的缓冲区
然后我们调用glVertexAttribPointer哪个描述数据是如何布局的 - 数据是绑定的任何数据GL_ARRAY_BUFFER ,这个描述符保存到我们原始的顶点数组中

(1)我的理解是否正确?关于一切如何相关
文档有点稀疏.

(2)是否存在某种默认的顶点阵列?因为我忘了/省略了glGenVertexArrays,glBindVertexArray没有它我的程序运行正常.


编辑:我错过了一步...... glEnableVertexAttribArray.

(3)当时glVertexAttribPointer是否调用与顶点数组绑定的顶点属性,然后我们可以随时启用/禁用该属性glEnableVertexAttribArray,无论当前绑定哪个顶点数组?

或者(3b)当时glEnableVertexAttribArray是否调用与顶点数组相关联的顶点属性,因此glEnableVertexAttribArray当绑定不同的顶点数组时,我们可以通过在不同时间调用将相同的顶点属性添加到多个顶点数组?

opengl

92
推荐指数
1
解决办法
4万
查看次数

OpenGL ES与OpenGL

OpenGL ES和OpenGL有什么区别?

opengl opengl-es

85
推荐指数
7
解决办法
5万
查看次数

OpenGL坐标系是左撇子还是右撇子?

我试图了解OpenGL坐标系.然而,一些教程说默认坐标系是左撇子(见http://www.c-sharpcorner.com/UploadFile/jeradus/OpenGLBasics11172005014307AM/OpenGLBasics.aspx),其他人说这是右手(参见http:// www .falloutsoftware.com/tutorials/gl/gl0.htm).哪个是对的?我知道我们可以通过镜像将一个转换为另一个,但我想知道默认坐标.

opengl coordinates

82
推荐指数
4
解决办法
5万
查看次数

OpenGL如何在最低级别工作?

我理解如何编写OpenGL/DirectX程序,我知道它背后的数学和概念性东西,但我很好奇GPU-CPU通信如何在低级别上工作.

假设我有一个用C语言编写的OpenGL程序,它显示一个三角形并将相机旋转45度.当我编译这个程序时,它会变成一系列ioctl调用,然后gpu驱动程序将相应的命令发送到gpu,其中旋转三角形并设置适当颜色的适当像素的所有逻辑都是有线的在?或者程序是否会被编译成一个"gpu程序",它被加载到gpu并计算旋转等?还是完全不同的东西?

编辑:几天后我发现这篇文章系列,基本上回答了这个问题:http: //fgiesen.wordpress.com/2011/07/01/a-trip-through-the-graphics-pipeline-2011-part- 1 /

opengl gpu

82
推荐指数
4
解决办法
3万
查看次数