电脑图像

计算机图形学研究人员和程序员的问答

3
如何调试在OpenGL中渲染到帧缓冲区对象的内容?
我有一个点云正在渲染到屏幕上。每个点都有其位置和颜色以及ID。 我被要求将每个点的ID渲染到纹理,因此我创建了FBO并附加了两个纹理,一个用于颜色,一个用于深度。我为此屏幕外渲染创建了必要的VAO和VBO,并为每个点上载了其位置和ID。 完成向FBO的渲染后,我将读取带有颜色纹理的像素glReadPixels()以查看其值,但它们似乎都被清除了,即它们具有的值与相同glClearColor()。 有什么方法可以调试将其渲染为FBO的颜色纹理的东西吗?非常欢迎您提供任何提示。
17 opengl  debugging 

2
伽玛仍然重要吗?
在显示彩色图像时,不同的显示器(包括移动屏幕)是否仍使用明显不同的伽玛功能?是否存在一种标准化的方式来表示颜色,然后可以根据监视器的伽马值对其进行翻译,或者它们是否都足够相似以排除当今的这种需求?


2
光线跟踪器的子像素渲染
在字体渲染中,通常使用subpixel渲染。这里的基本思想是将像素分解为RGB分量,然后分别计算每个像素的值。由于每个分量都小于整个像素,因此可以实现更高质量的抗锯齿。 对于光线跟踪器,显然有类似的方法可以做到这一点。您分别在每个子通道上进行重构过滤。 但是,令我感到惊讶的是,我确实找不到这样做的射线追踪器的参考。特别是如果您已经在进行光谱渲染,这似乎是一件显而易见的事情。有一篇我从未听说过的期刊的论文,似乎与之相关。但是总的来说,亚像素渲染似乎并不是一件常事。我的问题:为什么不呢?

3
当游戏可以直接绘制像素时,为什么我们拥有诸如OpenGL和DirectX之类的图形框架?
游戏和其他图形密集型应用程序使用诸如OpenGL和DirectX之类的框架。此外,它们还需要像素着色器和DX12等功能。 但是,当我们可以逐像素绘制所有内容时,为什么需要所有这些框架和GPU功能? 首先,游戏必须以某种方式进行编译,以便逐像素绘制游戏。这可能会使游戏的可执行文件更大,但是会更快并且可以在任何32位彩色GPU(甚至旧的)上运行吗? 我知道最初的3D游戏是逐像素绘制的,但是为什么现在不这样做呢?

3
光线跟踪高度场的当前最新算法是什么?
多年来,已经有许多论文涉及在光线跟踪器中绘制高度场地形的不同技术。一些算法直接(或通过四叉树)对网格进行光线行进;其他人则将地形转换为多边形网格,并使用标准的射线三角形相交测试。这项研究似乎在过去几年中一直在进行,并且很难找到过去十年中撰写的论文,但是内存和计算(CPU和GPU)之间的平衡仍在变化。 如今,哪种算法可在高端台式机上提供最佳性能?或者,如果没有一个答案,那么当前最佳算法的性能特征有何不同?

3
OpenGL中的渲染与3D动画软件之间的区别
使用OpenGL等,我可以“实时” 60 FPS渲染出一些令人惊叹的外观。但是,如果我尝试用Maya或3ds Max制作相同场景的视频,即使分辨率和FPS相同,渲染时间也要长得多。 为什么这两种类型的渲染要花相同的时间花费不同的时间? 注意:是的,我的确意识到3D动画软件可以产生比实时图像更高级的图像。但是对于这个问题,我指的是一个同样复杂的场景。

2
什么是计算机图形学中的镶嵌
在最近的游戏中,我注意到一种叫做“镶嵌”的东西,将其打开会破坏我的帧频。 我注意到,启用后它看起来像是“抗锯齿”。 有人可以给我更多有关GPU的功能的信息。


3
基于物理的阴影-环境/间接照明
在研究了M. Pharr和G. Humphreys的PBRT之后,我实现了基于物理的路径跟踪器。现在,我正在尝试使用OpenGL ES(在iPhone应用程序中)将基于物理的渲染应用于实时图形。 我想开始将Oren-Nayar和Cook-Torrance用作漫反射和镜面BRDF,但是我有一个问题:如何为间接照明建模? 在路径跟踪器中(如pbrt中包含的那样),从路径跟踪算法“自动”提供间接/环境光,因为它遵循光线的路径,并考虑了直接和间接照明。 如何使用OpenGL ES编写的基于物理的渲染中的间接照明建模,以便使用实时计算机图形?

