Articles of 顶点着色器

在OpenGL顶点着色器中input数组

像这样的东西是有效的作为顶点着色器的input? layout (location = 0) in float[6] faceTextureOffsets; 我知道你可以使用像vec3s的东西,但在这种情况下,我需要一个6浮点数组。 我正在使用纹理地图集,我希望渲染的立方体的不同边具有不同的纹理,我需要一种方法来改变纹理地图集中的位置。

Unity Vertex着色器重新计算渲染器边界

我做了一个简单的广告牌gpu实例化顶点着色器,它基于投影matrix来操纵对象的顶点。 问题是渲染器边界不会更新来封装对象。 如果对象渲染边界不在视图中,对象会因为截断而消失,有没有办法在操作verticies之后重新计算渲染边界,或者是将边界手动操作为该对象的最大尺寸。

立方体贴图纹理只适用于顶点位于范围内的对象吗?

我试图纹理一个不是天空盒的.obj文件。 所以问题是,关于立方体贴图的每个教程都会创建其顶点范围为[-1,1]的硬编码立方体。 可能不是,但是有必要将我的.obj模型扩展到这个范围? 此外,为了将我的片段与正确的纹理贴图进行映射 – 我看到有人在线告诉我应该记下一个点,然后用着色器中的模型中心c将其减去。 有人说我应该正常化他们? normalize(p – c)我希望你能帮我提供一个简单的解释。

一行中的顶点变换不同?

使用GL_LINE ,是否有办法使顶点(或几何)着色器以不同的方式处理第一个和第二个点? 即在从p0 – > p1的行中,我想对p0应用不同的转换,而不是p1 。 我知道如何用电脑着色器做到这一点,但我想知道是否有办法用顶点/几何着色器来做到这一点。

什么原因造成这个InvalidOperationException?

我正在努力在当前的游戏中实现2D掩蔽效果。 为此,我有两个纹理,一个用于源图像,另一个用于掩码。 源图像只是一个普通的纹理,所以很容易。 我通过使用graphicsDevice.DrawUserIndexedPrimitives呈现给渲染目标而生成的蒙版,但是当我尝试时,会popup以下错误消息。 这是试图渲染到蒙版渲染目标的函数。 顶点的types是VertexPositionColor。 private void RenderMaskTarget(SpriteBatch sb) { graphicsDevice.SetRenderTarget(maskTarget); graphicsDevice.Clear(Color.Transparent); sb.Begin(SpriteSortMode.Deferred, null, null, null, null, basicEffect, camera.Transform); graphicsDevice.DrawUserIndexedPrimitives(PrimitiveType.LineStrip, vertices, 0, vertices.Length, indexData, 0, primitiveCount); sb.End(); } 这是创造我的基本效果的function。 private void CreateBasicEffect() { Matrix projection = Matrix.CreateOrthographicOffCenter(0, Constants.ScreenWidth, Constants.ScreenHeight, 0, 0, 1); Matrix halfPixelOffset = Matrix.CreateTranslation(-0.5f, -0.5f, 0); basicEffect = new BasicEffect(graphicsDevice) { World […]

我怎样才能通过顶点着色器来滚动飞机?

我有飞机 ,我想通过顶点着色器像这样滚动它: https://www.desmos.com/calculator/mrfrugwvm5 这是我的着色器: Shader " Custom/Rolling " { Properties { _MainTex ("Base (RGB)", 2D) = "white" {} _Bend("Bend",Float) = 1 _Strength("Strength",Float) = 1 } SubShader { Tags {"Queue"="Geometry" "IgnoreProjector"="true" "RenderType"="Opaque"} Cull Off Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct v2f { half2 texcoord : TEXCOORD0; float4 vertex : SV_POSITION; […]

在统一的网格上颜色单独的三角形?

我正在尝试使用Unity来显示模型,并在模型上对某些三角形着色以高亮显示模型的这些部分。 我创造了一个场景,一个相机,一个光源和一个立方体。 在场景加载后,我在导入新网格的立方体上有一个脚本,并用新网格replace立方体网格。 我也给每个三角形随机的颜色。 void Update () { if (Time.time > 10 && newShapeLoaded) { System.Collections.Generic.List<facet> newModel = readStl(@"C:\testing1\stls\sphere.stl"); System.Collections.Generic.List<Vector3> vertices = new System.Collections.Generic.List<Vector3>(); foreach (facet f in newModel) { vertices.Add(f.vecA); vertices.Add(f.vecB); vertices.Add(f.vecC); } Mesh mesh = GetComponent<MeshFilter>().mesh; mesh.vertices = vertices.ToArray(); int[] t = new int[vertices.Count]; Color32[] colors = new Color32[vertices.Count]; Color32 currentColor = new […]

线性和对数z缓冲区之间的区别

我已经search了一段时间的这个话题,我无法在谷歌上find它。 我遇到了几种方法来避免z-fighting,它们是线性z缓冲区,对数z缓冲区和反向z缓冲区。 我决定暂时离开z缓冲区,因为我不打算使用OpenGL 4.5。 事情是我不知道线性和对数z缓冲区之间的区别。 “线性”我的意思是: float fz = gl_Position.z * gl_Position.w; gl_Position.z = (fz – near) * 2.0 / (far – near) – 1.0; 而通过“对数”我的意思是: float w = gl_Position[3]; float C = 0.001; gl_Position.z = (2 * log(C * w + 1) / log(C * far + 1) – 1) * w; 如果我正确理解这些代码,线性尝试均匀地映射所有的z值。 对数也是如此。 […]

HLSL如何水平翻转几何

我想在垂直于YZ平面的任意平面的顶点着色器中水平翻转我的非对称3d模型。 这应该将模型的所有内容从左侧切换到右侧(就像在Photoshop中翻转一样)。 在像素着色器中做这个工作将会是一个巨大的计算成本(额外的RT,更多的全屏样本…),所以它必须在顶点着色器中完成。 再一次:这不是reflection,我需要翻转整个模型。 我以为我可以简单地做到以下几点: closures剔除。 在顶点着色器中运行以下代码: input.Position = mul(input.Position, World); // World[3][0] holds x value of the model's pivot in the World. if (input.Position.x <= World[3][0]) input.Position.x += World[3][0] – input.Position.x; else input.Position.x -= input.Position.x – World[3][0]; … 该模型从未画出。 我错在哪里? 我认为,索引缓冲区。 可以做些什么呢? PS这是很难在这里格式化代码。 感谢pandas,我发现我的问题。 解: // Do thins before anything else in the vertex […]

我能用gl_Position的第四个组件做什么?

当我设置gl_Position我通常将其赋值为gl_Position = vec4(in_position, 1.0) ,其中in_position作为表示模型顶点的三个分量的向量。 但查找教程等,我无法find任何解释gl_Position vec4的第四个组成部分做什么,除了使向量足够大,所以可以应用matrix转换。 问 :我可以用gl_Position的第四个元素做什么/它在渲染过程中有什么影响?