Articles of cg

从OpenGL中的Cg着色器访问统一variables

我想用OpenGL实现一个简单的PC程序,使用强制Cg着色器(不需要任何Unity)。 我在这个页面上find了一些提示http://bobobobo.wordpress.com/2008/10/05/cg-1/ ,并在我自己的项目中保存了Cgprogram , Cgcontext和Cgprofiletypes。 问题是:如何访问C ++代码中的统一variables? 我已经尝试了glGetUniformLocation的方式,但这将无法正常工作,因为第一个参数必须是GLuinttypes的程序ID,我有CG程序types。 我已经自己search了(包括Nvidia Cg'教程'),但是我似乎无法在页面上findCg和OpenGL,而无需处理Unity。 编辑:我现在可以访问variables,但在我的情况下,我试图改变一个纹理,它不绑定。

瓷砖地图着色器?

我正在尝试着写一个统一的着色器,这个着色器将从一个精灵表中绘制一个贴图,并将它们绘制在一个贴图上。 我是着色器新手,所以这可能是完全错误的,我认为这可能只是我的一个math错误,但也许我误解了着色器的工作原理。 这是我的着色器: Shader "Custom/TileMapShader" { Properties { _TileSheet ("Tile_Sheet", 2D) = "white" {} } SubShader { Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" uniform sampler2D _TileSheet; uniform float2 _MapSize; struct vertexInput { float4 vertex : POSITION; float2 texcoord: TEXCOORD0; float4 tilecoord : TEXCOORD1; }; struct vertexOutput { float4 pos : […]

在unity3d的CG Shader里面的两遍之间共享一个函数

我正在为Unity3d编写CG语言的着色器。 在制作透明对象时,您需要在SubShader中创建两个相似的传递。 首先只渲染背面( Cull Front ),其次渲染正面( Cull Back )。 但是顶点和片段函数的代码是一样的。 是否有可能不加倍的代码和声明一些函数,将通过共享? 我想在我的代码示例中有类似的东西。 Shader "cool shader" { Properties { … } SubShader { CGPROGRAM // need to declare vertexOutput somewhow here float4 sharedFragFoo(vertexOutput i) : COLOR // How to make smth like this? { …. return float4(…); } ENDCG pass { CGPROGRAM #pragma vertex vert #pragma […]

自定义的深度偏移(顶点)着色器

正如大多数中间graphics程序员所知道的,z战斗可能是一个问题。 这就是为什么大多数游戏引擎使用斜率深度偏移algorithm来防止这种情况发生的原因。 由于没有关于如何执行的直接信息,除了微软的参考DirectX页面之外 ,我想询问是否有人知道如何编写顶点着色器来实现这样的机制。 我写了一个片段,但这不像预期的那样。 这是(Cg顶点着色器代码): out_position = mul(worldviewproj_matrix, in_position); out_world_position = mul(world_matrix, in_position); float Dz = camera_position.z – out_world_position.z; float Dy = camera_position.y – out_world_position.y; float Dx = camera_position.x – out_world_position.x; float m = max( abs(Dz / Dy), abs(Dz / Dx)); float Offset = m * main_bias + main2_bias; out_position.z -= Offset * 0.005;

CG / CGFX到GLSL

所以,我正在从我心爱的XNA到OpenTK的痛苦的举动,我卡住了: 由于我已经有很多用HLSL编写的着色器,所以NVidia的CG编译器看起来像是一种很自然的方式来减less对现有代码的影响。 然而,我很困惑如何编译使用技术和通过的着色器,而不是分离顶点和片段着色器程序。 cgc编译器似乎要求为着色器指定入口点。 但是,在没有main()函数的情况下,具有多个潜在入口点的着色器的含义尚不清楚。 例如,简单的CG效果(在永无休止的FX Composer中产生的现成的CG效果): /* % Description of my shader. % Second line of description for my shader. keywords: material classic date: YYMMDD */ float4x4 WorldViewProj : WorldViewProjection; float4 mainVS(float3 pos : POSITION) : POSITION{ return mul(WorldViewProj, float4(pos.xyz, 1.0)); } float4 mainPS() : COLOR { return float4(1.0, 0.0, 1.0, 1.0); } technique […]

计算着色器中从查看器到对象的距离

早上好, 我正在通过创建本文中概述的球形广告牌技术。 我正在尝试创建一个着色器,用于计算从相机到场景中所有对象的距离,并将结果存储在纹理中。 我一直得到一个完全黑色或白色的纹理。 这是我的问题: 我认为从食人魔自动发送到顶点着色器的位置是在对象空间中? gpu将顶点着色器的输出位置发送到片段着色器时进行插值。 它是否对我的深度计算执行相同操作,还是需要将该计算移至片段着色器? 有没有办法debugging着色器? 我没有错误,但我不知道我得到我的参数正确传递到着色器。 这是我的着色器代码: void DepthVertexShader( float4 position : POSITION, uniform float4x4 worldViewProjMatrix, uniform float3 eyePosition, out float4 outPosition : POSITION, out float Depth ) { // position is in object space // outPosition is in camera space outPosition = mul( worldViewProjMatrix, position ); // calculate distance from […]

GLSL到Cg片段着色器

我在OpenGL上的Swiftless网站上发现了非常有用的资源。 不幸的是,我无法设法将GLSL片段着色器调整到使用Cg的项目。 这里是: uniform sampler2D color_texture; uniform sampler2D normal_texture; void main() { // Extract the normal from the normal map vec3 normal = normalize(texture2D(normal_texture, gl_TexCoord[0].st).rgb * 2.0 – 1.0); // Determine where the light is positioned (this can be set however you like) vec3 light_pos = normalize(vec3(1.0, 1.0, 1.5)); // Calculate the lighting diffuse value […]

Unity:cg片段着色器处理点的数组

我需要编写一个片段着色器,它可以以某种方式知道场景中的N个点,并根据它们与点的世界坐标距离变暗像素。 我正在寻找一种适合移动设备的方法。 我的图像我可以通过点作为纹理,但我卡在搞清楚如何有效地评估如果一个像素是足够接近的任何N点(我知道如何做到这一点,但没有一个N循环?)。 任何想法,如果这是可行的性能高效的方式? 所有的想法都欢迎。 谢谢!

Unity – 在片段着色器中访问svPosition

我试图访问我的片段程序中的svPosition ,但我一直有这个错误。 无效input语义'POSITION':合法索引在[1,15]无效ps_3_0input语义'POSITION' 以下是关于我的整个着色器的一些信息。 struct : float4 pos : SV_POSITION; vertex : o.pos = mul(UNITY_MATRIX_MVP, v.vertex); fragment : col.rgb = i.pos.xyz; 任何想法如何访问此值?

确定哪个点沿着方向vector更远

我试图写一个平截头体剔除algorithm,只需通过testing轴alignment的一个平面框,而研究这个我碰到了一篇文章在这里: input链接描述这里我遇到的麻烦是确定哪些点是最平面的法线如下所示: 对于每个箱子,我需要确定哪个角落或箱子沿着平面的法线方向最远。 在网站上的伪代码对我来说没有意义,因为我的盒子类的结构不同,任何帮助将不胜感激。