2
在阴影映射中处理投影别名
我不喜欢简单的过程3D建模,以制作用于3D打印的小建筑物。一个例子: 为了使模型在屏幕上更具可读性,我为单个定向光实现了基本的阴影映射。由于我的场景没有变化,因此我只使用场景的轴对齐框渲染一次阴影贴图,以找出阴影贴图的边界。阴影和边界看起来像我已经正确放置了所有矩阵,但是再靠近一点看起来就很糟糕: 从我读过的书中,我了解了彼得平移以及我可能会做些什么,但是我认为这是投影别名的一种形式,参差不齐的边缘看起来非常糟糕,以至于我认为基本实现中有问题。 我修改了像素着色器以显示阴影纹理边界: 我在纹理上进行了双线性过滤(没有它,我会出现严重的暗疮痤疮)。可悲的是,我对PCF的尝试也失败了-它看起来同样参差不齐: 这是禁用了双线性过滤的单个示例案例: 这看起来像“典型的”投射混叠吗?是否可以使用截锥体的场景(可能会进行级联)剪切视景的动态渲染来解决该问题? 编辑:添加双线性过滤的特写,阴影比较后,只是为了展示我得到的。由于内部边缘,阴影暗疮出现。我正在使用堆叠的虚拟块进行建模,但未执行正确的联合操作。根据我的阅读,在多面体上执行布尔运算并非易事,但也将允许我实现静态阴影量以及清理某些3D打印软件。

1
最新的实时头发渲染如何工作?
众所周知,头发模拟和渲染特别具有挑战性,实际上很少有人提出游戏中提出可信头发的示例。很难想象真正模拟大量的纤维并模拟这么多股纤维之间可能发生的各种散射事件是多么困难,更不用说每个纤维都是半透明的事实了。 有人可以规范化头发渲染的主要挑战是什么,尤其是对于实时场景而言?最新技术如何克服这些问题?是否使用了事实上的标准理论模型? 需要说明的是,对于实时而言,我不一定是指游戏环境。


2
如何在OpenGL中实现轨迹球?
在深入了解转换之后,是时候为我的应用实现跟踪球了。我知道我必须创建一个从起点到单击鼠标的向量,然后再从起点到释放鼠标的另一个向量。 我的问题是,我是否必须将(x,y)像素坐标转换为世界坐标,还是应该只在图像空间中做所有事情(考虑图像空间是以像素为单位测量场景的2D投影)? 编辑 Richie Sams的答案是一个很好的答案。但是,我认为我采用的方法略有不同,如果我错了或者我误会了一些东西,请纠正我。 在我的应用程序有一个SimplePerspectiveCamera接收类position相机中,position of the target我们正在寻找的up载体中,fovy,aspectRatio,near和far距离。 通过这些,我构建了视图和投影矩阵。现在,如果要放大/缩小,请更新视野并更新投影矩阵。如果要平移,请移动摄像机的位置,并按鼠标产生的增量查看。 最后,对于旋转,我可以使用角度轴变换或四元数。为此,我将像素坐标保存在按下鼠标的位置,然后当鼠标移动时,我还将保存像素坐标。 对于每一对COORDS的我可以计算Z值给出的公式为球状,即,SQRT(1-X ^ 2-Y ^ 2),然后计算与从去矢量target到PointMousePressed和从target到PointMouseMoved,做叉积获取旋转轴并使用任何方法计算新的相机位置。 但是,我最大的疑问是(x,y,z)值是以像素坐标给出的,在计算我使用的矢量时,target这是世界坐标中的一个点。坐标系的这种混合不影响我尝试做的旋转结果吗?
15 opengl  trackball 

1
如何在球体上产生程序噪声?
我想在球体表面上产生程序性噪音(例如,程序性地产生行星或大理石纹理的球)。当然,我可以采用一种标准的噪声算法并将其映射到球体上,但这存在将平面投影到球体上的所有问题,例如极点或其他地方的变形。 我想我可能会产生体积噪声并“切出”球体,但这似乎不必要地效率低下-并且,如果该噪声具有一些基于网格的伪像,则这些伪像仍不会均匀地出现在球体上。此外,至少在单工噪声的情况下,从3D噪声中切出2D切片通常看起来与立即生成2D噪声不同。 有什么方法可以避免这些问题,例如通过在球体上自然产生噪声?噪声至少应具有Perlin噪声的质量,理想情况下应具有Simplex噪声的质量。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.