问题标签 [cg]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
712 浏览

opengl - 将帧缓冲区对象附加到具有 8 位内部格式的 3D 纹理是否正确

基本上,我的程序使用帧缓冲区对象渲染到 3D 纹理。如果我附加到 fbo 的 3D 纹理是 GL_RGB8 格式,即每纹素 24 位,则没有问题。仅使用其中的 8 位。当我尝试使用 GL_ALPHA8(每纹素 8 位)作为 3D 纹理的内部格式时,会出现问题,渲染结果为空白。我用来渲染到 fbo 的 cg 片段着色器如下所示:

我做错了什么还是 fbo 不支持渲染到 8 位纹素纹理?我主要不确定片段着色器的输出格式是否正确。因为帧缓冲区是 8 位,但输出是 24 位。我应该修改片段着色器的输出格式吗?如果是这样,我应该使用什么格式?

非常感谢您的任何意见!

0 投票
1 回答
1032 浏览

c++ - C++ Nvidia Cg 问题

我最近开始使用Nvidia Cg着色器,如果我在Nvidia GPUGTS250在我的情况下)上这样做,一切看起来和工作都很好。

我尝试启动相同的(我自己的测试应用程序),ATI HD4650但没有看到任何输出。在那之后,我开始尝试测试示例(提供Nvidia Cg 3.0)和 6/7 工作,但第一个(似乎是最简单的)没有。

这是着色器代码:

我不知道为什么这个简单的着色器不起作用,而例如与以下 passthru-shader配对Nvidia Cg SDK的相同着色器确实起作用(来自 的示例 2 ):

有人遇到过同样的麻烦吗?有任何想法吗?

谢谢你。


在此处更新:打开最大调试输出使问题变得明显:

该包中的第一个示例是唯一一个只有顶点着色器的示例,没有任何(甚至是简单的直通)像素着色器。我不知道为什么 Nvidia Cg 运行时会在这种情况下生成不兼容的着色器,但它显然只在有点旧的 GPU ( ATI HD4650) 上失败了。

无论如何,我很愚蠢,可以在不打开调试输出的情况下工作。

2 Alex Farber:我想你可以发布一个虚拟答案,这样我就可以奖励你,因为你帮助我意识到我忘了打开调试。谢谢你。

0 投票
1 回答
834 浏览

c++ - 使用 Cg 渲染到屏幕外帧缓冲区对象的示例

我想看一个使用 nVidia Cg 渲染到屏幕外帧缓冲区对象的示例。

我可以访问的计算机有显卡但没有显示器(或 X 服务器)。所以我想渲染我的东西并将它们作为图像输出到磁盘上。显卡是GTX285。

0 投票
1 回答
519 浏览

opengl - Cg:从浮点纹理写入/读取的正确方法

我目前有一个 R8G8B8 浮点渲染目标,并希望将其用作 R24 目标。编码

似乎钳制在 0 和 1 之间。

在 Cg 中写入/读取浮点纹理的正确方法是什么?

0 投票
1 回答
2133 浏览

opengl - 着色器和 opengl 转换

当我将着色器(在 cg 中)添加到我的 opengl 程序时,所有本地转换(glRotatef、glTranslatef 和 glPushMatrix 和 glPopMatrix 之间的 glScalef)都停止工作。转换外部推送/弹出仍然有效。那么这里可能有什么问题呢?

更新:我在场景中心有一个旋转立方体:

然后我将世界观和世界观投影矩阵发送到着色器:

顶点着色器代码:

所以最后立方体不旋转,但如果我写(没有推/弹出)

一切正常。我该如何解决?

0 投票
1 回答
724 浏览

c++ - 在 Flex/Bison 中嵌入其他语言

底线:

如果你想使用 Flex/Bison 在 C++ 中添加一个非常小的特性,你会怎么做?例如,void xxx()使用语法声明函数的能力:foo%%: xxx

整个故事:

一旦我编写了一个自定义着色器处理程序,该程序可以从多个块构建现成的 Cg/GLSL 像素和顶点着色器。我添加了一些功能,主要与静态编译相关(类似于“更好的预处理器”)。

例如,看起来像

使用纯宏,看起来像

用我的“语言”。如您所见,可以为可变的灯光/材质类型提供“功能”。还有可能“调用”其他函数并标记特定着色器需要哪些统一/可变属性。

