Tag: opengl

最新的GLSL教程?

对于HSL转换,我已经有了相当不错的着色器,但是它都是用老派的GLSL编写的,而且从我看到的很多东西中,它在较新版本的OpenGL中已经被弃用了。 但是我发现很难find关于如何更新着色器代码的信息。 所有非常好的OpenGL教程似乎都是针对老派的GL技术。 有谁知道在哪里可以find如何编写现代GLSL教程? 如果它解释如何更新较旧的着色器脚本,则为奖励点。

学习现代的OpenGL

我知道过去几年也有类似的问题,但经过一番研究后,我仍然无法决定从哪里学到,应该学什么。 我也希望看到你现在使用更多C ++ OOP和着色器方法的现代OpenGL编程实际观点。 并确保我对某些事情的真正理解是有效的。 所以…目前我们有OpenGL 4.2,当我在某处读取需要dx11硬件(这是什么意思?)和一组“侧”库,例如创build窗口。 有最常见的GLUT,我非常讨厌。 主要原因之一是函数调用,它不允许我们创build主循环的方式自由。 正如有些人所说,这不是为了游戏。 也有GLFW,这实际上是相当不错,直截了当的我。 出于某种原因,人们将其与GLUT一起使用。 (它不仅提供窗口初始化,还提供其他实用程序?) 还有SFML和SDL(SDL <SFML IMO),但他们有时需要奇怪的方法来使用OGL,在某些情况下并不是很快。 我们也有GLEW,这是扩展加载实用程序…等待…不是GLUT / GLFW已经是一个扩展? 是否有任何理由使用它,像有什么非常重要的扩展名感兴趣? 直到现在我们有窗口创build(和一些实用程序),但是… OGL不负责加载纹理,不是3D模型。 我还需要多less个其他库? 现在让我们来提一下教育部分。 有(着名的)NeHe教程。 使用WinApi编写,代码非常不明确,过时的解决scheme,但仍然是最受欢迎的。 像红皮书等一些东西可以find,这与像2.x或3.x版本,但只有less数(和未完成)的教程提到4.x. 该怎么办?

ffmpegvideo到opengl纹理

我试图渲染帧抓取和转换使用ffmpegvideo到OpenGL纹理放在一个四。 我已经非常疲惫的谷歌,没有find答案,以及我find答案,但他们似乎没有工作。 基本上,我使用avcodec_decode_video2()解码帧,然后sws_scale()将帧转换为RGB,然后glTexSubImage2D()创build一个openGL纹理,但似乎无法得到任何工作。 我已经确定“目标”AVFrame在SWS上下文设置中具有2维的权力。 这是我的代码: SwsContext *img_convert_ctx = sws_getContext(pCodecCtx->width, pCodecCtx->height, pCodecCtx->pix_fmt, 512, 256, PIX_FMT_RGB24, SWS_BICUBIC, NULL, NULL, NULL); //While still frames to read while(av_read_frame(pFormatCtx, &packet)>=0) { glClear(GL_COLOR_BUFFER_BIT); //If the packet is from the video stream if(packet.stream_index == videoStream) { //Decode the video avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet); //If we got a frame then convert it and […]

初始化没有GLUT的OpenGL

我能find的每个介绍和示例似乎都使用GLUT或其他框架来“初始化”OpenGL。 有什么方法可以在GL和GLU中使用什么来初始化OpenGL? 如果没有,那么没有它,GLUT做什么是不可能的?

如何做一个GUI的OpenGL生活文字渲染?

我正在实现一个基于OpenGL的GUI。 我遇到了每个GUI都会有文本呈现的问题。 我知道在OpenGL中渲染文本的几种方法,但是,我不知道它们中哪一个最适合于GUI。 通常在一个GUI中,我们有两种types的文本 – 静态和现场。 静态很容易 – 我们可以渲染一个TTF到一个纹理,并忘记它。 这是“活”的文本,更困扰我 – 想象控制台,或在多人游戏中的实时聊天。 我想到了几个select: 没有特殊的情况 – 每次文本改变时渲染和加载纹理,记住只有在实际出现新文本时重新渲染纹理,并尝试将较大的文本分割成小部分(如每个聊天行)。 然而,这仍然会让我们挂在像是一直在变化的分数线的情况下,或者是一个呈现“每个人物”的简介文本(在一些科幻游戏中看到的打字机风格) 四个字符 – 这似乎也是一个stream行的解决scheme,你准备一个纹理与ASCII表格,并呈现一个纹理四字符。 但是,我对这种解决scheme的效率深表怀疑。 提示如何更快地做到这一点也是值得欢迎的。 混合解决scheme – 但我不知道如何实现这个干净 因此,问题是如何有效地在OpenGL中呈现文本? 如果这有帮助,我编写STL / Boost-heavy C ++,针对GForce 6及更高版本的graphics卡。

了解glm :: lookAt()

我正在学习一个教程来学习OpenGL,其中他们使用glm::lookAt()函数来构build一个视图,但我无法理解glm::lookAt() ,显然没有详细的GLM文档。 任何人都可以帮我理解glm::lookAt()的参数和工作吗? GLM文件说: detail::tmat4x4<T> glm::gtc::matrix_transform::lookAt ( detail::tvec3< T > const & eye, detail::tvec3< T > const & center, detail::tvec3< T > const & up ) 我目前的理解是,相机位于eye ,面向center 。 (我不知道这是什么)

