问题标签 [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 回答
1625 浏览

opengl - 如何使用 opengl 和 cg 进行多通道渲染

我想实现一个关于铅笔渲染的算法。现在我有 32 种不同笔触强度的纹理和一些模型。过程是这样的。首先,我应该使用 Phong 着色来确定强度。然后我应该将纹理映射到渲染结果。

纹理应存储在 3d 纹理空间中。问题是我不知道如何使用 opengl 和着色器进行多通道渲染。而且我不知道如何访问具有正确坐标的纹理。如果网格的面小于纹理怎么办?任何人都可以告诉我一些这样做的例子吗?

0 投票
1 回答
1385 浏览

opengl - 使用 OpenGL 和 Cg 的环境映射

我写了一个程序,使用OpenGL和Cg着色器语言实现环境映射。但是结果不是很正确。计算模型的颜色时,我们会将反射与贴花纹理混合。一个称为反射率的统一参数允许应用程序控制材料的反射程度。

首先我列出我的片段 Cg 代码:

我将统一参数反射率设置为 0.6。结果是: 在此处输入图像描述

我们可以看到,贴花纹理的颜色信息丢失了。只有环境立方体纹理的颜色信息。如果我将反射率设置为 0,模型会变暗。但是,如果我将片段 cg 代码中的 color.xyz 更改为:

我可以得到正确的结果(只有贴花纹理的颜色): 在此处输入图像描述

如果我将片段 cg 代码中的 color.xyz 更改为:

我也可以获得正确的结果(只有环境立方体纹理中的颜色): 在此处输入图像描述

我的问题是:为什么当我使用 Cg 函数lerp将贴花纹理的颜色信息与环境立方体纹理的颜色信息混合时它不起作用?

最后我列出了我的 cg 顶点着色器和 cpp 文件:vertex.cg:

主.cpp:

0 投票
2 回答
1332 浏览

opengl - 如何在 opengl 和 cg 着色器中使用 3d 纹理?

我遇到了 3d 纹理映射的问题。如果我有几个 2d 纹理,并且我想用这些 2d 纹理构建一个 3d 纹理。我能做些什么来把所有这些数据放在一起?函数 glTexImage3D 以参数 const GLvoid *texels 结束,该参数导致纹理数据。但现在我有 32 个 2D 纹理并且想要获得 3D 纹理。怎么做?

第二个问题是关于图像空间过滤方法。有没有人知道它是什么?我应该使用这种方法来确定纹理坐标。

0 投票
2 回答
2801 浏览

opengl - “渲染到纹理”和多通道渲染

我正在实现一个关于铅笔渲染的算法。首先,我应该使用 Phong 着色来渲染模型以确定强度。然后我应该将纹理映射到渲染结果。

我将使用 opengl 和 cg 着色器进行多通道渲染。有人告诉我我应该尝试“渲染到纹理”。但是我不知道如何使用这种方法来获得我想要的效果。在我看来,我们应该首先使用这种方法来渲染网格,然后我们可以获得关于整个场景的 2D 纹理。现在我们已经将内容绘制到帧缓冲区,接下来我们应该渲染到屏幕上,对吧?但是如何使用渲染的纹理并对其进行一些后期处理呢?任何人都可以告诉我一些关于它的代码或链接吗?

0 投票
1 回答
880 浏览

geometry - 在 Cg 着色器中对球体进行纹理处理

所以我需要从 Cg 中的像素/片段着色器中将纹理映射到球体。

我在每次传递中作为“输入”的是笛卡尔坐标 x、y、z,用于球体上我希望对纹理进行采样的点。然后我将这些坐标转换为球坐标,并分别使用角度 Phi 和 Theta 作为 U 和 V 坐标,如下所示:

我知道这个简单的映射会在球体的两极产生接缝,但目前,我的问题是纹理在球体上重复了几次。我想要和需要的是整个纹理恰好围绕球体缠绕一次。

我已经摆弄了着色器并搜索了几个小时,但我找不到解决方案。我想我需要在某处应用某种缩放,但在哪里?或者,也许我完全走错了路,我对 Cg 和着色器编程很陌生……感谢您的帮助!

0 投票
1 回答
218 浏览

c - CGFX 着色器从 Alpha 通道中提取数据

我也在 Nvidia Developer 讨论中发布了这个。

http://forums.developer.nvidia.com/devforum/discussion/9946/extracting-numbers-cgfx-shader

我正在学习编写我的第一个 cgfx 着色器——一个地形着色器。所以我只能使用 1 个顶点通道(alpha 通道),我希望它存储 3 个蒙版。我在 3d App Maya 中编写了一个脚本没有问题,我可以将 1 个蒙版存储在十分位,1 个在百分位,1 个在千分位。

每个原始绘制的蒙版都被夹在 0 - .9 处(以防止使用 fmod 归零),因此如果一个顶点具有:

掩码 1 =.857

掩码 2 =.345

掩码 3 -.948

此顶点的组合 Alpha 通道为 = .839

我遇到的问题是我无法在我的着色器中正确地将这些蒙版提取到单独的蒙版中。

如果我输出 Mask1,我会得到正确混合好的遮罩。我这样做:

如果我输出 Mask2,我会得到所有这些奇怪的伪像。看起来 mask1 正在将自己推到顶部,即使我只输出 Mask2。我很肯定数学是有效的,我在 Maya 中运行了同样的东西来存储开始的值。谁能告诉我为什么会这样?

甚至:

这应该只是将掩码 2 推到十分位并擦除掩码 1 会导致相同的伪影。

我在 Nvidia 论坛上发布了一些有关该问题的图片,但由于防止垃圾邮件,我无法在此处发布。

http://forums.developer.nvidia.com/devforum/discussion/9946/extracting-numbers-cgfx-shader

非常感谢您的帮助-感谢您通读!如果可以/有时间,请解释您的回复,我是编程新手,所以描述性越强越好!

0 投票
1 回答
257 浏览

c - CGFX着色器多次输出顶点数据

如何多次从顶点着色器输出到像素着色器。例如,在对顶点着色器中的顶点颜色执行一些不同的数学运算后,我需要将顶点颜色作为浮点数 4 输出到像素着色器 4 次?

我可以这样做吗?我尝试创建一个空的 float4 color2,从 In.color 读取 In.vertcolor 并输出...我没有收到任何错误,但我的纹理是白色的。它只是读取任何空的浮点数 4 ......

这是我本节的代码。谢谢!

0 投票
1 回答
2337 浏览

c++ - 我在这个 CG 程序上做错了吗?

我使用 Ogre3D 作为图形引擎。

我手动创建了一个工作正常的网格,uvs 是正确的并且设置为表示网格坐标(对于这个例子,网格是 10 x 10)

我在顶点程序中什么都不做,并且有一个非常简单的片段程序。我已经包含了两个程序和材料文件来解释。

我的问题是,即使将过滤设置为无,颜色似乎也与我的原始图像不同(这只是我使用的测试图像,因为我在食人魔中手动创建纹理时遇到问题)。事实证明,问题不在于我在 ogre 中的代码,而更可能与材质文件或片段/顶点程序有关。

我还包括左侧输出的屏幕截图和右侧的原始图像。片段着色器还在顶部绘制了一个简单的网格,因此我可以确保正确传递 uv 坐标。他们似乎是。

在此处输入图像描述

任何见解都将不胜感激,因为我真的不确定我做错了什么。

材料文件:

CG文件:

0 投票
1 回答
355 浏览

shader - 在统一 cg 着色器中使用 sizeof 浮点数

我正在尝试使用 cg 为统一编写着色器,我想知道我的浮点数的精度,但我不知道如何使用 sizeof 命令。当我尝试使用它时,我得到了错误:

218 是显示“CGPROGRAM”的行。

谁能告诉我是否有使用 arbvp1/arbfp1 配置文件作为浮点数的标准尺寸或如何使用 sizeof 命令?

0 投票
2 回答
388 浏览

opengl - CgFx 编译器错误“未知状态 'VertexShader'”

我有以下 CgFx 文件:

使用 cgc 验证 3 个着色器时,它们都可以正常编译。

但是当我尝试使用以下方法编译整个效果时:

然后我收到以下错误:

我做错了什么?