为什么要这么努力?因为(尤其是在像 SM 2.0 这样的早期卡中)属性有很多限制,我的“编译器”生成了带有所需属性/变量列表的即用型着色器,像素和顶点着色器之间的托管参数,优化了一些静态的东西(只是为了可读性,因为 Cg 编译器稍后会对其进行优化)。

好的,但我写所有这些并不是为了赞美自己或其他什么。

我用 C# 编写了这个“编译器”,它最初是一个非常小的程序。但是随着时间的流逝,添加了许多功能,现在程序完全一团糟,没有重构选项。此外,使用 C# 编码意味着我无法将此编译器直接嵌入到 C++ 游戏中,这迫使我生成进程来编译着色器(这需要很多时间)。

我想使用 C++ 和 Flex/Bison 工具包重写我的语言/编译器。我已经在 Flex/Bison 中编写了高效的数学解析器,所以我在这方面有些经验。但是,有一件事我自己无法解决,这是我的问题的一个主题。

我怎样才能将 GLSL 嵌入到我的语言中?在 C# 编译器中,我只是逐行检查行是否以特殊字符(如 % 或 [)开头,后来使用 string_replace 和/或正则表达式做了许多技巧和黑客攻击。

现在我想写下一个干净的 Bison 语法并正确地做。但是包括 GLSL 的整个语法让我害怕。它是一种庞大而复杂的语言,不断发展。无论如何,我最想做的就是传递所有这些 GLSL 代码。

如果您根本没有 GLSL/Cg/图形编程经验,这不是很重要。这个问题可以改写成“底线”。

那么,如果你想使用 Flex/Bison 在 C++ 中添加一个非常小的特性,你会怎么做呢?例如,void xxx()使用语法声明函数的能力:foo%%: xxx

0 投票
1 回答
226 浏览

opengl - 带有 Cg 的 OpenGL 光照

我已经熟悉 OpenGL 的原生灯光。

我的问题是如何使用 Cg 渲染灯光?我还需要声明普通的OpenGL灯光,然后用Cg来渲染灯光吗?还是全部用Cg完成?

如果您能向我指出一些有关使用 Cg 照明的阅读材料,那也很棒。

0 投票
5 回答
104360 浏览

opengl - 顶点着色器与片段着色器

我已经阅读了一些关于 Cg 的教程,但有一件事对我来说不是很清楚。顶点着色器和片段着色器之间到底有什么区别?在什么情况下,一种比另一种更适合?

0 投票
1 回答
779 浏览

opengl - 带 Cg 的 OpenGL 聚光灯

我正在尝试用 Cg 完成聚光灯效果。我已经设法进行正常的环境和漫射照明。

我了解聚光灯的基本功能(位置、方向、截止角),但在 Cg 中处理这些仍然让我难以理解。

这就是我计算聚光灯参数的方式:

方向是聚光灯指向的像素(例如: (0, 0, 0) )

lightPosition是灯光的位置

P是我要强调的重点。IN.position 来自顶点着色器,它已经与 modelViewProj 相乘。

角度是光的方向和光的方向之间的角度的余弦,到我试图照亮的点。

问题是改变光的方向不会影响聚光灯。它总是以 0,0,0 为中心。如果我改变 lightPosition,聚光灯会改变,但它仍然从 0,0,0 开始并在灯光的位置对面扩展

另一件事是,当我计算方向向量时,我使用 lightPosition,而不是 lightP。如果我使用 lightP,聚光灯根本不起作用。

聚光灯也只照亮一半的场景。

我的主要参考资料是The Cg Tutorial中的第 5 章(照明)。

0 投票
0 回答
382 浏览

macos - MacOSX 屏幕保护程序和 CG.framework

我正在为 Mac (10.6) 开发基于 openGL 的屏幕保护程序,并且在链接到 CG.framework 时遇到问题。

一旦提到的框架链接到项目,屏幕保护程序就失效了。没有警告,没有错误。只是在屏幕保护程序列表中变灰。

更新:

重现的方式很简单,但是你需要来自 NVidia 的 CG.framework:

  1. 在 XCode 中创建一个空的屏幕保护程序项目
  2. 编译安装,确认OK
  3. 添加 CG.framework 并重建项目
  4. 尝试再次安装。之后我得到“您不能在这台计算机上使用“xxx”屏幕保护程序。请联系此屏幕保护程序的开发人员以获取更新版本。” 信息