OpenGL 4.x学习资源

我知道有一些关于学习OpenGL的问题。 这是我所知道的: math为3D 三维理论 这里是我想知道的: – OpenGL 4.0 核心configuration文件 (或后者) – 着色语言400(或后者) – 上面的每一部分(如果它不适用于供应商那么它仍然不打扰我) 这是我不想知道的 – 固定functionpipe道(不会使用它!) – 较旧的OpenGL的 – 兼容性configuration文件 我喜欢教程,系列文章,书籍等大部分信息。 PS如果你知道opengl 3.x核心configuration文件的资源,请发布它们

OpenGL中的帧缓冲区对象和像素缓冲区对象有什么区别?

FBO和PBO有什么区别? 哪一个我应该用于离屏渲染?

为什么有一个单独的投影matrix,然而结合模型和视图matrix是有好处的?

当你在学习3D编程时,你会被教导最简单的3个变换matrix: 模型matrix 。 这个matrix是每个单独的模型的个体,它旋转和按比例缩放对象,最终将其移动到3D世界中的最终位置。 “模型matrix将模型坐标转换为世界坐标”。 查看matrix 。 这个matrix对于大量的对象通常是相同的(如果不是全部),它将根据当前的“摄像头位置”旋转和移动所有的对象。 如果您想要使用相机拍摄3D场景,并且屏幕上显示的是由本相机拍摄的图像,则相机的位置及其观看方向将定义场景的哪些部分是可见的以及对象出现在捕获的图像上。 在渲染一个单独的帧的时候改变视图matrix的理由很less,但实际上存在(例如,通过渲染场景两次,改变视图matrix,你可以在场景中创build一个非常简单但令人印象深刻的镜像) 。 通常情况下,视图matrix在绘制的两个帧之间只改变一次。 “查看matrix将世界坐标转换为眼坐标”。 投影matrix 。 投影matrix决定如何将这些3D坐标映射到2D坐标,例如,如果有一个应用于它们的视angular(物体越远离观察者越小)或不正确(正交投影)。 投影matrix几乎不会改变。 但是,只有当新的窗口大小/屏幕分辨率具有与以前不同的显示宽高比时,如果要渲染到窗口中并且窗口大小已更改,或者如果您正在渲染全屏并且分辨率已更改,则可能必须更改。 有一些疯狂的效果,你可能想要改变这个matrix,但在大多数情况下,它对你的程序的整个生活非常稳定。 “投影matrix将眼坐标转换为屏幕坐标”。 这对我来说很有意义。 当然,总是可以将所有三个matrix合并成一个matrix,因为先乘以matrixA然后乘以matrixB与将matrixC乘以向量相同,其中C = B * A 现在,如果你看看经典的OpenGL(OpenGL 1.x / 2.x),OpenGL知道投影matrix。 然而,OpenGL不提供模型或视图matrix,它只提供了一个组合的模型视图matrix。 为什么? 这种devise迫使你永久地保存和恢复“视图matrix”,因为它将被应用于它的模型转换“消灭”。 为什么没有三个单独的matrix? 如果您查看新的OpenGL版本(OpenGL 3.x / 4.x),并且不使用经典的渲染pipe线,而是使用着色器(GLSL)自定义所有内容,则不再需要matrix,您必须定义你自己的matrix。 大多数人仍然保留投影matrix和模型视图matrix的旧概念。 为什么要这么做? 为什么不使用三个matrix,这意味着您不必永久保存和恢复模型视图matrix,或者使用单个组合的模型 – 视图 – 投影(MVP)matrix,这可以节省您在顶点着色器中的matrix乘法为所有渲染的单个顶点(毕竟这样的乘法不是免费的)。 所以总结一下我的问题:哪一个优点有一个组合的模型 – 视图matrix和一个单独的投影matrix,而不是有三个独立的matrix或单个MVPmatrix?

X因为应用程序挂起(使用C ++,Qt,OpenGL)

我的应用程序从networking获取数据并在场景中绘制(场景使用手工制作的OpenGL引擎)。 它工作几个小时。 当我不使用我的桌面时,由于显示器电源pipe理器信号(dpms),我的显示器closures。 然后,当我触摸鼠标或键盘时,显示器打开,应用程序挂起(X也挂起)。 如果我做了xset -dmps操作系统不使用dpms,并且应用程序工作稳定。 这些问题发生在Centos 6和Archlinux中,但是当我在Ubuntu 12.10下运行应用程序时,它工作的很好! 我尝试了不同的NVidia驱动程序。 没有效果。 我试图用SSH来远程login,并使用gdb连接到进程。 监视器打开后,我无法在进程表中find应用程序。 如何诊断问题? 显示器closures/打开时会发生什么(在OpengGL环境中)? 使用dpms时,Ubuntu会做些特别的事吗? 我们猜测问题的原因! 当显示器closures时,我们失去了OpenGL上下文。 监视器唤醒时,应用程序挂起(无上下文)。 由于不同的显示器连接,视操作系统而异的行为:Kubuntu显示器连接VGA电缆。 所以(可能)它对X行为没有影响。